summaryrefslogtreecommitdiff
path: root/sfx2/qa
diff options
context:
space:
mode:
authorFrank Schoenheit [fs] <frank.schoenheit@oracle.com>2011-03-28 23:16:59 +0200
committerMichael Meeks <michael.meeks@suse.com>2012-07-06 20:29:12 +0100
commit2693adad786e9faaa0702b40590752592f683039 (patch)
treeb79c10b09b58424636666f812093073336c2b85d /sfx2/qa
parentc6b8f6444da08b8fe38c7d6122e5c1bd715d82f8 (diff)
fs34b: remaint of CWS debuglevels:
UNO API test for ensuring the proper order of events when closing the doc by various means. Two of three test cases disabled currently, due to #i117585# Conflicts: sfx2/JunitTest_sfx2_complex.mk
Diffstat (limited to 'sfx2/qa')
-rwxr-xr-xsfx2/qa/complex/sfx2/DocumentEvents.java206
-rwxr-xr-xsfx2/qa/complex/sfx2/JUnitBasedTest.java55
-rw-r--r--sfx2/qa/complex/sfx2/UndoManager.java3
3 files changed, 262 insertions, 2 deletions
diff --git a/sfx2/qa/complex/sfx2/DocumentEvents.java b/sfx2/qa/complex/sfx2/DocumentEvents.java
new file mode 100755
index 000000000000..a38e13756551
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/DocumentEvents.java
@@ -0,0 +1,206 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package complex.sfx2;
+
+import com.sun.star.document.DocumentEvent;
+import com.sun.star.document.XDocumentEventBroadcaster;
+import com.sun.star.document.XDocumentEventListener;
+import com.sun.star.lang.EventObject;
+import com.sun.star.lang.XEventListener;
+import com.sun.star.uno.Exception;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.util.CloseVetoException;
+import com.sun.star.util.XCloseListener;
+import com.sun.star.util.XCloseable;
+import java.util.Vector;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.openoffice.test.tools.OfficeDocument;
+
+/**
+ *
+ * @author frank.shoenheit@oracle.com
+ */
+public class DocumentEvents extends JUnitBasedTest
+{
+ @Before
+ public void beforeTest() throws Exception
+ {
+ m_document = OfficeDocument.blankTextDocument( this.getORB() );
+ }
+
+ @After
+ public void afterTest()
+ {
+ if ( m_document != null )
+ {
+ assertTrue( "closing the test document failed", m_document.close() );
+ m_document = null;
+ }
+ }
+
+ /**
+ * sets up the environment for a test which checks the behavior upon closing a doc
+ */
+ private void impl_setupDocCloseTest()
+ {
+ m_observedCloseEvents.clear();
+
+ final XDocumentEventBroadcaster docEventBroadcaster = UnoRuntime.queryInterface(
+ XDocumentEventBroadcaster.class, m_document.getDocument() );
+ docEventBroadcaster.addDocumentEventListener( new DocumentEventListener() );
+
+ final XCloseable docCloseable = UnoRuntime.queryInterface( XCloseable.class,
+ m_document.getDocument() );
+ docCloseable.addCloseListener( new CloseListener() );
+
+ m_document.getDocument().addEventListener( new DocDisposeListener() );
+ }
+
+ /**
+ * sets up the environment for a test which checks the behavior upon closing a doc
+ */
+ private void impl_tearDownDocCloseTest( final String i_docCloseMethod )
+ {
+ synchronized( m_document )
+ {
+ try
+ {
+ m_document.wait(10000);
+ }
+ catch (InterruptedException ex)
+ {
+ // don't continue the test if somebody interrupted us ...
+ return;
+ }
+ }
+
+ m_document = null;
+ synchronized( m_observedCloseEvents )
+ {
+ assertArrayEquals(
+ "wrong order of events when closing a doc " + i_docCloseMethod,
+ new CloseEventType[] { CloseEventType.OnUnload, CloseEventType.NotifyClosing, CloseEventType.Disposing },
+ m_observedCloseEvents.toArray( new CloseEventType[0] )
+ );
+ }
+ }
+
+ @Test
+ public void testCloseWinEvents() throws Exception
+ {
+ impl_setupDocCloseTest();
+ m_document.getCurrentView().dispatch( ".uno:CloseWin" );
+ impl_tearDownDocCloseTest( "via .uno:CloseWin" );
+ }
+
+ //@Test
+ public void testCloseDocEvents() throws Exception
+ {
+ impl_setupDocCloseTest();
+ m_document.getCurrentView().dispatch( ".uno:CloseDoc" );
+ impl_tearDownDocCloseTest( "via .uno:CloseDoc" );
+ }
+
+ //@Test
+ public void testCloseByAPI() throws Exception
+ {
+ impl_setupDocCloseTest();
+ // closing the doc by API is synchronous, so do this in a separate thread, else we will get a deadlock
+ // when the document tries to call back our listener (well, I admit I didn't understand *why* we get this
+ // deadlock ... :-\ )
+ (new DocCloser()).start();
+ impl_tearDownDocCloseTest( "by API" );
+ }
+
+ private class DocumentEventListener implements XDocumentEventListener
+ {
+
+ public void documentEventOccured( DocumentEvent i_documentEvent )
+ {
+ if ( i_documentEvent.EventName.equals( "OnUnload" ) )
+ {
+ synchronized( m_observedCloseEvents )
+ {
+ m_observedCloseEvents.add( CloseEventType.OnUnload );
+ }
+ }
+ }
+
+ public void disposing(EventObject eo)
+ {
+ // not interested in
+ }
+ };
+
+ private class CloseListener implements XCloseListener
+ {
+
+ public void queryClosing(EventObject eo, boolean bln) throws CloseVetoException
+ {
+ // not interested in
+ }
+
+ public void notifyClosing(EventObject eo)
+ {
+ synchronized( m_observedCloseEvents )
+ {
+ m_observedCloseEvents.add( CloseEventType.NotifyClosing );
+ }
+ }
+
+ public void disposing(EventObject eo)
+ {
+ // not interested in
+ }
+ };
+
+ private class DocDisposeListener implements XEventListener
+ {
+ public void disposing(EventObject eo)
+ {
+ synchronized( m_observedCloseEvents )
+ {
+ m_observedCloseEvents.add( CloseEventType.Disposing );
+ }
+ synchronized ( m_document )
+ {
+ m_document.notifyAll();
+ }
+ }
+ };
+
+ private class DocCloser extends Thread
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ final XCloseable docCloseable = UnoRuntime.queryInterface(XCloseable.class, m_document.getDocument());
+ docCloseable.close(true);
+ }
+ catch (CloseVetoException ex)
+ {
+ Logger.getLogger(DocumentEvents.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ };
+
+ private enum CloseEventType
+ {
+ OnUnload,
+ NotifyClosing,
+ Disposing
+ };
+
+ private OfficeDocument m_document = null;
+ final private Vector< CloseEventType > m_observedCloseEvents = new Vector<DocumentEvents.CloseEventType>();
+}
diff --git a/sfx2/qa/complex/sfx2/JUnitBasedTest.java b/sfx2/qa/complex/sfx2/JUnitBasedTest.java
new file mode 100755
index 000000000000..a43493712c31
--- /dev/null
+++ b/sfx2/qa/complex/sfx2/JUnitBasedTest.java
@@ -0,0 +1,55 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package complex.sfx2;
+
+import org.openoffice.test.OfficeConnection;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.uno.XComponentContext;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+/**
+ *
+ * @author Frank
+ */
+public class JUnitBasedTest
+{
+ // -----------------------------------------------------------------------------------------------------------------
+ protected XComponentContext getContext()
+ {
+ return m_connection.getComponentContext();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ protected XMultiServiceFactory getORB()
+ {
+ final XMultiServiceFactory xMSF1 = UnoRuntime.queryInterface(
+ XMultiServiceFactory.class, getContext().getServiceManager() );
+ return xMSF1;
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @BeforeClass
+ public static void setUpConnection() throws Exception
+ {
+ System.out.println( "--------------------------------------------------------------------------------" );
+ System.out.println( "connecting ..." );
+ m_connection.setUp();
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ @AfterClass
+ public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception
+ {
+ System.out.println();
+ System.out.println( "tearing down connection" );
+ m_connection.tearDown();
+ System.out.println( "--------------------------------------------------------------------------------" );
+ }
+
+ private static final OfficeConnection m_connection = new OfficeConnection();
+}
diff --git a/sfx2/qa/complex/sfx2/UndoManager.java b/sfx2/qa/complex/sfx2/UndoManager.java
index 955ffa065f94..faeb0dd09c22 100644
--- a/sfx2/qa/complex/sfx2/UndoManager.java
+++ b/sfx2/qa/complex/sfx2/UndoManager.java
@@ -221,12 +221,11 @@ public class UndoManager
events.replaceByName( "OnViewCreated", scriptDescriptor );
// The below doesn't work: event notification is broken in m96, see http://www.openoffice.org/issues/show_bug.cgi?id=116313
-/* m_callbackCalled = false;
+ m_callbackCalled = false;
m_currentDocument.getCurrentView().dispatch( ".uno:NewWindow" );
assertTrue( "triggering an event did not work as expected - basic script not called", m_callbackCalled );
// same as above: The script didn't close the context, but the OOo framework should have
assertEquals( "undo context was not auto-closed as expected", 0, m_undoListener.getCurrentUndoContextDepth() );
- */
// .............................................................................................................
// scenario 4: let the script enter an Undo context, but not close it, as usual.