/******************************************************************************* * Copyright (c) 2002, 2010 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 * EclipseSource - ongoing development ******************************************************************************/ package org.eclipse.swt.widgets; import java.util.ArrayList; import java.util.Arrays; import junit.framework.TestCase; import org.eclipse.rwt.Fixture; import org.eclipse.rwt.lifecycle.PhaseId; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Point; public class CoolBar_Test extends TestCase { public void testHierarchy() { Display display = new Display(); Shell shell = new Shell( display, SWT.NONE ); CoolBar bar = new CoolBar( shell, SWT.NONE ); assertTrue( Composite.class.isAssignableFrom( bar.getClass() ) ); assertSame( shell, bar.getParent() ); assertSame( display, bar.getDisplay() ); CoolItem item = new CoolItem( bar, SWT.NONE ); assertEquals( 1, bar.getItemCount() ); assertSame( display, item.getDisplay() ); assertSame( bar, item.getParent() ); } public void testItems() { Display display = new Display(); Shell shell = new Shell( display, SWT.NONE ); CoolBar bar = new CoolBar( shell, SWT.NONE ); assertEquals( 0, bar.getItemCount() ); assertTrue( Arrays.equals( new CoolItem[ 0 ], bar.getItems() ) ); CoolItem item = new CoolItem( bar, SWT.NONE ); assertEquals( 1, bar.getItemCount() ); assertSame( item, bar.getItems()[ 0 ] ); assertSame( item, bar.getItem( 0 ) ); assertEquals( 0, bar.indexOf( item ) ); CoolBar anotherBar = new CoolBar( shell, SWT.NONE ); CoolItem anotherItem = new CoolItem( anotherBar, SWT.NONE ); assertEquals( -1, bar.indexOf( anotherItem ) ); } public void testIndexOnCreation() throws Exception { Display display = new Display(); Shell shell = new Shell( display, SWT.NONE ); CoolBar coolBar = new CoolBar( shell, SWT.NONE ); CoolItem coolItem = new CoolItem( coolBar, SWT.NONE ); coolItem.setText( "1" ); assertSame( coolItem, coolBar.getItem( 0 ) ); CoolItem coolItem2 = new CoolItem( coolBar, SWT.NONE, 0 ); coolItem2.setText( "2" ); assertSame( coolItem2, coolBar.getItem( 0 ) ); } public void testStyle() { Display display = new Display(); Shell shell = new Shell( display , SWT.NONE ); CoolBar bar = new CoolBar( shell, SWT.NONE ); assertEquals( SWT.NO_FOCUS | SWT.HORIZONTAL | SWT.LEFT_TO_RIGHT, bar.getStyle() ); bar = new CoolBar( shell, SWT.NO_FOCUS ); assertEquals( SWT.NO_FOCUS | SWT.HORIZONTAL | SWT.LEFT_TO_RIGHT, bar.getStyle() ); bar = new CoolBar( shell, SWT.H_SCROLL ); assertEquals( SWT.NO_FOCUS | SWT.HORIZONTAL | SWT.LEFT_TO_RIGHT, bar.getStyle() ); bar = new CoolBar( shell, SWT.FLAT ); assertEquals( SWT.NO_FOCUS | SWT.FLAT | SWT.HORIZONTAL | SWT.LEFT_TO_RIGHT, bar.getStyle() ); bar = new CoolBar( shell, SWT.VERTICAL ); assertEquals( SWT.NO_FOCUS | SWT.VERTICAL | SWT.LEFT_TO_RIGHT, bar.getStyle() ); bar = new CoolBar( shell, SWT.VERTICAL | SWT.FLAT ); assertEquals( SWT.NO_FOCUS | SWT.VERTICAL | SWT.FLAT | SWT.LEFT_TO_RIGHT, bar.getStyle() ); bar = new CoolBar( shell, SWT.HORIZONTAL ); assertEquals( SWT.NO_FOCUS | SWT.HORIZONTAL | SWT.LEFT_TO_RIGHT, bar.getStyle() ); bar = new CoolBar( shell, SWT.HORIZONTAL | SWT.FLAT ); assertEquals( SWT.NO_FOCUS | SWT.HORIZONTAL | SWT.FLAT | SWT.LEFT_TO_RIGHT, bar.getStyle() ); } public void testIndexOf() { Display display = new Display(); Shell shell = new Shell( display , SWT.NONE ); CoolBar bar = new CoolBar( shell, SWT.NONE ); CoolItem item = new CoolItem( bar, SWT.NONE ); assertEquals( 0, bar.indexOf( item ) ); item.dispose(); try { bar.indexOf( item ); fail( "indexOf must not answer for a disposed item" ); } catch( IllegalArgumentException e ) { // expected } try { bar.indexOf( null ); fail( "indexOf must not answer for null item" ); } catch( IllegalArgumentException e ) { // expected } } public void testDispose() { final java.util.List log = new ArrayList(); DisposeListener disposeListener = new DisposeListener() { public void widgetDisposed( DisposeEvent event ) { log.add( event.getSource() ); } }; Display display = new Display(); Shell shell = new Shell( display, SWT.NONE ); CoolBar bar = new CoolBar( shell, SWT.NONE ); bar.addDisposeListener( disposeListener ); CoolItem item1 = new CoolItem( bar, SWT.NONE ); item1.addDisposeListener( disposeListener ); CoolItem item2 = new CoolItem( bar, SWT.NONE ); item2.addDisposeListener( disposeListener ); item1.dispose(); assertEquals( true, item1.isDisposed() ); assertEquals( 1, bar.getItemCount() ); bar.dispose(); assertEquals( true, bar.isDisposed() ); assertEquals( true, item2.isDisposed() ); assertSame( item1, log.get( 0 ) ); assertSame( item2, log.get( 1 ) ); assertSame( bar, log.get( 2 ) ); } public void testLocked() { Display display = new Display(); Shell shell = new Shell( display , SWT.NONE ); CoolBar bar = new CoolBar( shell, SWT.NONE ); assertEquals( false, bar.getLocked() ); bar.setLocked( true ); assertEquals( true, bar.getLocked() ); } public void testItemOrder() { Display display = new Display(); Shell shell = new Shell( display , SWT.NONE ); CoolBar bar = new CoolBar( shell, SWT.NONE ); new CoolItem( bar, SWT.NONE ); new CoolItem( bar, SWT.NONE ); // Test initial itemOrder -> matches the order in which the items are added assertEquals( 0, bar.getItemOrder()[ 0 ] ); assertEquals( 1, bar.getItemOrder()[ 1 ] ); // Test setItemOrder with legal arguments bar.setItemOrder( new int[] { 1, 0 } ); assertEquals( 0, bar.getItemOrder()[ 1 ] ); assertEquals( 1, bar.getItemOrder()[ 0 ] ); // Test setItemOrder with illegal arguments int[] expectedItemOrder = bar.getItemOrder(); try { bar.setItemOrder( null ); fail( "setItemOrder must not allow null-argument" ); } catch( IllegalArgumentException e ) { // Ensure that nothing that itemOrder hasn't changed assertEquals( expectedItemOrder, bar.getItemOrder() ); } try { bar.setItemOrder( new int[] { 0, 5 } ); fail( "setItemOrder must not allow argument with indics out of range" ); } catch( IllegalArgumentException e ) { // Ensure that nothing that itemOrder hasn't changed assertEquals( expectedItemOrder, bar.getItemOrder() ); } try { bar.setItemOrder( new int[] { 0, 0 } ); fail( "setItemOrder must not allow argument with duplicate indices" ); } catch( IllegalArgumentException e ) { // Ensure that nothing that itemOrder hasn't changed assertEquals( expectedItemOrder, bar.getItemOrder() ); } try { bar.setItemOrder( new int[] { 1 } ); String msg = "setItemOrder must not allow argument whose length doesn't match " + "the number of items"; fail( msg ); } catch( IllegalArgumentException e ) { // Ensure that nothing that itemOrder hasn't changed assertEquals( expectedItemOrder, bar.getItemOrder() ); } } public void testComputeSize() throws Exception { Fixture.fakePhase( PhaseId.PROCESS_ACTION ); Display display = new Display(); Shell shell = new Shell( display , SWT.NONE ); CoolBar coolBar = new CoolBar( shell, SWT.HORIZONTAL ); Point expected = new Point( 0, 0 ); assertEquals( expected, coolBar.computeSize( SWT.DEFAULT, SWT.DEFAULT ) ); createItem( coolBar ); expected = new Point( 130, 22 ); assertEquals( expected, coolBar.computeSize( SWT.DEFAULT, SWT.DEFAULT ) ); coolBar = new CoolBar( shell, SWT.VERTICAL ); createItem( coolBar ); expected = new Point( 120, 32 ); assertEquals( expected, coolBar.computeSize( SWT.DEFAULT, SWT.DEFAULT ) ); coolBar = new CoolBar( shell, SWT.FLAT ); createItem( coolBar ); expected = new Point( 130, 22 ); assertEquals( expected, coolBar.computeSize( SWT.DEFAULT, SWT.DEFAULT ) ); expected = new Point( 100, 100 ); assertEquals( expected, coolBar.computeSize( 100, 100 ) ); } private CoolItem createItem( final CoolBar coolBar ) { ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT); for (int i = 0; i < 3; i++) { ToolItem item = new ToolItem(toolBar, SWT.PUSH); item.setText( "item " + i ); } toolBar.pack(); Point size = toolBar.getSize(); CoolItem item = new CoolItem( coolBar, SWT.NONE ); item.setControl( toolBar ); Point preferred = item.computeSize( size.x, size.y ); item.setPreferredSize( preferred ); return item; } private static void assertEquals( int[] expected, int[] actual ) { assertEquals( expected.length, actual.length ); for( int i = 0; i < expected.length; i++ ) { assertEquals( expected[ i ], actual[ i ] ); } } protected void setUp() throws Exception { Fixture.setUp(); Fixture.fakePhase( PhaseId.PROCESS_ACTION ); } protected void tearDown() throws Exception { Fixture.tearDown(); } }