You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2008/08/06 16:08:17 UTC
svn commit: r683267 - in
/directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui:
NewEntryWizardTest.java SWTBotUtils.java SwtResourcesTest.java
Author: seelmann
Date: Wed Aug 6 07:08:16 2008
New Revision: 683267
URL: http://svn.apache.org/viewvc?rev=683267&view=rev
Log:
Fixed some more race conditions in tests.
Modified:
directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java
directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SWTBotUtils.java
directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SwtResourcesTest.java
Modified: directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java?rev=683267&r1=683266&r2=683267&view=diff
==============================================================================
--- directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java (original)
+++ directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/NewEntryWizardTest.java Wed Aug 6 07:08:16 2008
@@ -28,7 +28,6 @@
import net.sf.swtbot.eclipse.finder.SWTEclipseBot;
import net.sf.swtbot.wait.DefaultCondition;
import net.sf.swtbot.widgets.SWTBotCombo;
-import net.sf.swtbot.widgets.SWTBotMenu;
import net.sf.swtbot.widgets.SWTBotText;
import net.sf.swtbot.widgets.SWTBotTree;
import net.sf.swtbot.widgets.SWTBotTreeItem;
@@ -94,8 +93,19 @@
SWTBotUtils.selectEntry( bot, browserTree, true, "DIT", "Root DSE", "ou=system" );
// open "New Entry" wizard
- SWTBotMenu contextMenu = browserTree.contextMenu( "New Entry..." );
- contextMenu.click();
+ SWTBotUtils.asyncClick( bot, browserTree.contextMenu( "New Entry..." ), new DefaultCondition()
+ {
+ public boolean test() throws Exception
+ {
+ return bot.shell( "New Entry" ) != null;
+ }
+
+
+ public String getFailureMessage()
+ {
+ return "Could not find dialog 'New Entry'";
+ }
+ } );
// select entry creation method
bot.radio( "Create entry from scratch" ).click();
@@ -111,10 +121,7 @@
typeCombo.setText( "o" );
SWTBotText valueText = bot.text( "" );
valueText.setText( "testCreateOrganizationEntry" );
- bot.button( "Next >" ).click();
-
- // wait for check that entry doesn't exist yet
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Next >" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -129,10 +136,7 @@
} );
// click finish to create the entry
- bot.button( "Finish" ).click();
-
- // wait till entry is created and selected in the tree
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Finish" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -142,10 +146,9 @@
public String getFailureMessage()
{
- return "Could not find widget";
+ return "Could not find 'o=testCreateOrganizationEntry'";
}
} );
- bot.sleep( 1000 );
}
@@ -160,8 +163,19 @@
SWTBotUtils.selectEntry( bot, browserTree, true, "DIT", "Root DSE", "ou=system" );
// open "New Entry" wizard
- SWTBotMenu contextMenu = browserTree.contextMenu( "New Entry..." );
- contextMenu.click();
+ SWTBotUtils.asyncClick( bot, browserTree.contextMenu( "New Entry..." ), new DefaultCondition()
+ {
+ public boolean test() throws Exception
+ {
+ return bot.shell( "New Entry" ) != null;
+ }
+
+
+ public String getFailureMessage()
+ {
+ return "Could not find dialog 'New Entry'";
+ }
+ } );
// select entry creation method
bot.radio( "Create entry from scratch" ).click();
@@ -177,10 +191,7 @@
typeCombo.setText( "cn" );
SWTBotText valueText = bot.text( "" );
valueText.setText( "testCreatePersonEntry" );
- bot.button( "Next >" ).click();
-
- // wait for check that entry doesn't exist yet
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Next >" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -203,10 +214,7 @@
snNode.click();
// click finish to create the entry
- bot.button( "Finish" ).click();
-
- // wait till entry is created and selected in the tree
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Finish" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -216,10 +224,9 @@
public String getFailureMessage()
{
- return "Could not find widget";
+ return "Could not find 'cn=testCreatePersonEntry'";
}
} );
- bot.sleep( 1000 );
}
@@ -237,8 +244,19 @@
SWTBotUtils.selectEntry( bot, browserTree, true, "DIT", "Root DSE", "ou=system" );
// open "New Entry" wizard
- SWTBotMenu contextMenu = browserTree.contextMenu( "New Entry..." );
- contextMenu.click();
+ SWTBotUtils.asyncClick( bot, browserTree.contextMenu( "New Entry..." ), new DefaultCondition()
+ {
+ public boolean test() throws Exception
+ {
+ return bot.shell( "New Entry" ) != null;
+ }
+
+
+ public String getFailureMessage()
+ {
+ return "Could not find dialog 'New Entry'";
+ }
+ } );
// select entry creation method
bot.radio( "Create entry from scratch" ).click();
@@ -254,10 +272,7 @@
typeCombo.setText( "O" );
SWTBotText valueText = bot.text( "" );
valueText.setText( "testCreateOrganizationEntry" );
- bot.button( "Next >" ).click();
-
- // wait for check that entry doesn't exist yet
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Next >" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -272,10 +287,7 @@
} );
// click finish to create the entry
- bot.button( "Finish" ).click();
-
- // wait till entry is created and selected in the tree
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Finish" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -285,17 +297,27 @@
public String getFailureMessage()
{
- return "Could not find widget";
+ return "Could not find 'O=testCreateOrganizationEntry'";
}
} );
- bot.sleep( 1000 );
// Now create a second entry under the previously created entry
// to ensure that the selected parent is also upper case.
// open "New Entry" wizard
- contextMenu = browserTree.contextMenu( "New Entry..." );
- contextMenu.click();
+ SWTBotUtils.asyncClick( bot, browserTree.contextMenu( "New Entry..." ), new DefaultCondition()
+ {
+ public boolean test() throws Exception
+ {
+ return bot.shell( "New Entry" ) != null;
+ }
+
+
+ public String getFailureMessage()
+ {
+ return "Could not find dialog 'New Entry'";
+ }
+ } );
// select entry creation method
bot.radio( "Create entry from scratch" ).click();
@@ -316,10 +338,7 @@
SWTBotText previewText = bot.text( "O=testCreateOrganizationEntry2,O=testCreateOrganizationEntry,ou=system" );
assertEquals( "O=testCreateOrganizationEntry2,O=testCreateOrganizationEntry,ou=system", previewText.getText() );
- bot.button( "Next >" ).click();
-
- // wait for check that entry doesn't exist yet
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Next >" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -334,10 +353,7 @@
} );
// click finish to create the entry
- bot.button( "Finish" ).click();
-
- // wait till entry is created and selected in the tree
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Finish" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -347,10 +363,9 @@
public String getFailureMessage()
{
- return "Could not find widget";
+ return "Could not find 'O=testCreateOrganizationEntry2'";
}
} );
- bot.sleep( 1000 );
}
@@ -369,8 +384,19 @@
systemNode.expand();
// open "New Entry" wizard
- SWTBotMenu contextMenu = browserTree.contextMenu( "New Entry..." );
- contextMenu.click();
+ SWTBotUtils.asyncClick( bot, browserTree.contextMenu( "New Entry..." ), new DefaultCondition()
+ {
+ public boolean test() throws Exception
+ {
+ return bot.shell( "New Entry" ) != null;
+ }
+
+
+ public String getFailureMessage()
+ {
+ return "Could not find dialog 'New Entry'";
+ }
+ } );
// select entry creation method
bot.radio( "Create entry from scratch" ).click();
@@ -388,10 +414,7 @@
typeCombo.setText( "krb5PrincipalName" );
SWTBotText valueText = bot.text( "" );
valueText.setText( "kadmin/changepw@DOMAIN" );
- bot.button( "Next >" ).click();
-
- // wait for check that entry doesn't exist yet
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Next >" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -421,10 +444,7 @@
krbNode.click();
// click finish to create the entry
- bot.button( "Finish" ).click();
-
- // wait till entry is created and selected in the tree
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Finish" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -438,7 +458,6 @@
return "Could not find entry 'krb5Principal=kadmin/changepw@DOMAIN'";
}
} );
- bot.sleep( 1000 );
}
}
Modified: directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SWTBotUtils.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SWTBotUtils.java?rev=683267&r1=683266&r2=683267&view=diff
==============================================================================
--- directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SWTBotUtils.java (original)
+++ directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SWTBotUtils.java Wed Aug 6 07:08:16 2008
@@ -31,11 +31,13 @@
import net.sf.swtbot.finder.UIThreadRunnable;
import net.sf.swtbot.matcher.ClassMatcher;
import net.sf.swtbot.wait.DefaultCondition;
+import net.sf.swtbot.wait.ICondition;
import net.sf.swtbot.widgets.SWTBotButton;
import net.sf.swtbot.widgets.SWTBotMenu;
import net.sf.swtbot.widgets.SWTBotTable;
import net.sf.swtbot.widgets.SWTBotTree;
import net.sf.swtbot.widgets.SWTBotTreeItem;
+import net.sf.swtbot.widgets.TimeoutException;
import net.sf.swtbot.widgets.WidgetNotFoundException;
import org.apache.directory.studio.connection.core.Connection;
@@ -200,6 +202,76 @@
/**
+ * Clicks a button asynchronously and waits till the given condition
+ * is fulfilled.
+ *
+ * @param bot the SWT bot
+ * @param button the button to click
+ * @param waitCondition the condition to wait for, may be null
+ *
+ * @throws TimeoutException
+ */
+ public static void asyncClick( final SWTEclipseBot bot, final SWTBotButton button, final ICondition waitCondition )
+ throws TimeoutException
+ {
+ bot.waitUntil( new DefaultCondition()
+ {
+ public boolean test() throws Exception
+ {
+ return button.isEnabled();
+ }
+
+
+ public String getFailureMessage()
+ {
+ return "Button isn't enabled.";
+ }
+ } );
+
+ UIThreadRunnable.asyncExec( bot.getDisplay(), new UIThreadRunnable.VoidResult()
+ {
+ public void run()
+ {
+ button.click();
+ }
+ } );
+
+ if ( waitCondition != null )
+ {
+ bot.waitUntil( waitCondition );
+ }
+ }
+
+
+ /**
+ * Clicks a menu item asynchronously and waits till the given condition
+ * is fulfilled.
+ *
+ * @param bot the SWT bot
+ * @param button the button to click
+ * @param waitCondition the condition to wait for, may be null
+ *
+ * @throws TimeoutException
+ */
+ public static void asyncClick( final SWTEclipseBot bot, final SWTBotMenu menu, final ICondition waitCondition )
+ throws TimeoutException
+ {
+ UIThreadRunnable.asyncExec( bot.getDisplay(), new UIThreadRunnable.VoidResult()
+ {
+ public void run()
+ {
+ menu.click();
+ }
+ } );
+
+ if ( waitCondition != null )
+ {
+ bot.waitUntil( waitCondition );
+ }
+ }
+
+
+ /**
* Selects an entry in the browser tree and optionally expands the selected entry.
* Takes care that all attributes and child entries are initialized so
* that there are no pending background actions and event notifications.
@@ -235,7 +307,14 @@
entry = entry.getNode( currentPath );
}
- entry.select();
+ final SWTBotTreeItem tempEntry = entry;
+ UIThreadRunnable.asyncExec( bot.getDisplay(), new UIThreadRunnable.VoidResult()
+ {
+ public void run()
+ {
+ tempEntry.select();
+ }
+ } );
if ( !pathList.isEmpty() || expandChild )
{
Modified: directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SwtResourcesTest.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SwtResourcesTest.java?rev=683267&r1=683266&r2=683267&view=diff
==============================================================================
--- directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SwtResourcesTest.java (original)
+++ directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/SwtResourcesTest.java Wed Aug 6 07:08:16 2008
@@ -26,7 +26,6 @@
import net.sf.swtbot.finder.UIThreadRunnable.IntResult;
import net.sf.swtbot.wait.DefaultCondition;
import net.sf.swtbot.widgets.SWTBotCombo;
-import net.sf.swtbot.widgets.SWTBotMenu;
import net.sf.swtbot.widgets.SWTBotText;
import net.sf.swtbot.widgets.SWTBotTree;
@@ -130,8 +129,19 @@
private void createAndDeleteEntry( final SWTBotTree browserTree, final String name ) throws Exception
{
SWTBotUtils.selectEntry( bot, browserTree, true, "DIT", "Root DSE", "ou=system" );
- SWTBotMenu contextMenu = browserTree.contextMenu( "New Entry..." );
- contextMenu.click();
+ SWTBotUtils.asyncClick( bot, browserTree.contextMenu( "New Entry..." ), new DefaultCondition()
+ {
+ public boolean test() throws Exception
+ {
+ return bot.shell( "New Entry" ) != null;
+ }
+
+
+ public String getFailureMessage()
+ {
+ return "Could not find dialog 'New Entry'";
+ }
+ } );
bot.radio( "Create entry from scratch" ).click();
bot.button( "Next >" ).click();
@@ -144,10 +154,7 @@
typeCombo.setText( "o" );
SWTBotText valueText = bot.text( "" );
valueText.setText( name );
- bot.button( "Next >" ).click();
-
- // wait for check that entry doesn't exist yet
- bot.waitUntil( new DefaultCondition()
+ SWTBotUtils.asyncClick( bot, bot.button( "Next >" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -160,10 +167,9 @@
return "Finish button is not enabled";
}
} );
- bot.button( "Finish" ).click();
- // wait till entry is created and selected in the tree
- bot.waitUntil( new DefaultCondition()
+ // click finish to create the entry
+ SWTBotUtils.asyncClick( bot, bot.button( "Finish" ), new DefaultCondition()
{
public boolean test() throws Exception
{
@@ -176,16 +182,23 @@
return "Could not select 'o=" + name + "'";
}
} );
- bot.sleep( 1000 );
// delete the entry
SWTBotUtils.selectEntry( bot, browserTree, false, "DIT", "Root DSE", "ou=system", "o=" + name );
- contextMenu = browserTree.contextMenu( "Delete Entry" );
- contextMenu.click();
- bot.button( "OK" ).click();
+ SWTBotUtils.asyncClick( bot, browserTree.contextMenu( "Delete Entry" ), new DefaultCondition()
+ {
+ public boolean test() throws Exception
+ {
+ return bot.shell( "Delete Entry" ) != null;
+ }
- // wait till the parent ou=system is selected in the tree
- bot.waitUntil( new DefaultCondition()
+
+ public String getFailureMessage()
+ {
+ return "Could not find dialog 'New Entry'";
+ }
+ } );
+ SWTBotUtils.asyncClick( bot, bot.button( "OK" ), new DefaultCondition()
{
public boolean test() throws Exception
{