Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 341760
Collapse All | Expand All

(-)src/org/eclipse/rwt/internal/engine/RWTServletContextListener.java (-1 lines)
Lines 289-295 Link Here
289
        }
289
        }
290
      }
290
      }
291
    } else {
291
    } else {
292
      phaseListeners.add( new PreserveWidgetsPhaseListener() );
293
      phaseListeners.add( new CurrentPhase.Listener() );
292
      phaseListeners.add( new CurrentPhase.Listener() );
294
    }
293
    }
295
    PhaseListenerRegistry phaseListenerRegistry = RWTFactory.getPhaseListenerRegistry();
294
    PhaseListenerRegistry phaseListenerRegistry = RWTFactory.getPhaseListenerRegistry();
(-)src/org/eclipse/rwt/internal/lifecycle/IDisplayLifeCycleAdapter.java (-1 / +2 lines)
Lines 18-24 Link Here
18
18
19
19
20
public interface IDisplayLifeCycleAdapter extends ILifeCycleAdapter {
20
public interface IDisplayLifeCycleAdapter extends ILifeCycleAdapter {
21
  void preserveValues( Display display );
22
  void readData( Display display );
21
  void readData( Display display );
22
  void preserveValues( Display display );
23
  void render( Display display ) throws IOException;
23
  void render( Display display ) throws IOException;
24
  void clearPreserved( Display display );
24
}
25
}
(-)src/org/eclipse/rwt/internal/lifecycle/PreserveWidgetsPhaseListener.java (-85 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2002, 2009 Innoopract Informationssysteme GmbH.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Innoopract Informationssysteme GmbH - initial API and implementation
10
 *     EclipseSource - ongoing development
11
 ******************************************************************************/
12
package org.eclipse.rwt.internal.lifecycle;
13
14
import org.eclipse.rwt.lifecycle.*;
15
import org.eclipse.swt.internal.widgets.*;
16
import org.eclipse.swt.internal.widgets.WidgetTreeVisitor.AllWidgetTreeVisitor;
17
import org.eclipse.swt.widgets.*;
18
19
public final class PreserveWidgetsPhaseListener implements PhaseListener {
20
21
  private static final long serialVersionUID = 1L;
22
23
  public void beforePhase( final PhaseEvent event ) {
24
  }
25
26
  public void afterPhase( final PhaseEvent event ) {
27
    if( PhaseId.READ_DATA.equals( event.getPhaseId() ) ) {
28
      Display display = RWTLifeCycle.getSessionDisplay();
29
      if( display != null ) {
30
        preserve( display );
31
      }
32
    } else if( PhaseId.RENDER.equals( event.getPhaseId() ) ) {
33
      Display display = RWTLifeCycle.getSessionDisplay();
34
      if( display != null ) {
35
        clearPreserved( display );
36
      }
37
    }
38
  }
39
  
40
  public PhaseId getPhaseId() {
41
    return PhaseId.ANY;
42
  }
43
  
44
  /////////////////////////////////////////////////////
45
  // Helping methods to preserve widget property values
46
47
  private static void preserve( final Display display ) {
48
    IDisplayLifeCycleAdapter displayLCA = DisplayUtil.getLCA( display );
49
    IWidgetAdapter adapter = DisplayUtil.getAdapter( display );
50
    if( adapter.isInitialized() ) {
51
      displayLCA.preserveValues( display );
52
      IDisplayAdapter displayAdapter
53
        = ( IDisplayAdapter )display.getAdapter( IDisplayAdapter.class );
54
      Composite[] shells = displayAdapter.getShells();
55
      for( int i = 0; i < shells.length; i++ ) {
56
        WidgetTreeVisitor.accept( shells[ i ], new AllWidgetTreeVisitor() {
57
          public boolean doVisit( final Widget widget ) {
58
            AbstractWidgetLCA widgetLCA = WidgetUtil.getLCA( widget );
59
            widgetLCA.preserveValues( widget );
60
            return true;
61
          }
62
        } );
63
      }
64
    }
65
  }
66
  
67
  static void clearPreserved( final Display display ) {
68
    WidgetAdapter widgetAdapter 
69
      = ( WidgetAdapter )DisplayUtil.getAdapter( display );
70
    widgetAdapter.clearPreserved();
71
    IDisplayAdapter displayAdapter
72
      = ( IDisplayAdapter )display.getAdapter( IDisplayAdapter.class );
73
    Composite[] shells = displayAdapter.getShells();
74
    for( int i = 0; i < shells.length; i++ ) {
75
      WidgetTreeVisitor.accept( shells[ i ], new AllWidgetTreeVisitor() {
76
        public boolean doVisit( final Widget widget ) {
77
          WidgetAdapter widgetAdapter 
78
            = ( WidgetAdapter )WidgetUtil.getAdapter( widget );
79
          widgetAdapter.clearPreserved();
80
          return true;
81
        }
82
      } );
83
    }
84
  }
85
}
(-)src/org/eclipse/rwt/internal/lifecycle/ReadData.java (-1 / +3 lines)
Lines 23-29 Link Here
23
23
24
  public PhaseId execute() {
24
  public PhaseId execute() {
25
    Display display = RWTLifeCycle.getSessionDisplay();
25
    Display display = RWTLifeCycle.getSessionDisplay();
26
    DisplayUtil.getLCA( display ).readData( display );
26
    IDisplayLifeCycleAdapter displayLCA = DisplayUtil.getLCA( display );
27
    displayLCA.readData( display );
28
    displayLCA.preserveValues( display );
27
    return PhaseId.PROCESS_ACTION;
29
    return PhaseId.PROCESS_ACTION;
28
  }
30
  }
29
}
31
}
(-)src/org/eclipse/rwt/internal/lifecycle/Render.java (-1 / +3 lines)
Lines 25-31 Link Here
25
25
26
  public PhaseId execute() throws IOException {
26
  public PhaseId execute() throws IOException {
27
    Display display = RWTLifeCycle.getSessionDisplay();
27
    Display display = RWTLifeCycle.getSessionDisplay();
28
    DisplayUtil.getLCA( display ).render( display );
28
    IDisplayLifeCycleAdapter displayLCA = DisplayUtil.getLCA( display );
29
    displayLCA.render( display );
30
    displayLCA.clearPreserved( display );
29
    return null;
31
    return null;
30
  }
32
  }
31
}
33
}
(-)src/org/eclipse/rwt/lifecycle/JSWriter.java (-4 / +4 lines)
Lines 66-73 Link Here
66
66
67
  private static final String WRITER_MAP
67
  private static final String WRITER_MAP
68
    = JSWriter.class.getName() + "#map";
68
    = JSWriter.class.getName() + "#map";
69
  private static final String HAS_WINDOW_MANAGER
69
  private static final String HAS_WIDGET_MANAGER
70
    = JSWriter.class.getName() + "#hasWindowManager";
70
    = JSWriter.class.getName() + "#hasWidgetManager";
71
  private static final String CURRENT_WIDGET_REF
71
  private static final String CURRENT_WIDGET_REF
72
    = JSWriter.class.getName() + "#currentWidgetRef";
72
    = JSWriter.class.getName() + "#currentWidgetRef";
73
73
Lines 749-759 Link Here
749
    IServiceStateInfo stateInfo = ContextProvider.getStateInfo();
749
    IServiceStateInfo stateInfo = ContextProvider.getStateInfo();
750
    if(    currentPhaseIsRender()
750
    if(    currentPhaseIsRender()
751
        && widget != null
751
        && widget != null
752
        && stateInfo.getAttribute( HAS_WINDOW_MANAGER ) == null )
752
        && stateInfo.getAttribute( HAS_WIDGET_MANAGER ) == null )
753
    {
753
    {
754
      writeVarAssignment( WIDGET_MANAGER_REF,
754
      writeVarAssignment( WIDGET_MANAGER_REF,
755
                          "org.eclipse.swt.WidgetManager.getInstance()" );
755
                          "org.eclipse.swt.WidgetManager.getInstance()" );
756
      stateInfo.setAttribute( HAS_WINDOW_MANAGER, Boolean.TRUE );
756
      stateInfo.setAttribute( HAS_WIDGET_MANAGER, Boolean.TRUE );
757
    }
757
    }
758
  }
758
  }
759
759
(-)src/org/eclipse/swt/internal/widgets/displaykit/DisplayLCA.java (-33 / +57 lines)
Lines 86-91 Link Here
86
  ////////////////////////////////////////////////////////
86
  ////////////////////////////////////////////////////////
87
  // interface implementation of IDisplayLifeCycleAdapter
87
  // interface implementation of IDisplayLifeCycleAdapter
88
88
89
  public void readData( Display display ) {
90
    readBounds( display );
91
    readCursorLocation( display );
92
    readFocusControl( display );
93
    KeyBindingUtil.readKeyBindingEvents( display );
94
    WidgetTreeVisitor visitor = new AllWidgetTreeVisitor() {
95
      public boolean doVisit( final Widget widget ) {
96
        IWidgetLifeCycleAdapter adapter = WidgetUtil.getLCA( widget );
97
        adapter.readData( widget );
98
        return true;
99
      }
100
    };
101
    Shell[] shells = getShells( display );
102
    for( int i = 0; i < shells.length; i++ ) {
103
      Composite shell = shells[ i ];
104
      WidgetTreeVisitor.accept( shell, visitor );
105
    }
106
    for( int i = 0; i < shells.length; i++ ) {
107
      if( shells[ i ].getMaximized() || shells[ i ].getFullScreen() ) {
108
        Object adapter = shells[ i ].getAdapter( IShellAdapter.class );
109
        IShellAdapter shellAdapter = ( IShellAdapter )adapter;
110
        shellAdapter.setBounds( display.getBounds() );
111
      }
112
    }
113
    DNDSupport.processEvents();
114
  }
115
89
  public void preserveValues( final Display display ) {
116
  public void preserveValues( final Display display ) {
90
    IWidgetAdapter adapter = DisplayUtil.getAdapter( display );
117
    IWidgetAdapter adapter = DisplayUtil.getAdapter( display );
91
    adapter.preserve( PROP_FOCUS_CONTROL, display.getFocusControl() );
118
    adapter.preserve( PROP_FOCUS_CONTROL, display.getFocusControl() );
Lines 93-98 Link Here
93
    adapter.preserve( PROP_TIMEOUT_PAGE, getTimeoutPage() );
120
    adapter.preserve( PROP_TIMEOUT_PAGE, getTimeoutPage() );
94
    adapter.preserve( PROP_EXIT_CONFIRMATION, getExitConfirmation() );
121
    adapter.preserve( PROP_EXIT_CONFIRMATION, getExitConfirmation() );
95
    KeyBindingUtil.preserveKeyBindings( display );
122
    KeyBindingUtil.preserveKeyBindings( display );
123
    if( adapter.isInitialized() ) {
124
      Shell[] shells = getShells( display );
125
      for( int i = 0; i < shells.length; i++ ) {
126
        WidgetTreeVisitor.accept( shells[ i ], new AllWidgetTreeVisitor() {
127
          public boolean doVisit( final Widget widget ) {
128
            AbstractWidgetLCA widgetLCA = WidgetUtil.getLCA( widget );
129
            widgetLCA.preserveValues( widget );
130
            return true;
131
          }
132
        } );
133
      }
134
    }
96
  }
135
  }
97
136
98
  public void render( final Display display ) throws IOException {
137
  public void render( final Display display ) throws IOException {
Lines 113-118 Link Here
113
      KeyBindingUtil.writeKeyBindings( display );
152
      KeyBindingUtil.writeKeyBindings( display );
114
    }
153
    }
115
  }
154
  }
155
  
156
  public void clearPreserved( Display display ) {
157
    WidgetAdapter widgetAdapter = ( WidgetAdapter )DisplayUtil.getAdapter( display );
158
    widgetAdapter.clearPreserved();
159
    Composite[] shells = getShells( display );
160
    for( int i = 0; i < shells.length; i++ ) {
161
      WidgetTreeVisitor.accept( shells[ i ], new AllWidgetTreeVisitor() {
162
        public boolean doVisit( final Widget widget ) {
163
          WidgetAdapter widgetAdapter = ( WidgetAdapter )WidgetUtil.getAdapter( widget );
164
          widgetAdapter.clearPreserved();
165
          return true;
166
        }
167
      } );
168
    }
169
  }
116
170
117
  private static void renderShells( Display display ) throws IOException {
171
  private static void renderShells( Display display ) throws IOException {
118
    RenderVisitor visitor = new RenderVisitor();
172
    RenderVisitor visitor = new RenderVisitor();
Lines 151-158 Link Here
151
    IWidgetAdapter adapter = DisplayUtil.getAdapter( display );
205
    IWidgetAdapter adapter = DisplayUtil.getAdapter( display );
152
    Object oldTimeoutPage = adapter.getPreserved( PROP_TIMEOUT_PAGE );
206
    Object oldTimeoutPage = adapter.getPreserved( PROP_TIMEOUT_PAGE );
153
    if( !timeoutPage.equals( oldTimeoutPage ) ) {
207
    if( !timeoutPage.equals( oldTimeoutPage ) ) {
154
      String pattern
208
      String pattern = "org.eclipse.swt.Request.getInstance().setTimeoutPage( \"{0}\" );";
155
        = "org.eclipse.swt.Request.getInstance().setTimeoutPage( \"{0}\" );";
156
      Object[] param = new Object[] { timeoutPage };
209
      Object[] param = new Object[] { timeoutPage };
157
      String jsCode = MessageFormat.format( pattern, param );
210
      String jsCode = MessageFormat.format( pattern, param );
158
      IServiceStateInfo stateInfo = ContextProvider.getStateInfo();
211
      IServiceStateInfo stateInfo = ContextProvider.getStateInfo();
Lines 162-171 Link Here
162
  }
215
  }
163
216
164
  private static String getTimeoutPage() {
217
  private static String getTimeoutPage() {
165
    String timeoutTitle
218
    String timeoutTitle = RWTMessages.getMessage( "RWT_SessionTimeoutPageTitle" );
166
      = RWTMessages.getMessage( "RWT_SessionTimeoutPageTitle" );
219
    String timeoutHeadline = RWTMessages.getMessage( "RWT_SessionTimeoutPageHeadline" );
167
    String timeoutHeadline
168
      = RWTMessages.getMessage( "RWT_SessionTimeoutPageHeadline" );
169
    String pattern = RWTMessages.getMessage( "RWT_SessionTimeoutPageMessage" );
220
    String pattern = RWTMessages.getMessage( "RWT_SessionTimeoutPageMessage" );
170
    Object[] arguments = new Object[]{ "<a {HREF_URL}>", "</a>" };
221
    Object[] arguments = new Object[]{ "<a {HREF_URL}>", "</a>" };
171
    String timeoutMessage = MessageFormat.format( pattern, arguments );
222
    String timeoutMessage = MessageFormat.format( pattern, arguments );
Lines 218-250 Link Here
218
    ThemeManager.getInstance().registerResources();
269
    ThemeManager.getInstance().registerResources();
219
  }
270
  }
220
271
221
  public void readData( Display display ) {
222
    readBounds( display );
223
    readCursorLocation( display );
224
    readFocusControl( display );
225
    KeyBindingUtil.readKeyBindingEvents( display );
226
    WidgetTreeVisitor visitor = new AllWidgetTreeVisitor() {
227
      public boolean doVisit( final Widget widget ) {
228
        IWidgetLifeCycleAdapter adapter = WidgetUtil.getLCA( widget );
229
        adapter.readData( widget );
230
        return true;
231
      }
232
    };
233
    Shell[] shells = getShells( display );
234
    for( int i = 0; i < shells.length; i++ ) {
235
      Composite shell = shells[ i ];
236
      WidgetTreeVisitor.accept( shell, visitor );
237
    }
238
    for( int i = 0; i < shells.length; i++ ) {
239
      if( shells[ i ].getMaximized() || shells[ i ].getFullScreen() ) {
240
        Object adapter = shells[ i ].getAdapter( IShellAdapter.class );
241
        IShellAdapter shellAdapter = ( IShellAdapter )adapter;
242
        shellAdapter.setBounds( display.getBounds() );
243
      }
244
    }
245
    DNDSupport.processEvents();
246
  }
247
248
  /////////////////////////////
272
  /////////////////////////////
249
  // Helping methods for render
273
  // Helping methods for render
250
274
(-)src/org/eclipse/RWTQ07TestSuite.java (-1 / +1 lines)
Lines 75-81 Link Here
75
    //                RWT core tests, but there is still some refactoring
75
    //                RWT core tests, but there is still some refactoring
76
    //                necessary to achieve this, so they've been moved
76
    //                necessary to achieve this, so they've been moved
77
    //                temporarily to the q07 fragment tests..
77
    //                temporarily to the q07 fragment tests..
78
    suite.addTestSuite( PreserveWidgetsPhaseListener_Test.class );
78
    suite.addTestSuite( PreserveWidgets_Test.class );
79
    suite.addTestSuite( WidgetAdapter_Test.class );
79
    suite.addTestSuite( WidgetAdapter_Test.class );
80
    suite.addTestSuite( DuplicateRequest_Test.class );
80
    suite.addTestSuite( DuplicateRequest_Test.class );
81
    suite.addTestSuite( MouseEvent_Test.class );
81
    suite.addTestSuite( MouseEvent_Test.class );
(-)src/org/eclipse/rwt/internal/lifecycle/PreserveWidgetsPhaseListener_Test.java (-183 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2002, 2011 Innoopract Informationssysteme GmbH and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Innoopract Informationssysteme GmbH - initial API and implementation
10
 *    EclipseSource - ongoing development
11
 *    Frank Appel - replaced singletons and static fields (Bug 337787)
12
 ******************************************************************************/
13
package org.eclipse.rwt.internal.lifecycle;
14
15
import java.io.IOException;
16
17
import junit.framework.TestCase;
18
19
import org.eclipse.rwt.AdapterFactory;
20
import org.eclipse.rwt.Fixture;
21
import org.eclipse.rwt.internal.AdapterManager;
22
import org.eclipse.rwt.internal.AdapterManagerImpl;
23
import org.eclipse.rwt.internal.engine.RWTFactory;
24
import org.eclipse.rwt.internal.service.RequestParams;
25
import org.eclipse.rwt.lifecycle.*;
26
import org.eclipse.swt.SWT;
27
import org.eclipse.swt.internal.widgets.Props;
28
import org.eclipse.swt.widgets.*;
29
30
public class PreserveWidgetsPhaseListener_Test extends TestCase {
31
32
  public static final class TestEntryPointWithShell implements IEntryPoint {
33
    public int createUI() {
34
      Display display = new Display();
35
      new Shell( display, SWT.NONE );
36
      int count = 0;
37
      while( count < 1 ) {
38
        if( !display.readAndDispatch() ) {
39
          display.sleep();
40
        }
41
        count++;
42
      }
43
      return 0;
44
    }
45
  }
46
  
47
  protected void setUp() throws Exception {
48
    Fixture.setUp();
49
    Fixture.fakeNewRequest();
50
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
51
  }
52
53
  protected void tearDown() throws Exception {
54
    Fixture.tearDown();
55
  }
56
57
  public void testInitialization() throws Exception {
58
    // ensures that the default WidgetCopyPhaseListener is registered
59
    // and executes at the designated phases
60
    Display display = new Display();
61
    Composite shell = new Shell( display , SWT.NONE );
62
    final Text text = new Text( shell, SWT.NONE );
63
    text.setText( "hello" );
64
    Fixture.markInitialized( display );
65
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
66
    final StringBuffer log = new StringBuffer();
67
    lifeCycle.addPhaseListener( new PhaseListener() {
68
69
      private static final long serialVersionUID = 1L;
70
71
      public void beforePhase( final PhaseEvent event ) {
72
        if( PhaseId.PROCESS_ACTION.equals( event.getPhaseId() ) ) {
73
          IWidgetAdapter adapter = WidgetUtil.getAdapter( text );
74
          if( "hello".equals( adapter.getPreserved( Props.TEXT ) ) ) {
75
            log.append( "copy created" );
76
          }
77
        }
78
      }
79
80
      public void afterPhase( final PhaseEvent event ) {
81
      }
82
83
      public PhaseId getPhaseId() {
84
        return PhaseId.ANY;
85
      }
86
    } );
87
    Fixture.executeLifeCycleFromServerThread( );
88
    assertEquals( "copy created", log.toString() );
89
  }
90
91
  public void testExecutionOrder() {
92
    final StringBuffer log = new StringBuffer();
93
    Fixture.fakeResponseWriter();
94
    AdapterFactory lifeCycleAdapterFactory = new AdapterFactory() {
95
96
      private AdapterFactory factory = new LifeCycleAdapterFactory();
97
98
      public Object getAdapter( final Object adaptable, final Class adapter ) {
99
        Object result = null;
100
        if( adaptable instanceof Display && adapter == ILifeCycleAdapter.class )
101
        {
102
          result = new IDisplayLifeCycleAdapter() {
103
            public void preserveValues( final Display display ) {
104
              log.append( display.getClass().getName() );
105
            }
106
            public void readData( Display display ) {
107
            }
108
            public void render( Display display ) throws IOException {
109
            }
110
          };
111
        } else {
112
          result = new AbstractWidgetLCA() {
113
            public void preserveValues( final Widget widget ) {
114
              log.append( widget.getClass().getName() );
115
            }
116
            public void readData( final Widget widget ) {
117
            }
118
            public void renderInitialization( final Widget widget ) throws IOException {
119
            }
120
            public void renderChanges( final Widget widget ) throws IOException
121
            {
122
            }
123
            public void renderDispose( final Widget widget ) throws IOException {
124
            }
125
          };
126
        }
127
        return result;
128
      }
129
130
      public Class[] getAdapterList() {
131
        return factory.getAdapterList();
132
      }
133
    };
134
    Fixture.disposeOfServiceContext();
135
    Fixture.createServiceContext();
136
    AdapterManager manager = AdapterManagerImpl.getInstance();
137
    manager.registerAdapters( lifeCycleAdapterFactory, Display.class );
138
    manager.registerAdapters( lifeCycleAdapterFactory, Widget.class );
139
140
    // Create test widget hierarchy
141
    Display display = new Display();
142
    Composite shell = new Shell( display , SWT.NONE );
143
    new Text( shell, SWT.NONE );
144
    // Execute life cycle
145
    Fixture.markInitialized( display );
146
    Fixture.executeLifeCycleFromServerThread( );
147
    String expected = Display.class.getName()
148
                    + Shell.class.getName()
149
                    + Text.class.getName();
150
    assertEquals( expected, log.toString() );
151
  }
152
153
  public void testStartup() throws Exception {
154
    // Simulate startup with no startup entry point set
155
    // First request: (renders html skeletion that contains 'application')
156
    RWTFactory.getEntryPointManager().register( EntryPointManager.DEFAULT, TestEntryPointWithShell.class );
157
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
158
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
159
    lifeCycle.execute();
160
    // Second request: first 'real' one that writes JavaScript to create display
161
    Fixture.fakeResponseWriter();
162
    fakeUIRootRequestParam( RWTLifeCycle.getSessionDisplay() );
163
    lifeCycle.execute();
164
    assertTrue( Fixture.getAllMarkup().indexOf( "setSpace" ) != -1 );
165
  }
166
  
167
  public void testClearPreservedWithDisposedDisplay() {
168
    Fixture.fakePhase( PhaseId.RENDER );
169
    Display display = new Display();
170
    display.dispose();
171
    try {
172
      PreserveWidgetsPhaseListener.clearPreserved( display );
173
    } catch( Exception e ) {
174
      fail( "Preserve-phase-listener must succeed even with disposed display" );
175
    }
176
  }
177
178
  private static void fakeUIRootRequestParam( final Display display ) {
179
    Object adapter = display.getAdapter( IWidgetAdapter.class );
180
    IWidgetAdapter displayAdapter = ( IWidgetAdapter )adapter;
181
    Fixture.fakeRequestParam( RequestParams.UIROOT, displayAdapter.getId() );
182
  }
183
}
(-)src/org/eclipse/rwt/internal/lifecycle/PreserveWidgets_Test.java (+187 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2002, 2011 Innoopract Informationssysteme GmbH and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Innoopract Informationssysteme GmbH - initial API and implementation
10
 *    EclipseSource - ongoing development
11
 *    Frank Appel - replaced singletons and static fields (Bug 337787)
12
 ******************************************************************************/
13
package org.eclipse.rwt.internal.lifecycle;
14
15
import java.io.IOException;
16
17
import junit.framework.TestCase;
18
19
import org.eclipse.rwt.AdapterFactory;
20
import org.eclipse.rwt.Fixture;
21
import org.eclipse.rwt.internal.AdapterManager;
22
import org.eclipse.rwt.internal.AdapterManagerImpl;
23
import org.eclipse.rwt.internal.engine.RWTFactory;
24
import org.eclipse.rwt.lifecycle.*;
25
import org.eclipse.swt.SWT;
26
import org.eclipse.swt.internal.widgets.Props;
27
import org.eclipse.swt.internal.widgets.displaykit.DisplayLCA;
28
import org.eclipse.swt.widgets.*;
29
30
public class PreserveWidgets_Test extends TestCase {
31
32
  public static final class TestEntryPointWithShell implements IEntryPoint {
33
    public int createUI() {
34
      Display display = new Display();
35
      new Shell( display, SWT.NONE );
36
      int count = 0;
37
      while( count < 1 ) {
38
        if( !display.readAndDispatch() ) {
39
          display.sleep();
40
        }
41
        count++;
42
      }
43
      return 0;
44
    }
45
  }
46
47
  private static class LoggingLifeCycleAdapterFactory implements AdapterFactory {
48
49
    private final StringBuffer log;
50
51
    private LoggingLifeCycleAdapterFactory( StringBuffer log ) {
52
      this.log = log;
53
    }
54
55
    public Object getAdapter( final Object adaptable, final Class adapter ) {
56
      Object result = null;
57
      if( adaptable instanceof Display && adapter == ILifeCycleAdapter.class ) {
58
        result = new IDisplayLifeCycleAdapter() {
59
          public void preserveValues( final Display display ) {
60
            log.append( display.getClass().getName() );
61
          }
62
          public void readData( Display display ) {
63
          }
64
          public void render( Display display ) throws IOException {
65
          }
66
          public void clearPreserved( Display display ) {
67
          }
68
        };
69
      } else {
70
        result = new AbstractWidgetLCA() {
71
          public void preserveValues( final Widget widget ) {
72
            log.append( widget.getClass().getName() );
73
          }
74
          public void readData( final Widget widget ) {
75
          }
76
          public void renderInitialization( final Widget widget ) throws IOException {
77
          }
78
          public void renderChanges( final Widget widget ) throws IOException
79
          {
80
          }
81
          public void renderDispose( final Widget widget ) throws IOException {
82
          }
83
        };
84
      }
85
      return result;
86
    }
87
88
    public Class[] getAdapterList() {
89
      return new LifeCycleAdapterFactory().getAdapterList();
90
    }
91
  }
92
93
  protected void setUp() throws Exception {
94
    Fixture.setUp();
95
    Fixture.fakeNewRequest();
96
  }
97
98
  protected void tearDown() throws Exception {
99
    Fixture.tearDown();
100
  }
101
102
  public void testInitialization() throws Exception {
103
    // ensures that the default WidgetCopyPhaseListener is registered
104
    // and executes at the designated phases
105
    Display display = new Display();
106
    Composite shell = new Shell( display , SWT.NONE );
107
    final Text text = new Text( shell, SWT.NONE );
108
    text.setText( "hello" );
109
    Fixture.markInitialized( display );
110
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
111
    final StringBuffer log = new StringBuffer();
112
    lifeCycle.addPhaseListener( new PhaseListener() {
113
      private static final long serialVersionUID = 1L;
114
      public void beforePhase( final PhaseEvent event ) {
115
        if( PhaseId.PROCESS_ACTION.equals( event.getPhaseId() ) ) {
116
          IWidgetAdapter adapter = WidgetUtil.getAdapter( text );
117
          if( "hello".equals( adapter.getPreserved( Props.TEXT ) ) ) {
118
            log.append( "copy created" );
119
          }
120
        }
121
      }
122
      public void afterPhase( final PhaseEvent event ) {
123
      }
124
      public PhaseId getPhaseId() {
125
        return PhaseId.ANY;
126
      }
127
    } );
128
    Fixture.executeLifeCycleFromServerThread( );
129
    assertEquals( "copy created", log.toString() );
130
  }
131
132
  public void testExecutionOrder() {
133
    StringBuffer log = new StringBuffer();
134
    installLoggingLifeCycleAdapterFactory( log );
135
    Display display = new Display();
136
    Composite shell = new Shell( display );
137
    new Text( shell, SWT.NONE );
138
    Fixture.markInitialized( display );
139
    new DisplayLCA().preserveValues( display );
140
    String expected = Shell.class.getName() + Text.class.getName();
141
    assertEquals( expected, log.toString() );
142
  }
143
144
  public void testPreserveValuesWhenDisplayIsUninitialized() {
145
    StringBuffer log = new StringBuffer();
146
    installLoggingLifeCycleAdapterFactory( log );
147
    Display display = new Display();
148
    Composite shell = new Shell( display );
149
    new Text( shell, SWT.NONE );
150
    new DisplayLCA().preserveValues( display );
151
    assertEquals( "", log.toString() );
152
  }
153
154
  public void testStartup() throws Exception {
155
    // Simulate startup with no startup entry point set
156
    // First request: (renders html skeletion that contains 'application')
157
    RWTFactory.getEntryPointManager().register( EntryPointManager.DEFAULT, 
158
                                                TestEntryPointWithShell.class );
159
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
160
    lifeCycle.execute();
161
    // Second request: first 'real' one that writes JavaScript to create display
162
    Fixture.fakeResponseWriter();
163
    Fixture.fakeNewRequest( RWTLifeCycle.getSessionDisplay() );
164
    lifeCycle.execute();
165
    assertTrue( Fixture.getAllMarkup().indexOf( "setSpace" ) != -1 );
166
  }
167
  
168
  public void testClearPreservedWithDisposedDisplay() {
169
    Display display = new Display();
170
    display.dispose();
171
    Fixture.fakePhase( PhaseId.RENDER );
172
    try {
173
      new DisplayLCA().clearPreserved( display );
174
    } catch( Exception e ) {
175
      fail( "Preserve-phase-listener must succeed even with disposed display" );
176
    }
177
  }
178
179
  private static void installLoggingLifeCycleAdapterFactory( StringBuffer log ) {
180
    AdapterFactory lifeCycleAdapterFactory = new LoggingLifeCycleAdapterFactory( log );
181
    Fixture.disposeOfServiceContext();
182
    Fixture.createServiceContext();
183
    AdapterManager manager = AdapterManagerImpl.getInstance();
184
    manager.registerAdapters( lifeCycleAdapterFactory, Display.class );
185
    manager.registerAdapters( lifeCycleAdapterFactory, Widget.class );
186
  }
187
}
(-)src/org/eclipse/rwt/internal/lifecycle/RenderDispose_Test.java (-4 lines)
Lines 22-30 Link Here
22
22
23
public class RenderDispose_Test extends TestCase {
23
public class RenderDispose_Test extends TestCase {
24
24
25
  private final PreserveWidgetsPhaseListener preserveWidgetsPhaseListener
26
    = new PreserveWidgetsPhaseListener();
27
28
  public void testDisposeNotYetInitialized() {
25
  public void testDisposeNotYetInitialized() {
29
    // set up the test widget hierarchy
26
    // set up the test widget hierarchy
30
    Display display = new Display();
27
    Display display = new Display();
Lines 68-74 Link Here
68
  protected void setUp() throws Exception {
65
  protected void setUp() throws Exception {
69
    Fixture.setUp();
66
    Fixture.setUp();
70
    Fixture.fakeResponseWriter();
67
    Fixture.fakeResponseWriter();
71
    RWTFactory.getPhaseListenerRegistry().add( preserveWidgetsPhaseListener );
72
  }
68
  }
73
69
74
  protected void tearDown() throws Exception {
70
  protected void tearDown() throws Exception {
(-)src/org/eclipse/rwt/internal/textsize/MeasurementHandler_Test.java (-1 lines)
Lines 31-37 Link Here
31
31
32
    // Let pass one startup request to init the 'system'
32
    // Let pass one startup request to init the 'system'
33
    Fixture.fakeNewRequest( display );
33
    Fixture.fakeNewRequest( display );
34
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
35
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
34
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
36
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
35
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
37
    ISessionStore session = ContextProvider.getSession();
36
    ISessionStore session = ContextProvider.getSession();
(-)src/org/eclipse/rwt/lifecycle/ControlLCAUtil_Test.java (-3 lines)
Lines 348-354 Link Here
348
  }
348
  }
349
349
350
  public void testProcessKeyEventsWithDoItFlag() {
350
  public void testProcessKeyEventsWithDoItFlag() {
351
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
352
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
351
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
353
    final java.util.List eventLog = new ArrayList();
352
    final java.util.List eventLog = new ArrayList();
354
    Listener doitTrueListener = new Listener() {
353
    Listener doitTrueListener = new Listener() {
Lines 409-415 Link Here
409
  }
408
  }
410
409
411
  public void testProcessTraverseEventsWithDoItFlag() {
410
  public void testProcessTraverseEventsWithDoItFlag() {
412
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
413
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
411
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
414
    final java.util.List eventLog = new ArrayList();
412
    final java.util.List eventLog = new ArrayList();
415
    Listener doitTrueListener = new Listener() {
413
    Listener doitTrueListener = new Listener() {
Lines 461-467 Link Here
461
  }
459
  }
462
460
463
  public void testKeyAndTraverseEvents() {
461
  public void testKeyAndTraverseEvents() {
464
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
465
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
462
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
466
    final java.util.List eventLog = new ArrayList();
463
    final java.util.List eventLog = new ArrayList();
467
    Display display = new Display();
464
    Display display = new Display();
(-)src/org/eclipse/swt/internal/custom/ccombokit/CComboLCA_Test.java (-9 / +1 lines)
Lines 18-25 Link Here
18
18
19
import org.eclipse.rwt.Fixture;
19
import org.eclipse.rwt.Fixture;
20
import org.eclipse.rwt.graphics.Graphics;
20
import org.eclipse.rwt.graphics.Graphics;
21
import org.eclipse.rwt.internal.engine.RWTFactory;
21
import org.eclipse.rwt.internal.lifecycle.JSConst;
22
import org.eclipse.rwt.internal.lifecycle.*;
23
import org.eclipse.rwt.lifecycle.*;
22
import org.eclipse.rwt.lifecycle.*;
24
import org.eclipse.swt.SWT;
23
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.custom.CCombo;
24
import org.eclipse.swt.custom.CCombo;
Lines 261-268 Link Here
261
  }
260
  }
262
261
263
  public void testReadText() {
262
  public void testReadText() {
264
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
265
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
266
    Display display = new Display();
263
    Display display = new Display();
267
    Shell shell = new Shell( display, SWT.NONE );
264
    Shell shell = new Shell( display, SWT.NONE );
268
    final CCombo ccombo = new CCombo( shell, SWT.NONE );
265
    final CCombo ccombo = new CCombo( shell, SWT.NONE );
Lines 302-310 Link Here
302
299
303
  public void testTextSelectionWithVerifyEvent() {
300
  public void testTextSelectionWithVerifyEvent() {
304
    final java.util.List log = new ArrayList();
301
    final java.util.List log = new ArrayList();
305
    // register preserve-values phase-listener
306
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
307
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
308
    Display display = new Display();
302
    Display display = new Display();
309
    Shell shell = new Shell( display, SWT.NONE );
303
    Shell shell = new Shell( display, SWT.NONE );
310
    final CCombo ccombo = new CCombo( shell, SWT.NONE );
304
    final CCombo ccombo = new CCombo( shell, SWT.NONE );
Lines 429-436 Link Here
429
    } );
423
    } );
430
424
431
    String buttonId = WidgetUtil.getId( button );
425
    String buttonId = WidgetUtil.getId( button );
432
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
433
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
434
426
435
    // Execute life cycle once to simulate startup request
427
    // Execute life cycle once to simulate startup request
436
    Fixture.fakeNewRequest( display );
428
    Fixture.fakeNewRequest( display );
(-)src/org/eclipse/swt/internal/custom/ctabfolderkit/CTabFolderLCA_Test.java (-1 lines)
Lines 359-365 Link Here
359
359
360
    // Let pass one startup request to init the 'system'
360
    // Let pass one startup request to init the 'system'
361
    Fixture.fakeNewRequest( display );
361
    Fixture.fakeNewRequest( display );
362
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
363
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
362
    RWTFactory.getPhaseListenerRegistry().add( new CurrentPhase.Listener() );
364
    Fixture.executeLifeCycleFromServerThread( );
363
    Fixture.executeLifeCycleFromServerThread( );
365
364
(-)src/org/eclipse/swt/internal/dnd/dragsourcekit/DragSourceLCA_Test.java (-3 lines)
Lines 12-19 Link Here
12
import junit.framework.TestCase;
12
import junit.framework.TestCase;
13
13
14
import org.eclipse.rwt.Fixture;
14
import org.eclipse.rwt.Fixture;
15
import org.eclipse.rwt.internal.engine.RWTFactory;
16
import org.eclipse.rwt.internal.lifecycle.PreserveWidgetsPhaseListener;
17
import org.eclipse.rwt.lifecycle.PhaseId;
15
import org.eclipse.rwt.lifecycle.PhaseId;
18
import org.eclipse.swt.SWT;
16
import org.eclipse.swt.SWT;
19
import org.eclipse.swt.dnd.DND;
17
import org.eclipse.swt.dnd.DND;
Lines 25-31 Link Here
25
23
26
  protected void setUp() throws Exception {
24
  protected void setUp() throws Exception {
27
    Fixture.setUp();
25
    Fixture.setUp();
28
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
29
  }
26
  }
30
27
31
  protected void tearDown() throws Exception {
28
  protected void tearDown() throws Exception {
(-)src/org/eclipse/swt/internal/widgets/combokit/ComboLCA_Test.java (-8 lines)
Lines 19-25 Link Here
19
19
20
import org.eclipse.rwt.Fixture;
20
import org.eclipse.rwt.Fixture;
21
import org.eclipse.rwt.graphics.Graphics;
21
import org.eclipse.rwt.graphics.Graphics;
22
import org.eclipse.rwt.internal.engine.RWTFactory;
23
import org.eclipse.rwt.internal.lifecycle.*;
22
import org.eclipse.rwt.internal.lifecycle.*;
24
import org.eclipse.rwt.lifecycle.*;
23
import org.eclipse.rwt.lifecycle.*;
25
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.SWT;
Lines 257-264 Link Here
257
  }
256
  }
258
257
259
  public void testReadText() {
258
  public void testReadText() {
260
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
261
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
262
    Display display = new Display();
259
    Display display = new Display();
263
    Shell shell = new Shell( display, SWT.NONE );
260
    Shell shell = new Shell( display, SWT.NONE );
264
    final Combo combo = new Combo( shell, SWT.BORDER );
261
    final Combo combo = new Combo( shell, SWT.BORDER );
Lines 299-307 Link Here
299
296
300
  public void testTextSelectionWithVerifyEvent() {
297
  public void testTextSelectionWithVerifyEvent() {
301
    final java.util.List log = new ArrayList();
298
    final java.util.List log = new ArrayList();
302
    // register preserve-values phase-listener
303
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
304
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
305
    Display display = new Display();
299
    Display display = new Display();
306
    Shell shell = new Shell( display, SWT.NONE );
300
    Shell shell = new Shell( display, SWT.NONE );
307
    final Combo combo = new Combo( shell, SWT.NONE );
301
    final Combo combo = new Combo( shell, SWT.NONE );
Lines 394-401 Link Here
394
    } );
388
    } );
395
389
396
    String buttonId = WidgetUtil.getId( button );
390
    String buttonId = WidgetUtil.getId( button );
397
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
398
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
399
391
400
    // Execute life cycle once to simulate startup request
392
    // Execute life cycle once to simulate startup request
401
    Fixture.fakeNewRequest( display );
393
    Fixture.fakeNewRequest( display );
(-)src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java (-3 lines)
Lines 15-22 Link Here
15
import junit.framework.TestCase;
15
import junit.framework.TestCase;
16
16
17
import org.eclipse.rwt.Fixture;
17
import org.eclipse.rwt.Fixture;
18
import org.eclipse.rwt.internal.engine.RWTFactory;
19
import org.eclipse.rwt.internal.lifecycle.PreserveWidgetsPhaseListener;
20
import org.eclipse.rwt.lifecycle.PhaseId;
18
import org.eclipse.rwt.lifecycle.PhaseId;
21
import org.eclipse.rwt.lifecycle.WidgetUtil;
19
import org.eclipse.rwt.lifecycle.WidgetUtil;
22
import org.eclipse.swt.SWT;
20
import org.eclipse.swt.SWT;
Lines 63-69 Link Here
63
61
64
  protected void setUp() throws Exception {
62
  protected void setUp() throws Exception {
65
    Fixture.setUp();
63
    Fixture.setUp();
66
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
67
    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
64
    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
68
    display = new Display();
65
    display = new Display();
69
    shell = new Shell( display );
66
    shell = new Shell( display );
(-)src/org/eclipse/swt/internal/widgets/displaykit/DisplayLCAFocus_Test.java (-5 lines)
Lines 14-20 Link Here
14
import junit.framework.TestCase;
14
import junit.framework.TestCase;
15
15
16
import org.eclipse.rwt.Fixture;
16
import org.eclipse.rwt.Fixture;
17
import org.eclipse.rwt.internal.engine.RWTFactory;
18
import org.eclipse.rwt.internal.lifecycle.*;
17
import org.eclipse.rwt.internal.lifecycle.*;
19
import org.eclipse.rwt.lifecycle.WidgetUtil;
18
import org.eclipse.rwt.lifecycle.WidgetUtil;
20
import org.eclipse.swt.SWT;
19
import org.eclipse.swt.SWT;
Lines 39-46 Link Here
39
    shell.layout();
38
    shell.layout();
40
    shell.open();
39
    shell.open();
41
    
40
    
42
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
43
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
44
    String button1Id = WidgetUtil.getId( button1 );
41
    String button1Id = WidgetUtil.getId( button1 );
45
42
46
    // Simulate initial request that constructs UI
43
    // Simulate initial request that constructs UI
Lines 75-82 Link Here
75
    shell.layout();
72
    shell.layout();
76
    shell.open();
73
    shell.open();
77
    
74
    
78
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
79
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
80
    String buttonId = WidgetUtil.getId( button );
75
    String buttonId = WidgetUtil.getId( button );
81
76
82
    // Simulate initial request that constructs UI
77
    // Simulate initial request that constructs UI
(-)src/org/eclipse/swt/internal/widgets/menukit/MenuLCA_Test.java (-8 lines)
Lines 15-23 Link Here
15
import junit.framework.TestCase;
15
import junit.framework.TestCase;
16
16
17
import org.eclipse.rwt.Fixture;
17
import org.eclipse.rwt.Fixture;
18
import org.eclipse.rwt.internal.engine.RWTFactory;
19
import org.eclipse.rwt.internal.lifecycle.PreserveWidgetsPhaseListener;
20
import org.eclipse.rwt.internal.lifecycle.RWTLifeCycle;
21
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
18
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
22
import org.eclipse.rwt.lifecycle.WidgetUtil;
19
import org.eclipse.rwt.lifecycle.WidgetUtil;
23
import org.eclipse.swt.SWT;
20
import org.eclipse.swt.SWT;
Lines 156-165 Link Here
156
    assertTrue( Fixture.getAllMarkup().indexOf( "setSpace" ) == -1 );
153
    assertTrue( Fixture.getAllMarkup().indexOf( "setSpace" ) == -1 );
157
    // Simulate client-side size-change of shell: menuBar must render new size
154
    // Simulate client-side size-change of shell: menuBar must render new size
158
    Fixture.clearPreserved();
155
    Fixture.clearPreserved();
159
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
160
    PreserveWidgetsPhaseListener preserveListener
161
      = new PreserveWidgetsPhaseListener();
162
    lifeCycle.addPhaseListener( preserveListener );
163
    shell.setMenuBar( menuBar );
156
    shell.setMenuBar( menuBar );
164
    String shellId = WidgetUtil.getId( shell );
157
    String shellId = WidgetUtil.getId( shell );
165
    String menuId = WidgetUtil.getId( menuBar );
158
    String menuId = WidgetUtil.getId( menuBar );
Lines 173-179 Link Here
173
    Fixture.executeLifeCycleFromServerThread( );
166
    Fixture.executeLifeCycleFromServerThread( );
174
    String expected = "wm.findWidgetById( \"" + menuId + "\" );w.setSpace";
167
    String expected = "wm.findWidgetById( \"" + menuId + "\" );w.setSpace";
175
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
168
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
176
    lifeCycle.removePhaseListener( preserveListener );
177
  }
169
  }
178
170
179
  private void testPreserveMenuListener( final Menu menu ) {
171
  private void testPreserveMenuListener( final Menu menu ) {
(-)src/org/eclipse/swt/internal/widgets/shellkit/ShellLCA_Test.java (-7 / +5 lines)
Lines 11-23 Link Here
11
 ******************************************************************************/
11
 ******************************************************************************/
12
package org.eclipse.swt.internal.widgets.shellkit;
12
package org.eclipse.swt.internal.widgets.shellkit;
13
13
14
import java.io.IOException;
15
14
import junit.framework.TestCase;
16
import junit.framework.TestCase;
15
17
16
import org.eclipse.rwt.Fixture;
18
import org.eclipse.rwt.Fixture;
17
import org.eclipse.rwt.graphics.Graphics;
19
import org.eclipse.rwt.graphics.Graphics;
18
import org.eclipse.rwt.internal.engine.RWTFactory;
19
import org.eclipse.rwt.internal.lifecycle.JSConst;
20
import org.eclipse.rwt.internal.lifecycle.JSConst;
20
import org.eclipse.rwt.internal.lifecycle.PreserveWidgetsPhaseListener;
21
import org.eclipse.rwt.lifecycle.*;
21
import org.eclipse.rwt.lifecycle.*;
22
import org.eclipse.swt.SWT;
22
import org.eclipse.swt.SWT;
23
import org.eclipse.swt.events.*;
23
import org.eclipse.swt.events.*;
Lines 25-30 Link Here
25
import org.eclipse.swt.internal.events.*;
25
import org.eclipse.swt.internal.events.*;
26
import org.eclipse.swt.internal.graphics.ImageFactory;
26
import org.eclipse.swt.internal.graphics.ImageFactory;
27
import org.eclipse.swt.internal.widgets.*;
27
import org.eclipse.swt.internal.widgets.*;
28
import org.eclipse.swt.internal.widgets.displaykit.DisplayLCA;
28
import org.eclipse.swt.widgets.*;
29
import org.eclipse.swt.widgets.*;
29
30
30
31
Lines 287-293 Link Here
287
    activeShell.open();
288
    activeShell.open();
288
    String shellToActivateId = WidgetUtil.getId( shellToActivate );
289
    String shellToActivateId = WidgetUtil.getId( shellToActivate );
289
    // Set precondition and assert it
290
    // Set precondition and assert it
290
    RWTFactory.getPhaseListenerRegistry().add( new PreserveWidgetsPhaseListener() );
291
    activeShell.setActive();
291
    activeShell.setActive();
292
    assertSame( activeShell, display.getActiveShell() );
292
    assertSame( activeShell, display.getActiveShell() );
293
    // Simulate shell activation without event listeners
293
    // Simulate shell activation without event listeners
Lines 447-463 Link Here
447
  }
447
  }
448
448
449
  // see bug 223879
449
  // see bug 223879
450
  public void testRenderPopupMenu() {
450
  public void testRenderPopupMenu() throws IOException {
451
    Fixture.markInitialized( display );
451
    Fixture.markInitialized( display );
452
    Shell shell = new Shell( display , SWT.NONE );
452
    Shell shell = new Shell( display , SWT.NONE );
453
    shell.setMinimumSize( 100, 100 );
453
    shell.setMinimumSize( 100, 100 );
454
    Menu menu = new Menu( shell, SWT.POP_UP );
454
    Menu menu = new Menu( shell, SWT.POP_UP );
455
    MenuItem item = new MenuItem( menu, SWT.PUSH );
456
    item.setText( "Popup" );
457
    shell.setMenu( menu );
455
    shell.setMenu( menu );
458
    Fixture.fakeResponseWriter();
456
    Fixture.fakeResponseWriter();
459
    Fixture.fakeNewRequest( display );
457
    Fixture.fakeNewRequest( display );
460
    Fixture.executeLifeCycleFromServerThread();
458
    new DisplayLCA().render( display );
461
    String markup = Fixture.getAllMarkup();
459
    String markup = Fixture.getAllMarkup();
462
    String createMenuScript
460
    String createMenuScript
463
      = "var w = new org.eclipse.rwt.widgets.Menu();"
461
      = "var w = new org.eclipse.rwt.widgets.Menu();"
(-)src/org/eclipse/swt/internal/widgets/tabfolderkit/TabFolderLCA_Test.java (-8 / +1 lines)
Lines 17-23 Link Here
17
17
18
import org.eclipse.rwt.Fixture;
18
import org.eclipse.rwt.Fixture;
19
import org.eclipse.rwt.graphics.Graphics;
19
import org.eclipse.rwt.graphics.Graphics;
20
import org.eclipse.rwt.internal.engine.RWTFactory;
21
import org.eclipse.rwt.internal.lifecycle.*;
20
import org.eclipse.rwt.internal.lifecycle.*;
22
import org.eclipse.rwt.internal.service.RequestParams;
21
import org.eclipse.rwt.internal.service.RequestParams;
23
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
22
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
Lines 165-178 Link Here
165
    item1.setControl( control1 );
164
    item1.setControl( control1 );
166
    shell.open();
165
    shell.open();
167
166
168
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
169
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
170
    String displayId = DisplayUtil.getAdapter( display ).getId();
171
    String folderId = WidgetUtil.getId( folder );
167
    String folderId = WidgetUtil.getId( folder );
172
    String item1Id = WidgetUtil.getId( item1 );
168
    String item1Id = WidgetUtil.getId( item1 );
173
169
174
    Fixture.fakeNewRequest();
170
    Fixture.fakeNewRequest( display );
175
    Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
176
    Fixture.fakeRequestParam( JSConst.EVENT_WIDGET_SELECTED, folderId );
171
    Fixture.fakeRequestParam( JSConst.EVENT_WIDGET_SELECTED, folderId );
177
    Fixture.fakeRequestParam( JSConst.EVENT_WIDGET_SELECTED_ITEM, item1Id );
172
    Fixture.fakeRequestParam( JSConst.EVENT_WIDGET_SELECTED_ITEM, item1Id );
178
    Fixture.readDataAndProcessAction( display );
173
    Fixture.readDataAndProcessAction( display );
Lines 203-210 Link Here
203
      }
198
      }
204
    } );
199
    } );
205
200
206
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
207
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
208
    String displayId = DisplayUtil.getAdapter( display ).getId();
201
    String displayId = DisplayUtil.getAdapter( display ).getId();
209
    String item1Id = WidgetUtil.getId( item1 );
202
    String item1Id = WidgetUtil.getId( item1 );
210
    String folderId = WidgetUtil.getId( folder );
203
    String folderId = WidgetUtil.getId( folder );
(-)src/org/eclipse/swt/internal/widgets/tablecolumnkit/TableColumnLCA_Test.java (-5 lines)
Lines 16-24 Link Here
16
16
17
import org.eclipse.rwt.Fixture;
17
import org.eclipse.rwt.Fixture;
18
import org.eclipse.rwt.graphics.Graphics;
18
import org.eclipse.rwt.graphics.Graphics;
19
import org.eclipse.rwt.internal.engine.RWTFactory;
20
import org.eclipse.rwt.internal.lifecycle.PreserveWidgetsPhaseListener;
21
import org.eclipse.rwt.internal.lifecycle.RWTLifeCycle;
22
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
19
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
23
import org.eclipse.rwt.lifecycle.WidgetUtil;
20
import org.eclipse.rwt.lifecycle.WidgetUtil;
24
import org.eclipse.swt.SWT;
21
import org.eclipse.swt.SWT;
Lines 157-164 Link Here
157
      }
154
      }
158
    } );
155
    } );
159
    String columnId = WidgetUtil.getId( column );
156
    String columnId = WidgetUtil.getId( column );
160
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
161
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
162
    //
157
    //
163
    Fixture.fakeNewRequest( display );
158
    Fixture.fakeNewRequest( display );
164
    Fixture.executeLifeCycleFromServerThread( );
159
    Fixture.executeLifeCycleFromServerThread( );
(-)src/org/eclipse/swt/internal/widgets/tablekit/TableLCA_Test.java (-1 lines)
Lines 502-508 Link Here
502
  public void testClearVirtual() {
502
  public void testClearVirtual() {
503
    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
503
    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
504
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
504
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
505
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
506
    shell.setSize( 100, 100 );
505
    shell.setSize( 100, 100 );
507
    shell.setLayout( new FillLayout() );
506
    shell.setLayout( new FillLayout() );
508
    final Table table = new Table( shell, SWT.VIRTUAL );
507
    final Table table = new Table( shell, SWT.VIRTUAL );
(-)src/org/eclipse/swt/internal/widgets/textkit/TextLCA_Test.java (-40 / +33 lines)
Lines 18-25 Link Here
18
import junit.framework.TestCase;
18
import junit.framework.TestCase;
19
19
20
import org.eclipse.rwt.Fixture;
20
import org.eclipse.rwt.Fixture;
21
import org.eclipse.rwt.internal.engine.RWTFactory;
21
import org.eclipse.rwt.internal.lifecycle.JSConst;
22
import org.eclipse.rwt.internal.lifecycle.*;
23
import org.eclipse.rwt.lifecycle.*;
22
import org.eclipse.rwt.lifecycle.*;
24
import org.eclipse.swt.SWT;
23
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.events.*;
24
import org.eclipse.swt.events.*;
Lines 32-42 Link Here
32
  
31
  
33
  private Display display;
32
  private Display display;
34
  private Shell shell;
33
  private Shell shell;
34
  private TextLCA textLCA;
35
35
36
  protected void setUp() throws Exception {
36
  protected void setUp() throws Exception {
37
    Fixture.setUp();
37
    Fixture.setUp();
38
    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
38
    Fixture.fakePhase( PhaseId.PROCESS_ACTION );
39
    Fixture.fakeResponseWriter();
39
    Fixture.fakeResponseWriter();
40
    textLCA = new TextLCA();
40
    display = new Display();
41
    display = new Display();
41
    shell = new Shell( display );
42
    shell = new Shell( display );
42
  }
43
  }
Lines 96-102 Link Here
96
    Fixture.markInitialized( text );
97
    Fixture.markInitialized( text );
97
    Fixture.clearPreserved();
98
    Fixture.clearPreserved();
98
    Fixture.preserveWidgets();
99
    Fixture.preserveWidgets();
99
    TextLCA textLCA = new TextLCA();
100
    text.setText( "hello" );
100
    text.setText( "hello" );
101
    textLCA.renderChanges( text );
101
    textLCA.renderChanges( text );
102
    assertTrue( Fixture.getAllMarkup().endsWith( "setValue( \"hello\" );" ) );
102
    assertTrue( Fixture.getAllMarkup().endsWith( "setValue( \"hello\" );" ) );
Lines 114-120 Link Here
114
    Fixture.markInitialized( text );
114
    Fixture.markInitialized( text );
115
    Fixture.clearPreserved();
115
    Fixture.clearPreserved();
116
    Fixture.preserveWidgets();
116
    Fixture.preserveWidgets();
117
    TextLCA textLCA = new TextLCA();
118
    char[] value = new char[] { 'h', 'e', 'l', 0, 'l', 'o' };
117
    char[] value = new char[] { 'h', 'e', 'l', 0, 'l', 'o' };
119
    text.setText( String.valueOf( value ) );
118
    text.setText( String.valueOf( value ) );
120
    textLCA.renderChanges( text );
119
    textLCA.renderChanges( text );
Lines 163-170 Link Here
163
  public void testSelectionWithVerifyEvent() {
162
  public void testSelectionWithVerifyEvent() {
164
    final java.util.List log = new ArrayList();
163
    final java.util.List log = new ArrayList();
165
    // register preserve-values phase-listener
164
    // register preserve-values phase-listener
166
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
167
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
168
    final Text text = new Text( shell, SWT.NONE );
165
    final Text text = new Text( shell, SWT.NONE );
169
    shell.open();
166
    shell.open();
170
    String textId = WidgetUtil.getId( text );
167
    String textId = WidgetUtil.getId( text );
Lines 240-247 Link Here
240
  }
237
  }
241
238
242
  public void testPreserveText() {
239
  public void testPreserveText() {
243
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
244
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
245
    Text text = new Text( shell, SWT.SINGLE );
240
    Text text = new Text( shell, SWT.SINGLE );
246
    shell.open();
241
    shell.open();
247
    Fixture.markInitialized( display );
242
    Fixture.markInitialized( display );
Lines 262-270 Link Here
262
257
263
  public void testVerifyAndModifyEvent() {
258
  public void testVerifyAndModifyEvent() {
264
    final java.util.List log = new ArrayList();
259
    final java.util.List log = new ArrayList();
265
    // register preserve-values phase-listener
266
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
267
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
268
    // set up widgets to be tested
260
    // set up widgets to be tested
269
    final Text text = new Text( shell, SWT.NONE );
261
    final Text text = new Text( shell, SWT.NONE );
270
    shell.open();
262
    shell.open();
Lines 294-305 Link Here
294
286
295
  public void testTextLimit() throws IOException {
287
  public void testTextLimit() throws IOException {
296
    Text text = new Text( shell, SWT.NONE );
288
    Text text = new Text( shell, SWT.NONE );
297
    TextLCA lca = new TextLCA();
298
    // run LCA one to dump the here uninteresting prolog
289
    // run LCA one to dump the here uninteresting prolog
299
    lca.renderChanges( text );
290
    textLCA.renderChanges( text );
300
    // Initially no textLimit must be rendered if the initial value is untouched
291
    // Initially no textLimit must be rendered if the initial value is untouched
301
    Fixture.fakeResponseWriter();
292
    Fixture.fakeResponseWriter();
302
    lca.renderChanges( text );
293
    textLCA.renderChanges( text );
303
    assertEquals( -1, Fixture.getAllMarkup().indexOf( "setMaxLength" ) );
294
    assertEquals( -1, Fixture.getAllMarkup().indexOf( "setMaxLength" ) );
304
    // Positive textLimit is written as setMaxLength( ... )
295
    // Positive textLimit is written as setMaxLength( ... )
305
    Fixture.fakeResponseWriter();
296
    Fixture.fakeResponseWriter();
Lines 307-313 Link Here
307
    Fixture.clearPreserved();
298
    Fixture.clearPreserved();
308
    Fixture.preserveWidgets();
299
    Fixture.preserveWidgets();
309
    text.setTextLimit( 12 );
300
    text.setTextLimit( 12 );
310
    lca.renderChanges( text );
301
    textLCA.renderChanges( text );
311
    String expected = "setMaxLength( 12 );";
302
    String expected = "setMaxLength( 12 );";
312
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
303
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
313
    // Negative textLimit is tread as 'no limit'
304
    // Negative textLimit is tread as 'no limit'
Lines 316-371 Link Here
316
    Fixture.clearPreserved();
307
    Fixture.clearPreserved();
317
    Fixture.preserveWidgets();
308
    Fixture.preserveWidgets();
318
    text.setTextLimit( -50 );
309
    text.setTextLimit( -50 );
319
    lca.renderChanges( text );
310
    textLCA.renderChanges( text );
320
    expected = "setMaxLength( null );";
311
    expected = "setMaxLength( null );";
321
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
312
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
322
  }
313
  }
323
  
314
  
324
  public void testEchoCharMultiLine() {
315
  public void testEchoCharMultiLine() throws IOException {
325
    Fixture.fakeNewRequest( display );
316
    Fixture.fakeNewRequest( display );
326
    Text text = new Text( shell, SWT.MULTI );
317
    Text text = new Text( shell, SWT.MULTI );
327
    Fixture.executeLifeCycleFromServerThread();
318
    textLCA.render( text );
328
    String markup = Fixture.getAllMarkup();
319
    String markup = Fixture.getAllMarkup();
329
    assertTrue( markup.indexOf( "setPasswordMode" ) == -1 );
320
    assertTrue( markup.indexOf( "setPasswordMode" ) == -1 );
321
    
322
    Fixture.preserveWidgets();
330
    text.setEchoChar( ( char )27 );
323
    text.setEchoChar( ( char )27 );
331
    Fixture.executeLifeCycleFromServerThread();
324
    textLCA.render( text );
332
    assertTrue( markup.indexOf( "setPasswordMode" ) == -1 );
325
    assertTrue( markup.indexOf( "setPasswordMode" ) == -1 );
333
  }
326
  }
334
327
335
  public void testEchoCharSingleLine() {
328
  public void testEchoCharSingleLine() throws IOException {
336
    Text text = new Text( shell, SWT.SINGLE );
329
    Text text = new Text( shell, SWT.SINGLE );
337
    Fixture.markInitialized( display );
330
    textLCA.render( text );
338
    Fixture.fakeNewRequest( display );
339
    Fixture.executeLifeCycleFromServerThread();
340
    String markup = Fixture.getAllMarkup();
331
    String markup = Fixture.getAllMarkup();
341
    assertTrue( markup.indexOf( "setPasswordMode" ) == -1 );
332
    assertTrue( markup.indexOf( "setPasswordMode" ) == -1 );
333
334
    Fixture.preserveWidgets();
342
    text.setEchoChar( ( char )27 );
335
    text.setEchoChar( ( char )27 );
343
    Fixture.fakeNewRequest( display );
336
    textLCA.render( text );
344
    Fixture.executeLifeCycleFromServerThread();
345
    markup = Fixture.getAllMarkup();
337
    markup = Fixture.getAllMarkup();
346
    assertTrue( markup.indexOf( "setPasswordMode( true )" ) != -1 );
338
    assertTrue( markup.indexOf( "setPasswordMode( true )" ) != -1 );
339
    
340
    Fixture.preserveWidgets();
347
    text.setEchoChar( ( char )0 );
341
    text.setEchoChar( ( char )0 );
348
    Fixture.fakeNewRequest( display );
342
    textLCA.render( text );
349
    Fixture.executeLifeCycleFromServerThread();
350
    markup = Fixture.getAllMarkup();
343
    markup = Fixture.getAllMarkup();
351
    assertTrue( markup.indexOf( "setPasswordMode( false )" ) != -1 );
344
    assertTrue( markup.indexOf( "setPasswordMode( false )" ) != -1 );
352
  }
345
  }
353
  
346
  
354
  public void testEchoCharPassword() {
347
  public void testEchoCharPassword() throws IOException {
355
    Text text = new Text( shell, SWT.PASSWORD );
348
    Text text = new Text( shell, SWT.PASSWORD );
356
    Fixture.markInitialized( display );
349
    textLCA.render( text );
357
    Fixture.fakeNewRequest( display );
358
    Fixture.executeLifeCycleFromServerThread();
359
    String markup = Fixture.getAllMarkup();
350
    String markup = Fixture.getAllMarkup();
360
    assertTrue( markup.indexOf( "setPasswordMode( true )" ) != -1 );
351
    assertTrue( markup.indexOf( "setPasswordMode( true )" ) != -1 );
352
353
    Fixture.preserveWidgets();
361
    text.setEchoChar( ( char )0 );
354
    text.setEchoChar( ( char )0 );
362
    Fixture.fakeNewRequest( display );
355
    textLCA.render( text );
363
    Fixture.executeLifeCycleFromServerThread();
364
    markup = Fixture.getAllMarkup();
356
    markup = Fixture.getAllMarkup();
365
    assertTrue( markup.indexOf( "setPasswordMode( false )" ) != -1 );
357
    assertTrue( markup.indexOf( "setPasswordMode( false )" ) != -1 );
358
359
    Fixture.preserveWidgets();
366
    text.setEchoChar( ( char )27 );
360
    text.setEchoChar( ( char )27 );
367
    Fixture.fakeNewRequest( display );
361
    textLCA.render( text );
368
    Fixture.executeLifeCycleFromServerThread();
369
    markup = Fixture.getAllMarkup();
362
    markup = Fixture.getAllMarkup();
370
    assertTrue( markup.indexOf( "setPasswordMode( true )" ) != -1 );
363
    assertTrue( markup.indexOf( "setPasswordMode( true )" ) != -1 );
371
  }
364
  }
Lines 493-499 Link Here
493
      = "org.eclipse.swt.TextUtil.setHasVerifyOrModifyListener( w, true )";
486
      = "org.eclipse.swt.TextUtil.setHasVerifyOrModifyListener( w, true )";
494
    Text text = new Text( shell, SWT.READ_ONLY );
487
    Text text = new Text( shell, SWT.READ_ONLY );
495
    text.addModifyListener( createModifyListener() );
488
    text.addModifyListener( createModifyListener() );
496
    new TextLCA().renderChanges( text );
489
    textLCA.renderChanges( text );
497
    assertTrue( Fixture.getAllMarkup().indexOf( setHasModifyListener ) != -1 );
490
    assertTrue( Fixture.getAllMarkup().indexOf( setHasModifyListener ) != -1 );
498
  }
491
  }
499
  
492
  
Lines 506-512 Link Here
506
    Fixture.markInitialized( text );
499
    Fixture.markInitialized( text );
507
    Fixture.preserveWidgets();
500
    Fixture.preserveWidgets();
508
    text.setEditable( true );
501
    text.setEditable( true );
509
    new TextLCA().renderChanges( text );
502
    textLCA.renderChanges( text );
510
    assertTrue( Fixture.getAllMarkup().indexOf( setHasModifyListener ) != -1 );
503
    assertTrue( Fixture.getAllMarkup().indexOf( setHasModifyListener ) != -1 );
511
  }
504
  }
512
505
Lines 515-521 Link Here
515
    Fixture.markInitialized( text );
508
    Fixture.markInitialized( text );
516
    Fixture.preserveWidgets();
509
    Fixture.preserveWidgets();
517
    text.setText( "abc\u2028abc\u2029abc" );
510
    text.setText( "abc\u2028abc\u2029abc" );
518
    new TextLCA().renderChanges( text );
511
    textLCA.renderChanges( text );
519
    String expected = "w.setValue( \"abcabcabc\" );";
512
    String expected = "w.setValue( \"abcabcabc\" );";
520
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
513
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
521
  }
514
  }
Lines 525-531 Link Here
525
    Fixture.markInitialized( text );
518
    Fixture.markInitialized( text );
526
    Fixture.preserveWidgets();
519
    Fixture.preserveWidgets();
527
    text.setText( "abc\u2028abc\u2029abc" );
520
    text.setText( "abc\u2028abc\u2029abc" );
528
    new TextLCA().renderChanges( text );
521
    textLCA.renderChanges( text );
529
    String expected = "w.setValue( \"abcabcabc\" );";
522
    String expected = "w.setValue( \"abcabcabc\" );";
530
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
523
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
531
  }
524
  }
Lines 535-541 Link Here
535
    Fixture.markInitialized( text );
528
    Fixture.markInitialized( text );
536
    Fixture.preserveWidgets();
529
    Fixture.preserveWidgets();
537
    text.setText( "abc\u2028abc\u2029abc" );
530
    text.setText( "abc\u2028abc\u2029abc" );
538
    new TextLCA().renderChanges( text );
531
    textLCA.renderChanges( text );
539
    String expected = "w.setValue( \"abcabcabc\" );";
532
    String expected = "w.setValue( \"abcabcabc\" );";
540
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
533
    assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
541
  }
534
  }
(-)src/org/eclipse/swt/internal/widgets/treecolumnkit/TreeColumnLCA_Test.java (-5 lines)
Lines 17-25 Link Here
17
17
18
import org.eclipse.rwt.Fixture;
18
import org.eclipse.rwt.Fixture;
19
import org.eclipse.rwt.graphics.Graphics;
19
import org.eclipse.rwt.graphics.Graphics;
20
import org.eclipse.rwt.internal.engine.RWTFactory;
21
import org.eclipse.rwt.internal.lifecycle.PreserveWidgetsPhaseListener;
22
import org.eclipse.rwt.internal.lifecycle.RWTLifeCycle;
23
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
20
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
24
import org.eclipse.rwt.lifecycle.WidgetUtil;
21
import org.eclipse.rwt.lifecycle.WidgetUtil;
25
import org.eclipse.swt.SWT;
22
import org.eclipse.swt.SWT;
Lines 155-162 Link Here
155
      }
152
      }
156
    } );
153
    } );
157
    String columnId = WidgetUtil.getId( column );
154
    String columnId = WidgetUtil.getId( column );
158
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
159
    lifeCycle.addPhaseListener( new PreserveWidgetsPhaseListener() );
160
    //
155
    //
161
    Fixture.fakeNewRequest( display );
156
    Fixture.fakeNewRequest( display );
162
    Fixture.executeLifeCycleFromServerThread();
157
    Fixture.executeLifeCycleFromServerThread();
(-)src/org/eclipse/rwt/internal/engine/PhaseListenerRegistry_Test.java (-1 lines)
Lines 51-57 Link Here
51
    Fixture.createServiceContext();
51
    Fixture.createServiceContext();
52
    
52
    
53
    assertEquals( true, findPhaseListener( CurrentPhase.Listener.class ) );
53
    assertEquals( true, findPhaseListener( CurrentPhase.Listener.class ) );
54
    assertEquals( true, findPhaseListener( PreserveWidgetsPhaseListener.class ) );
55
  }
54
  }
56
  
55
  
57
  public void testAdd() {
56
  public void testAdd() {
(-)src/org/eclipse/swt/internal/widgets/displaykit/DisplayLCAFacadeImpl.java (+2 lines)
Lines 35-40 Link Here
35
        JavaScriptResponseWriter responseWriter = stateInfo.getResponseWriter();
35
        JavaScriptResponseWriter responseWriter = stateInfo.getResponseWriter();
36
        responseWriter.write( "Render Fake" );
36
        responseWriter.write( "Render Fake" );
37
      }
37
      }
38
      public void clearPreserved( Display display ) {
39
      }
38
    };
40
    };
39
  }
41
  }
40
42
(-)src/org/eclipse/rwt/Fixture.java (-8 / +12 lines)
Lines 260-276 Link Here
260
  }
260
  }
261
261
262
  public static void preserveWidgets() {
262
  public static void preserveWidgets() {
263
    PreserveWidgetsPhaseListener listener = new PreserveWidgetsPhaseListener();
263
    Display display = RWTLifeCycle.getSessionDisplay();
264
    RWTLifeCycle lifeCycle = ( RWTLifeCycle )RWTFactory.getLifeCycleFactory().getLifeCycle();
264
    IDisplayLifeCycleAdapter displayLCA = DisplayUtil.getLCA( display );
265
    PhaseEvent event = new PhaseEvent( lifeCycle, PhaseId.READ_DATA );
265
    PhaseId bufferedPhaseId = CurrentPhase.get();
266
    listener.afterPhase( event );
266
    fakePhase( PhaseId.READ_DATA );
267
    displayLCA.preserveValues( display );
268
    fakePhase( bufferedPhaseId );
267
  }
269
  }
268
270
269
  public static void clearPreserved() {
271
  public static void clearPreserved() {
270
    PreserveWidgetsPhaseListener listener = new PreserveWidgetsPhaseListener();
272
    Display display = RWTLifeCycle.getSessionDisplay();
271
    ILifeCycle lifeCycle = RWTFactory.getLifeCycleFactory().getLifeCycle();
273
    IDisplayLifeCycleAdapter displayLCA = DisplayUtil.getLCA( display );
272
    PhaseEvent event = new PhaseEvent( lifeCycle, PhaseId.RENDER );
274
    PhaseId bufferedPhaseId = CurrentPhase.get();
273
    listener.afterPhase( event );
275
    fakePhase( PhaseId.RENDER );
276
    displayLCA.clearPreserved( display );
277
    fakePhase( bufferedPhaseId );
274
  }
278
  }
275
  
279
  
276
  public static String getAllMarkup() {
280
  public static String getAllMarkup() {
(-)plugin.xml (-6 lines)
Lines 2394-2405 Link Here
2394
  </extension>
2394
  </extension>
2395
2395
2396
  <extension
2396
  <extension
2397
        id="org.eclipse.ui.workbench.preserveWidgetValues"
2398
        point="org.eclipse.rap.ui.phaselistener">
2399
     <listener class="org.eclipse.rwt.internal.lifecycle.PreserveWidgetsPhaseListener"/>
2400
  </extension>
2401
2402
  <extension
2403
        id="org.eclipse.ui.workbench.currentPhase"
2397
        id="org.eclipse.ui.workbench.currentPhase"
2404
        point="org.eclipse.rap.ui.phaselistener">
2398
        point="org.eclipse.rap.ui.phaselistener">
2405
     <listener class="org.eclipse.rwt.internal.lifecycle.CurrentPhase$Listener"/>
2399
     <listener class="org.eclipse.rwt.internal.lifecycle.CurrentPhase$Listener"/>

Return to bug 341760