blob: c87dbdb5821357aa3acfb4c2c86306d2afa80128 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.swt.tests.junit;
import java.util.Vector;
import junit.framework.*;
import junit.textui.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;
/**
* Automated Test Suite for class org.eclipse.swt.widgets.Shell
*
* @see org.eclipse.swt.widgets.Shell
*/
public class Test_org_eclipse_swt_widgets_Shell extends Test_org_eclipse_swt_widgets_Decorations {
public Test_org_eclipse_swt_widgets_Shell(String name) {
super(name);
}
public static void main(String[] args) {
TestRunner.run(suite());
}
protected void setUp() {
super.setUp();
testShell = new Shell(shell, SWT.NULL);
setWidget(shell);
assertTrue(testShell.getParent() == shell);
}
protected void tearDown() {
super.tearDown();
}
public void test_Constructor() {
Shell newShell = new Shell();
assertNotNull("a: ", newShell.getDisplay());
newShell.dispose();
}
public void test_ConstructorI() {
/* this should test various combinations of STYLE bits, for now just test individual bits */
int[] cases = {SWT.NO_TRIM, SWT.RESIZE, SWT.TITLE, SWT.CLOSE, SWT.MENU, SWT.MIN, SWT.BORDER,
SWT.CLIP_CHILDREN, SWT.CLIP_SIBLINGS, SWT.ON_TOP, SWT.FLAT, SWT.SMOOTH};
Shell newShell;
for (int i = 0; i < cases.length; i++) {
newShell = new Shell(cases[i]);
assertTrue("a " +i, newShell.getDisplay() == shell.getDisplay());
newShell.dispose();
}
}
public void test_ConstructorLorg_eclipse_swt_widgets_Display() {
Display display = shell.getDisplay();
Shell newShell = new Shell(display);
assertTrue("a: ", newShell.getDisplay() == display);
newShell.dispose();
}
public void test_ConstructorLorg_eclipse_swt_widgets_DisplayI() {
int[] cases = {SWT.NO_TRIM, SWT.RESIZE, SWT.TITLE, SWT.CLOSE, SWT.MENU, SWT.MIN, SWT.BORDER,
SWT.CLIP_CHILDREN, SWT.CLIP_SIBLINGS, SWT.ON_TOP, SWT.FLAT, SWT.SMOOTH};
Shell newShell;
Display display = shell.getDisplay();
for (int i = 0; i < cases.length; i++) {
newShell = new Shell(display, cases[i]);
assertTrue("a " +i, newShell.getDisplay() == shell.getDisplay());
newShell.dispose();
}
}
public void test_ConstructorLorg_eclipse_swt_widgets_Shell() {
Shell newShell = new Shell(shell);
assertTrue("a: ", newShell.getParent() == shell);
newShell.dispose();
}
public void test_ConstructorLorg_eclipse_swt_widgets_ShellI() {
/* this should test various combinations of STYLE bits, for now just test individual bits */
int[] cases = {SWT.NO_TRIM, SWT.RESIZE, SWT.TITLE, SWT.CLOSE, SWT.MENU, SWT.MIN, SWT.BORDER,
SWT.CLIP_CHILDREN, SWT.CLIP_SIBLINGS, SWT.ON_TOP, SWT.FLAT, SWT.SMOOTH};
Shell newShell;
for (int i = 0; i < cases.length; i++) {
newShell = new Shell(shell, cases[i]);
assertTrue("a " +i, newShell.getParent() == shell);
newShell.dispose();
}
}
public void test_addShellListenerLorg_eclipse_swt_events_ShellListener() {
listenerCalled = false;
boolean exceptionThrown = false;
ShellListener listener = new ShellListener() {
public void shellActivated(ShellEvent e) {
listenerCalled = true;
}
public void shellClosed(ShellEvent e) {
}
public void shellDeactivated(ShellEvent e) {
}
public void shellDeiconified(ShellEvent e) {
}
public void shellIconified(ShellEvent e) {
}
};
try {
shell.addShellListener(null);
}
catch (IllegalArgumentException e) {
exceptionThrown = true;
}
shell.addShellListener(listener);
shell.forceActive();
/* can't assume listener is synchronously called when forceActive returned */
/* assertTrue(":a:", listenerCalled == true); */
listenerCalled = false;
shell.removeShellListener(listener);
shell.forceActive();
/* can't assume listener is synchronously called when forceActive returned */
/* assertTrue(":b:", listenerCalled == false); */
try {
shell.removeShellListener(null);
}
catch (IllegalArgumentException e) {
exceptionThrown = true;
}
}
public void test_close() {
// bogus line that 'enabled' gpfs
// Shell newShell = new Shell();
testShell.setBounds(20,30,200, 200);
testShell.open();
testShell.close();
shell.setBounds(20,30,200, 200);
shell.open();
}
public void test_dispose() {
Shell newShell = new Shell();
newShell.dispose();
}
public void test_forceActive() {
shell.forceActive();
/* can't assume listener is synchronously called when forceActive returned */
/* assertTrue(":a:", shell.getDisplay().getActiveShell() == shell); */
}
public void test_getBounds() {
// tested in test_setBoundsIIII and test_setBoundsLorg_eclipse_swt_graphics_Rectangle
}
public void test_getEnabled() {
assertTrue(":a0:", shell.getEnabled());
shell.setEnabled(false);
assertTrue(":a:", !shell.getEnabled());
shell.setEnabled(true);
assertTrue(":b:", shell.getEnabled());
}
public void test_getImeInputMode() {
int mode = shell.getImeInputMode();
assertTrue(":a:", mode >= 0);
}
public void test_getLocation() {
shell.setLocation(10,15);
assertTrue(":a:", shell.getLocation().x == 10);
assertTrue(":b:", shell.getLocation().y == 15);
}
public void test_getRegion() {
// tested in test_setRegion()
}
public void test_getShell() {
assertTrue(":a:", shell.getShell()==shell);
Shell shell_1 = new Shell(shell);
assertTrue(":b:", shell_1.getShell()== shell_1);
shell_1.dispose();
}
public void test_getShells() {
int num = shell.getShells().length;
assertTrue(":a:", num == 1);
Shell shell_1 = new Shell(shell);
num = shell.getShells().length;
assertTrue(":a:", num == 2);
shell_1.dispose();
}
public void test_isEnabled() {
assertTrue(":a:", shell.isEnabled());
shell.setEnabled(false);
assertTrue(":b:", !shell.isEnabled());
if (fCheckBogusTestCases)
assertTrue(":b1:", !testShell.isEnabled());
shell.setEnabled(true);
assertTrue(":c:", shell.isEnabled());
assertTrue(":a:", testShell.isEnabled());
testShell.setEnabled(false);
assertTrue(":b:", !testShell.isEnabled());
testShell.setEnabled(true);
assertTrue(":c:", testShell.isEnabled());
}
public void test_open() {
shell.open();
}
public void test_removeShellListenerLorg_eclipse_swt_events_ShellListener() {
// tested in removeShellListener method
}
public void test_setActive() {
/* Create shell2 and make it active. */
Shell shell2 = new Shell();
shell2.open();
/* Test setActive for visible shell. */
shell.setVisible(true);
shell.setActive();
assertTrue("visible shell was not made active", shell.getDisplay().getActiveShell() == shell);
/* Test setActive for visible dialog shell. */
shell2.setActive();
testShell.setVisible(true);
testShell.setActive();
assertTrue("visible dialog shell was not made active", testShell.getDisplay().getActiveShell() == testShell);
/* Test setActive for non-visible shell. */
shell2.setActive();
shell.setVisible(false);
shell.setActive();
assertTrue("non-visible shell was made active", shell.getDisplay().getActiveShell() != shell);
/* Test setActive for non-visible dialog shell. */
shell2.setActive();
testShell.setVisible(false);
testShell.setActive();
assertTrue("non-visible dialog shell was made active", testShell.getDisplay().getActiveShell() != testShell);
shell2.dispose();
}
public void test_setEnabledZ() {
// tested in getEnabled method
}
public void test_setImeInputModeI() {
shell.setImeInputMode(SWT.NONE);
assertTrue(":a:", shell.getImeInputMode() == SWT.NONE);
}
public void test_setRegionLorg_eclipse_swt_graphics_Region() {
warnUnimpl("Test test_setRegionLorg_eclipse_swt_graphics_Region not written");
}
public void test_setVisibleZ() {
shell.setVisible(false);
assertTrue(":a:", !shell.isVisible());
shell.setVisible(true);
assertTrue(":b:", shell.isVisible());
}
public void test_win32_newLorg_eclipse_swt_widgets_DisplayI() {
warnUnimpl("Test test_win32_newLorg_eclipse_swt_widgets_DisplayI not written");
}
public static Test suite() {
TestSuite suite = new TestSuite();
java.util.Vector methodNames = methodNames();
java.util.Enumeration e = methodNames.elements();
while (e.hasMoreElements()) {
suite.addTest(new Test_org_eclipse_swt_widgets_Shell((String)e.nextElement()));
}
return suite;
}
public static java.util.Vector methodNames() {
java.util.Vector methodNames = new java.util.Vector();
//these must be run before the shell tests because of pr 79504
methodNames.addElement("test_consistency_Iconify");
methodNames.addElement("test_consistency_Close");
methodNames.addElement("test_consistency_Dispose");
methodNames.addElement("test_consistency_Open");
methodNames.addAll(Test_org_eclipse_swt_widgets_Decorations.methodNames()); // add superclass method names
methodNames.addElement("test_Constructor");
methodNames.addElement("test_ConstructorI");
methodNames.addElement("test_ConstructorLorg_eclipse_swt_widgets_Display");
methodNames.addElement("test_ConstructorLorg_eclipse_swt_widgets_DisplayI");
methodNames.addElement("test_ConstructorLorg_eclipse_swt_widgets_Shell");
methodNames.addElement("test_ConstructorLorg_eclipse_swt_widgets_ShellI");
methodNames.addElement("test_addShellListenerLorg_eclipse_swt_events_ShellListener");
methodNames.addElement("test_close");
methodNames.addElement("test_dispose");
methodNames.addElement("test_forceActive");
methodNames.addElement("test_getBounds");
methodNames.addElement("test_getEnabled");
methodNames.addElement("test_getImeInputMode");
methodNames.addElement("test_getLocation");
methodNames.addElement("test_getRegion");
methodNames.addElement("test_getShell");
methodNames.addElement("test_getShells");
methodNames.addElement("test_isEnabled");
methodNames.addElement("test_open");
methodNames.addElement("test_removeShellListenerLorg_eclipse_swt_events_ShellListener");
methodNames.addElement("test_setActive");
methodNames.addElement("test_setEnabledZ");
methodNames.addElement("test_setImeInputModeI");
methodNames.addElement("test_setRegionLorg_eclipse_swt_graphics_Region");
methodNames.addElement("test_setVisibleZ");
methodNames.addElement("test_win32_newLorg_eclipse_swt_widgets_DisplayI");
return methodNames;
}
protected void runTest() throws Throwable {
if (getName().equals("test_Constructor")) test_Constructor();
else if (getName().equals("test_ConstructorI")) test_ConstructorI();
else if (getName().equals("test_ConstructorLorg_eclipse_swt_widgets_Display")) test_ConstructorLorg_eclipse_swt_widgets_Display();
else if (getName().equals("test_ConstructorLorg_eclipse_swt_widgets_DisplayI")) test_ConstructorLorg_eclipse_swt_widgets_DisplayI();
else if (getName().equals("test_ConstructorLorg_eclipse_swt_widgets_Shell")) test_ConstructorLorg_eclipse_swt_widgets_Shell();
else if (getName().equals("test_ConstructorLorg_eclipse_swt_widgets_ShellI")) test_ConstructorLorg_eclipse_swt_widgets_ShellI();
else if (getName().equals("test_addShellListenerLorg_eclipse_swt_events_ShellListener")) test_addShellListenerLorg_eclipse_swt_events_ShellListener();
else if (getName().equals("test_close")) test_close();
else if (getName().equals("test_dispose")) test_dispose();
else if (getName().equals("test_forceActive")) test_forceActive();
else if (getName().equals("test_getBounds")) test_getBounds();
else if (getName().equals("test_getEnabled")) test_getEnabled();
else if (getName().equals("test_getImeInputMode")) test_getImeInputMode();
else if (getName().equals("test_getLocation")) test_getLocation();
else if (getName().equals("test_getRegion")) test_getRegion();
else if (getName().equals("test_getShell")) test_getShell();
else if (getName().equals("test_getShells")) test_getShells();
else if (getName().equals("test_isEnabled")) test_isEnabled();
else if (getName().equals("test_open")) test_open();
else if (getName().equals("test_removeShellListenerLorg_eclipse_swt_events_ShellListener")) test_removeShellListenerLorg_eclipse_swt_events_ShellListener();
else if (getName().equals("test_setActive")) test_setActive();
else if (getName().equals("test_setEnabledZ")) test_setEnabledZ();
else if (getName().equals("test_setImeInputModeI")) test_setImeInputModeI();
else if (getName().equals("test_setRegionLorg_eclipse_swt_graphics_Region")) test_setRegionLorg_eclipse_swt_graphics_Region();
else if (getName().equals("test_setVisibleZ")) test_setVisibleZ();
else if (getName().equals("test_win32_newLorg_eclipse_swt_widgets_DisplayI")) test_win32_newLorg_eclipse_swt_widgets_DisplayI();
else if (getName().equals("test_consistency_Iconify")) test_consistency_Iconify();
else if (getName().equals("test_consistency_Close")) test_consistency_Close();
else if (getName().equals("test_consistency_Dispose")) test_consistency_Dispose();
else if (getName().equals("test_consistency_Open")) test_consistency_Open();
else super.runTest();
}
/* custom */
public void test_getParent () {
// overriding Control.test_getParent
assertTrue(shell.getParent()==null);
assertTrue(testShell.getParent() == shell);
}
public void test_getStyle() {
// overriding Widget.test_getStyle
assertTrue("testShell not modeless", (testShell.getStyle () & SWT.MODELESS) == SWT.MODELESS);
int[] cases = {SWT.MODELESS, SWT.PRIMARY_MODAL, SWT.APPLICATION_MODAL, SWT.SYSTEM_MODAL};
for (int i = 0; i < cases.length; i++) {
Shell testShell2 = new Shell(shell, cases[i]);
assertTrue("shell " + i, (testShell2.getStyle () & cases[i]) == cases[i]);
testShell2.dispose();
}
}
public void test_isVisible() {
// overriding Control.test_isVisible
testShell.setVisible(true);
assertTrue(testShell.isVisible());
shell.setVisible(true);
assertTrue(shell.isVisible());
testShell.setVisible(true);
shell.setVisible(true);
assertTrue("shell.isVisible() a:", shell.isVisible());
shell.setVisible(false);
assertTrue("shell.isVisible() b:", !shell.isVisible());
if (fCheckBogusTestCases)
assertTrue("testShell.isVisible() c:", !testShell.isVisible());
}
public void test_setBoundsIIII() {
// overridden from Control because Shells have a minimum size
}
public void test_setBoundsLorg_eclipse_swt_graphics_Rectangle() {
// overridden from Control because Shells have a minimum size
// /* windows */
// /* note that there is a minimum size for a shell, this test will fail if p1.x < 112 or p1.y < 27 */
// /* note that there is a maximum size for a shell, this test will fail if p1.x > 1292 or p1.y > 1036 */
// if (SwtJunit.isWindows) {
// Point p1 = new Point(112, 27);
// Rectangle r1 = new Rectangle(20, 30, p1.x, p1.y);
// Rectangle r2;
// for (int i = 0; i < 11; i++) {
// testShell.setBounds(r1);
// r2 = testShell.getBounds();
// assert("child shell iteration " + i + " set=" + r1 + " get=" + r2, r1.equals(r2));
// r1.width += 100;
// r1.height += 100;
// }
// r1 = new Rectangle(20, 30, p1.x, p1.y);
// for (int i = 0; i < 11; i++) {
// shell.setBounds(r1);
// r2 = shell.getBounds();
// assert("parent shell iteration " + i + " set=" + r1 + " get=" + r2, r1.equals(r2));
// r1.width += 100;
// r1.height += 100;
// }
// }
// /* motif */
// /* note that there is a minimum size for a shell, this test will fail if p1.x < 112 or p1.y < 27 */
// /* note that there is a maximum size for a shell, this test will fail if p1.x > 1292 or p1.y > 1036 */
// if (SwtJunit.isMotif) {
// Point p1 = new Point(15,35);
// Rectangle r1 = new Rectangle(20, 30, p1.x, p1.y);
// Rectangle r2;
//
// for (int i = 0; i < 15; i++) {
// testShell.setBounds(r1);
// r2 = testShell.getBounds();
// assert("child shell iteration " + i + " set=" + r1 + " get=" + r2, r1.equals(r2));
// r1.width += 100;
// r1.height += 100;
// }
// r1 = new Rectangle(50, 50, p1.x, p1.y);
// for (int i = 0; i < 11; i++) {
// shell.setBounds(r1);
// r2 = shell.getBounds();
// assert("parent shell iteration " + i + " set=" + r1 + " get=" + r2, r1.equals(r2));
// r1.width += 100;
// r1.height += 100;
// }
// }
}
public void test_setRegion() {
Region region = new Region();
region.add(new Rectangle(10, 20, 100, 200));
// test shell without style SWT.NO_TRIM
assertTrue(":a:", shell.getRegion() == null);
shell.setRegion(region);
assertTrue(":b:", shell.getRegion() == null);
shell.setRegion(null);
assertTrue(":c:", shell.getRegion() == null);
// test shell with style SWT.NO_TRIM
Display display = shell.getDisplay();
Shell shell2 = new Shell(display, SWT.NO_TRIM);
assertTrue(":d:", shell2.getRegion() == null);
shell2.setRegion(region);
assertTrue(":e:", shell2.getRegion().handle == region.handle);
region.dispose();
assertTrue(":f:", shell2.getRegion().isDisposed());
shell2.setRegion(null);
assertTrue(":g:", shell2.getRegion() == null);
}
public void test_setSizeII() {
/* windows */
/* note that there is a minimum size for a shell, this test will fail if p1.x < 112 or p1.y < 27 */
/* note that there is a maximum size for a shell, this test will fail if p1.x > 1292 or p1.y > 1036 */
if (SwtJunit.isWindows) {
Point newSize = new Point(112, 27);
for (int i = 0; i < 10; i++) {
testShell.setSize(newSize.x, newSize.y);
assertEquals(newSize, testShell.getSize());
newSize.x += 100;
newSize.y += 100;
}
newSize = new Point(1292, 1036);
for (int i = 0; i < 10; i++) {
testShell.setSize(newSize.x, newSize.y);
assertEquals(newSize, testShell.getSize());
newSize.x -= 100;
newSize.y -= 100;
}
}
/* motif */
/* note that there is a minimum size for a shell, this test will fail if p1.x < ?? or p1.y < ?? */
/* note that there is a maximum size for a shell, this test will fail if p1.x > ?? or p1.y > ?? */
if (SwtJunit.isMotif) {
Point newSize = new Point(2, 2);
for (int i = 0; i < 10; i++) {
testShell.setSize(newSize.x, newSize.y);
assertEquals(newSize, testShell.getSize());
newSize.x += 100;
newSize.y += 100;
}
newSize = new Point(1600, 1600);
for (int i = 0; i < 10; i++) {
testShell.setSize(newSize.x, newSize.y);
assertEquals(newSize, testShell.getSize());
newSize.x -= 100;
newSize.y -= 100;
}
}
}
public void test_setSizeLorg_eclipse_swt_graphics_Point() {
/* windows */
/* note that there is a minimum size for a shell, this test will fail if p1.x < 112 or p1.y < 27 */
/* note that there is a maximum size for a shell, this test will fail if p1.x > 1292 or p1.y > 1036 */
if (SwtJunit.isWindows) {
Point newSize = new Point(112, 27);
for (int i = 0; i < 10; i++) {
testShell.setSize(newSize);
assertEquals(newSize, testShell.getSize());
newSize.x += 100;
newSize.y += 100;
}
newSize = new Point(1292, 1036);
for (int i = 0; i < 10; i++) {
testShell.setSize(newSize);
assertEquals(newSize, testShell.getSize());
newSize.x -= 100;
newSize.y -= 100;
}
}
/* motif */
/* note that there is a minimum size for a shell, this test will fail if p1.x < ?? or p1.y < ?? */
/* note that there is a maximum size for a shell, this test will fail if p1.x > ?? or p1.y > ?? */
if (SwtJunit.isMotif) {
Point newSize = new Point(2, 2);
for (int i = 0; i < 10; i++) {
testShell.setSize(newSize);
assertEquals(newSize, testShell.getSize());
newSize.x += 100;
newSize.y += 100;
}
newSize = new Point(1600, 1600);
for (int i = 0; i < 10; i++) {
testShell.setSize(newSize);
assertEquals(newSize, testShell.getSize());
newSize.x -= 100;
newSize.y -= 100;
}
}
}
Shell testShell;
private void createShell() {
tearDown();
shell = new Shell();
testShell = new Shell(shell, SWT.DIALOG_TRIM | SWT.MIN);
testShell.setSize(100,300);
testShell.setText("Shell");
testShell.setLayout(new FillLayout());
setWidget(testShell);
}
public void test_consistency_Open() {
if (fTestConsistency) {
createShell();
final Display display = shell.getDisplay();
Vector events = new Vector();
String[] temp = hookExpectedEvents(testShell, getTestName(), events);
shell.pack();
shell.open();
testShell.pack();
testShell.open();
new Thread() {
public void run() {
display.asyncExec(new Thread() {
public void run() {
shell.dispose();
}
});
}}.start();
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) display.sleep();
}
setUp();
String[] results = new String[events.size()];
events.copyInto(results);
assertEquals(getTestName() + " event ordering", temp, results);
}
}
public void test_consistency_Iconify() {
createShell();
consistencyEvent(1, 0, 0, 0, ConsistencyUtility.SHELL_ICONIFY, null, false);
}
public void test_consistency_Close() {
createShell();
consistencyPrePackShell();
if(!SwtJunit.isCarbon)
consistencyEvent(0, SWT.ALT, 0, SWT.F4, ConsistencyUtility.DOUBLE_KEY_PRESS);
else
consistencyEvent(10, 10, 1, 0, ConsistencyUtility.MOUSE_CLICK);
createShell();
}
public void test_consistency_Dispose() {
createShell();
final Button button = new Button(testShell, SWT.PUSH);
button.setText("dispose");
button.addSelectionListener( new SelectionAdapter() {
public void widgetSelected(SelectionEvent se) {
button.dispose();
testShell.dispose();
}
});
Vector events = new Vector();
consistencyPrePackShell(testShell);
Point pt = button.getLocation();
consistencyEvent(pt.x, pt.y, 1, 0, ConsistencyUtility.MOUSE_CLICK, events);
createShell();
}
}