diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-12-07 16:21:34 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2012-12-07 16:21:49 +0100 |
commit | 21ea372541a81972aa33cb2226dbc2ee3886e23a (patch) | |
tree | b0dbeb688a835472fa4de9c1572271da568912b0 /qadevOOo | |
parent | a6d6d1c24ba497ac8586857baed9d4fb155a17b1 (diff) |
Use XNotifyingDispatch to avoid races
Change-Id: Ia91bd08122052f5ea206eb9e6c03524e6e3ec245
Diffstat (limited to 'qadevOOo')
-rw-r--r-- | qadevOOo/tests/java/mod/_sc/ScAccessiblePageHeaderArea.java | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/qadevOOo/tests/java/mod/_sc/ScAccessiblePageHeaderArea.java b/qadevOOo/tests/java/mod/_sc/ScAccessiblePageHeaderArea.java index e1b50192dabb..93dc2e2be935 100644 --- a/qadevOOo/tests/java/mod/_sc/ScAccessiblePageHeaderArea.java +++ b/qadevOOo/tests/java/mod/_sc/ScAccessiblePageHeaderArea.java @@ -36,10 +36,13 @@ import com.sun.star.accessibility.XAccessibleContext; import com.sun.star.accessibility.XAccessibleStateSet; import com.sun.star.awt.XWindow; import com.sun.star.container.XIndexAccess; +import com.sun.star.frame.DispatchResultEvent; import com.sun.star.frame.XController; -import com.sun.star.frame.XDispatch; import com.sun.star.frame.XDispatchProvider; +import com.sun.star.frame.XDispatchResultListener; import com.sun.star.frame.XModel; +import com.sun.star.frame.XNotifyingDispatch; +import com.sun.star.lang.EventObject; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.sheet.XSpreadsheet; import com.sun.star.sheet.XSpreadsheetDocument; @@ -124,18 +127,44 @@ public class ScAccessiblePageHeaderArea extends TestCase { aParseURL[0].Complete = ".uno:PrintPreview"; xParser.parseStrict(aParseURL); URL aURL = aParseURL[0]; - XDispatch xDispatcher = xDispProv.queryDispatch(aURL, "", 0); - if(xDispatcher != null) - xDispatcher.dispatch( aURL, null ); + XNotifyingDispatch xDispatcher = UnoRuntime.queryInterface( + XNotifyingDispatch.class, xDispProv.queryDispatch(aURL, "", 0)); + final int[] ok = new int[] { 0 }; + XDispatchResultListener listener = new XDispatchResultListener() { + public void disposing(EventObject Source) { + synchronized (ok) { + if (ok[0] == 0) { + ok[0] = 1; + } + ok.notifyAll(); + } + } + public void dispatchFinished(DispatchResultEvent Result) { + synchronized (ok) { + ok[0] = 2; + ok.notifyAll(); + } + } + }; + xDispatcher.dispatchWithNotification( + aURL, null, listener); + synchronized (ok) { + while (ok[0] == 0) { + try { + ok.wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + if (ok[0] != 2) { + throw new RuntimeException("missing disptachFinished"); + } + } } catch (com.sun.star.uno.Exception e) { log.println("Couldn't change mode"); throw new StatusException(Status.failed("Couldn't change mode")); } - try { - Thread.sleep(500); - } catch (InterruptedException ex) {} - AccessibilityTools at = new AccessibilityTools(); XWindow xWindow = at.getCurrentContainerWindow( (XMultiServiceFactory) Param.getMSF(), aModel); @@ -213,4 +242,4 @@ public class ScAccessiblePageHeaderArea extends TestCase { throw new StatusException( "Couldn't create document ", e ); } } -}
\ No newline at end of file +} |