/*******************************************************************************
* Copyright (c) 2002, 2008 Innoopract Informationssysteme GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract Informationssysteme GmbH - initial API and implementation
******************************************************************************/
package org.eclipse.swt.internal.widgets.menukit;
import java.io.IOException;
import junit.framework.TestCase;
import org.eclipse.rwt.Fixture;
import org.eclipse.rwt.internal.lifecycle.*;
import org.eclipse.rwt.internal.service.RequestParams;
import org.eclipse.rwt.lifecycle.IWidgetAdapter;
import org.eclipse.rwt.lifecycle.WidgetUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.internal.widgets.Props;
import org.eclipse.swt.widgets.*;
public class MenuLCA_Test extends TestCase {
protected void setUp() throws Exception {
Fixture.setUp();
Fixture.fakeResponseWriter();
}
protected void tearDown() throws Exception {
Fixture.tearDown();
}
public void testDropDownPreserveValues() {
Display display = new Display();
Shell shell = new Shell( display );
shell.setText( "shell" );
Menu menuBar = new Menu( shell, SWT.BAR );
MenuItem item = new MenuItem( menuBar, SWT.CASCADE );
Menu menu = new Menu( shell, SWT.DROP_DOWN );
item.setMenu( menu );
shell.setMenuBar( menuBar );
Fixture.markInitialized( display );
//menubar
Fixture.preserveWidgets();
IWidgetAdapter adapter = WidgetUtil.getAdapter( menuBar );
assertSame( shell, adapter.getPreserved( MenuBarLCA.PROP_SHELL ) );
assertEquals( Boolean.TRUE, adapter.getPreserved( Props.ENABLED ) );
Boolean hasMenuListener
= ( Boolean )adapter.getPreserved( MenuLCAUtil.PROP_MENU_LISTENER );
assertEquals( Boolean.FALSE, hasMenuListener );
Fixture.clearPreserved();
menuBar.setEnabled( false );
menuBar.addMenuListener( new MenuListener() {
public void menuHidden( final MenuEvent e ) {
}
public void menuShown( final MenuEvent e ) {
}
} );
Fixture.preserveWidgets();
adapter = WidgetUtil.getAdapter( menuBar );
assertEquals( Boolean.FALSE, adapter.getPreserved( Props.ENABLED ) );
hasMenuListener
= ( Boolean )adapter.getPreserved( MenuLCAUtil.PROP_MENU_LISTENER );
assertEquals( Boolean.TRUE, hasMenuListener );
Fixture.clearPreserved();
testPreserveMenuListener( menu );
testPreserveWidth( menu );
testPreserveEnabled( menu );
display.dispose();
}
public void testPopUpPreserveValues() {
Display display = new Display();
Shell shell = new Shell( display );
shell.setText( "shell" );
Menu menu = new Menu( shell, SWT.POP_UP );
Fixture.markInitialized( display );
testPreserveMenuListener( menu );
testPreserveWidth( menu );
testPreserveEnabled( menu );
display.dispose();
}
public void testUnassignedMenuBar() throws IOException {
Display display = new Display();
Shell shell = new Shell( display, SWT.NONE );
String shellId = WidgetUtil.getId( shell );
Menu menuBar = new Menu( shell, SWT.BAR );
// Ensure that a menuBar that is not assigned to any shell (via setMenuBar)
// is rendered but without settings its parent
Fixture.fakeResponseWriter();
MenuLCA lca = new MenuLCA();
Fixture.markInitialized( display );
lca.renderInitialization( menuBar );
lca.renderChanges( menuBar );
assertTrue( Fixture.getAllMarkup().indexOf( "setParent" ) == -1 );
// The contrary: an assigned menuBar has to be rendered with setParent
Fixture.fakeResponseWriter();
shell.setMenuBar( menuBar );
lca.renderInitialization( menuBar );
lca.renderChanges( menuBar );
String expected = "setParent( wm.findWidgetById( \"" + shellId + "\" ) )";
assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
// Un-assigning a menuBar must result in setParent( null ) being rendered
Fixture.fakeResponseWriter();
Fixture.markInitialized( menuBar );
Fixture.clearPreserved();
Fixture.preserveWidgets();
shell.setMenuBar( null );
lca.renderInitialization( menuBar );
lca.renderChanges( menuBar );
expected = "setParent( null )";
assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
}
public void testWriteBoundsForMenuBar() throws IOException {
Display display = new Display();
Shell shell = new Shell( display, SWT.NONE );
Menu menuBar = new Menu( shell, SWT.BAR );
MenuLCA menuLCA = new MenuLCA();
// initial unassigned rendering -> no setSpace
Fixture.fakeResponseWriter();
menuLCA.renderChanges( menuBar );
assertTrue( Fixture.getAllMarkup().indexOf( "setSpace" ) == -1 );
// initial assigned rendering -> no setSpace
Fixture.fakeResponseWriter();
shell.setMenuBar( menuBar );
menuLCA.renderChanges( menuBar );
assertTrue( Fixture.getAllMarkup().indexOf( "setSpace" ) != -1 );
//
Fixture.markInitialized( shell );
Fixture.markInitialized( menuBar );
// changing bounds of shell -> an assigned menuBar must adjust its size
Fixture.fakeResponseWriter();
Fixture.clearPreserved();
Fixture.preserveWidgets();
shell.setBounds( new Rectangle( 1, 2, 3, 4 ) );
menuLCA.renderChanges( menuBar );
assertTrue( Fixture.getAllMarkup().indexOf( "setSpace" ) != -1 );
// changing bounds of shell -> an unassigned menuBar does nothing
Fixture.fakeResponseWriter();
shell.setMenuBar( null );
Fixture.clearPreserved();
Fixture.preserveWidgets();
shell.setBounds( new Rectangle( 5, 6, 7, 8 ) );
menuLCA.renderChanges( menuBar );
assertTrue( Fixture.getAllMarkup().indexOf( "setSpace" ) == -1 );
// Simulate client-side size-change of shell: menuBar must render new size
Fixture.clearPreserved();
RWTLifeCycle lifeCycle = ( RWTLifeCycle )LifeCycleFactory.getLifeCycle();
PreserveWidgetsPhaseListener preserveListener
= new PreserveWidgetsPhaseListener();
lifeCycle.addPhaseListener( preserveListener );
shell.setMenuBar( menuBar );
String displayId = DisplayUtil.getId( display );
String shellId = WidgetUtil.getId( shell );
String menuId = WidgetUtil.getId( menuBar );
Fixture.fakeNewRequest();
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.executeLifeCycleFromServerThread( );
Fixture.fakeNewRequest();
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( shellId + ".bounds.x", "0" );
Fixture.fakeRequestParam( shellId + ".bounds.y", "0" );
Fixture.fakeRequestParam( shellId + ".bounds.width", "1234" );
Fixture.fakeRequestParam( shellId + ".bounds.height", "4321" );
Fixture.executeLifeCycleFromServerThread( );
String expected = "wm.findWidgetById( \"" + menuId + "\" );w.setSpace";
assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
lifeCycle.removePhaseListener( preserveListener );
}
private void testPreserveMenuListener( final Menu menu ) {
IWidgetAdapter adapter = WidgetUtil.getAdapter( menu );
Fixture.preserveWidgets();
assertEquals( Boolean.FALSE,
adapter.getPreserved( MenuLCAUtil.PROP_MENU_LISTENER ) );
Fixture.clearPreserved();
menu.addMenuListener( new MenuAdapter() {} );
Fixture.preserveWidgets();
assertEquals( Boolean.TRUE,
adapter.getPreserved( MenuLCAUtil.PROP_MENU_LISTENER ) );
Fixture.clearPreserved();
}
private void testPreserveWidth( final Menu menu ) {
IWidgetAdapter adapter = WidgetUtil.getAdapter( menu );
Fixture.preserveWidgets();
assertEquals( new Integer( MenuLCAUtil.computeWidth( menu ) ),
adapter.getPreserved( MenuLCAUtil.PROP_WIDTH ) );
Fixture.clearPreserved();
}
private void testPreserveEnabled( final Menu menu ) {
IWidgetAdapter adapter = WidgetUtil.getAdapter( menu );
Fixture.preserveWidgets();
assertEquals( Boolean.TRUE, adapter.getPreserved( Props.ENABLED ) );
Fixture.clearPreserved();
menu.setEnabled( false );
Fixture.preserveWidgets();
assertEquals( Boolean.FALSE, adapter.getPreserved( Props.ENABLED ) );
Fixture.clearPreserved();
}
}