blob: c9141e5cde6344d86b866f8a720558618952121a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2011 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 static org.mockito.Mockito.mock;
import junit.framework.TestCase;
import org.eclipse.rap.rwt.graphics.Graphics;
import org.eclipse.rap.rwt.lifecycle.PhaseId;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ArmListener;
import org.eclipse.swt.events.HelpListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
public class MenuItem_Test extends TestCase {
private Display display;
private Shell shell;
protected void setUp() throws Exception {
Fixture.setUp();
Fixture.fakePhase( PhaseId.PROCESS_ACTION );
display = new Display();
shell = new Shell( display );
}
protected void tearDown() throws Exception {
Fixture.tearDown();
}
public void testConstructor() {
Menu menu = new Menu( shell );
MenuItem item = new MenuItem( menu, SWT.CASCADE );
assertEquals( "", item.getText() );
assertSame( display, item.getDisplay() );
assertSame( menu, item.getParent() );
try {
new MenuItem( null, SWT.CASCADE );
fail( "Must not allow null-parent" );
} catch( IllegalArgumentException iae ) {
// expected
}
}
public void testSetMenu() {
Menu menuBar = new Menu( shell, SWT.BAR );
shell.setMenuBar( menuBar );
MenuItem fileMenuItem = new MenuItem( menuBar, SWT.CASCADE );
Menu fileMenu = new Menu( menuBar );
// Test 'normal' usage of setMenu
fileMenuItem.setMenu( fileMenu );
assertSame( fileMenu, fileMenuItem.getMenu() );
// Dispose the above set menu
// -> the item must track this and getMenu must return null
fileMenu.dispose();
assertNull( fileMenuItem.getMenu() );
// Ensure no disposed of menu can be set
try {
fileMenuItem.setMenu( fileMenu );
fail( "setMenu must to allow to set disposed of menu" );
} catch( IllegalArgumentException e ) {
// expected
}
// Ensure that no menu that belongs to a different shell can be set
Shell anotherShell = new Shell( display , SWT.NONE );
Menu anotherMenu = new Menu( anotherShell );
try {
fileMenuItem.setMenu( anotherMenu );
fail( "setMenu must not accept menu from different shell." );
} catch( IllegalArgumentException e ) {
// expected
}
// setMenu may only be called on MenuItems with style SWT.CASCADE
try {
MenuItem nonCascadingMenuItem = new MenuItem( fileMenu, SWT.PUSH );
nonCascadingMenuItem.setMenu( new Menu( shell, SWT.DROP_DOWN ) );
fail( "setMenu can only be called on MenuItems with style SWT.CASCADE" );
} catch( IllegalArgumentException e ) {
// expected
}
// setMenu accepts only menu with style SWT.DROP_DOWN
try {
MenuItem cascadingMenuItem = new MenuItem( fileMenu, SWT.CASCADE );
cascadingMenuItem.setMenu( new Menu( shell, SWT.POP_UP ) );
fail( "setMenu allows only menus with style SWT.DROP_DOWN" );
} catch( IllegalArgumentException e ) {
// expected
}
}
public void testSelection() {
Menu menuBar = new Menu( shell, SWT.BAR );
MenuItem menuBarItem = new MenuItem( menuBar, SWT.CASCADE );
Menu menu = new Menu( menuBarItem );
menuBarItem.setMenu( menu );
MenuItem pushItem = new MenuItem( menu, SWT.PUSH );
MenuItem radioItem1 = new MenuItem( menu, SWT.RADIO );
MenuItem radioItem2 = new MenuItem( menu, SWT.RADIO );
MenuItem checkItem = new MenuItem( menu, SWT.CHECK );
// Initial state
assertEquals( false, pushItem.getSelection() );
assertEquals( false, checkItem.getSelection() );
assertEquals( false, radioItem1.getSelection() );
assertEquals( false, radioItem2.getSelection() );
// MenuItems with style PUSH must ignore selection changes
pushItem.setSelection( true );
assertEquals( false, pushItem.getSelection() );
// MenuItems with style CHECK or RADIO must allow selection changes
checkItem.setSelection( true );
assertEquals( true, checkItem.getSelection() );
radioItem1.setSelection( true );
assertEquals( true, radioItem1.getSelection() );
// When selecting MenuItem with style RADIO programatically, there is no
// automatic deselection of sibling radio items
radioItem1.setSelection( true );
radioItem2.setSelection( true );
assertEquals( true, radioItem1.getSelection() );
assertEquals( true, radioItem2.getSelection() );
}
@SuppressWarnings("deprecation")
public void testImage() {
Menu menuBar = new Menu( shell, SWT.BAR );
MenuItem menuBarItem = new MenuItem( menuBar, SWT.CASCADE );
Menu menu = new Menu( menuBarItem );
menuBarItem.setMenu( menu );
MenuItem separator = new MenuItem( menu, SWT.SEPARATOR );
// Don't allow an image to be set on a separator menu item
Image image = Graphics.getImage( Fixture.IMAGE1 );
assertNotNull( image );
separator.setImage( image );
assertEquals( null, separator.getImage() );
}
public void testDispose() {
Menu menu = new Menu( shell, SWT.BAR );
MenuItem fileMenuItem = new MenuItem( menu, SWT.CASCADE );
Menu fileMenu = new Menu( fileMenuItem );
fileMenuItem.setMenu( fileMenu );
MenuItem exitMenuItem = new MenuItem( fileMenu, SWT.PUSH );
fileMenuItem.dispose();
assertEquals( true, fileMenuItem.isDisposed() );
assertEquals( true, fileMenu.isDisposed() );
assertEquals( true, exitMenuItem.isDisposed() );
}
public void testDisplay() {
Menu menu = new Menu( shell, SWT.BAR );
MenuItem item = new MenuItem( menu, SWT.CASCADE );
assertSame( display, item.getDisplay() );
assertSame( menu.getDisplay(), item.getDisplay() );
}
public void testDefaultId() {
Menu menu = new Menu( shell, SWT.BAR );
MenuItem item = new MenuItem( menu, SWT.CASCADE );
assertEquals( 0, item.getID() );
}
public void testId() {
Menu menu = new Menu( shell, SWT.BAR );
MenuItem item = new MenuItem( menu, SWT.CASCADE );
item.setID( 123 );
assertEquals( 123, item.getID() );
}
public void testId_InvalidValue() {
Menu menu = new Menu( shell, SWT.BAR );
MenuItem item = new MenuItem( menu, SWT.CASCADE );
try {
item.setID( -100 );
fail( "negative ids not allowed" );
} catch( IllegalArgumentException expected ) {
}
}
public void testAddArmListener() {
Menu menu = new Menu( shell, SWT.BAR );
MenuItem item = new MenuItem( menu, SWT.CASCADE );
item.addArmListener( mock( ArmListener.class ) );
assertTrue( item.isListening( SWT.Arm ) );
}
public void testRemoveArmListener() {
Menu menu = new Menu( shell, SWT.BAR );
MenuItem item = new MenuItem( menu, SWT.CASCADE );
ArmListener listener = mock( ArmListener.class );
item.addArmListener( listener );
item.removeArmListener( listener );
assertFalse( item.isListening( SWT.Arm ) );
}
public void testAddArmListenerWithNullArgument() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
try {
menuItem.addArmListener( null );
} catch( IllegalArgumentException expected ) {
}
}
public void testRemoveArmListenerWithNullArgument() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
try {
menuItem.removeArmListener( null );
} catch( IllegalArgumentException expected ) {
}
}
public void testAddHelpListener() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
menuItem.addHelpListener( mock( HelpListener.class ) );
assertTrue( menuItem.isListening( SWT.Help ) );
}
public void testRemoveHelpListener() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
HelpListener listener = mock( HelpListener.class );
menuItem.addHelpListener( listener );
menuItem.removeHelpListener( listener );
assertFalse( menuItem.isListening( SWT.Help ) );
}
public void testAddHelpListenerWithNullArgument() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
try {
menuItem.addHelpListener( null );
} catch( IllegalArgumentException expected ) {
}
}
public void testRemoveHelpListenerWithNullArgument() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
try {
menuItem.removeHelpListener( null );
} catch( IllegalArgumentException expected ) {
}
}
public void testAddSelectionListener() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
menuItem.addSelectionListener( mock( SelectionListener.class ) );
assertTrue( menuItem.isListening( SWT.Selection ) );
assertTrue( menuItem.isListening( SWT.DefaultSelection ) );
}
public void testRemoveSelectionListener() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
SelectionListener listener = mock( SelectionListener.class );
menuItem.addSelectionListener( listener );
menuItem.removeSelectionListener( listener );
assertFalse( menuItem.isListening( SWT.Selection ) );
assertFalse( menuItem.isListening( SWT.DefaultSelection ) );
}
public void testAddSelectionListenerWithNullArgument() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
try {
menuItem.addSelectionListener( null );
} catch( IllegalArgumentException expected ) {
}
}
public void testRemoveSelectionListenerWithNullArgument() {
Menu menu = new Menu( shell, SWT.POP_UP );
MenuItem menuItem = new MenuItem( menu, SWT.PUSH );
try {
menuItem.removeSelectionListener( null );
} catch( IllegalArgumentException expected ) {
}
}
}