diff options
Diffstat (limited to 'forms/qa/integration/forms/TestCase.java')
-rw-r--r-- | forms/qa/integration/forms/TestCase.java | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/forms/qa/integration/forms/TestCase.java b/forms/qa/integration/forms/TestCase.java new file mode 100644 index 000000000000..aeaa8048f92c --- /dev/null +++ b/forms/qa/integration/forms/TestCase.java @@ -0,0 +1,158 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package integration.forms; + +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.util.XCloseable; +import com.sun.star.util.XModifiable; + +public abstract class TestCase extends complexlib.ComplexTestCase implements com.sun.star.lang.XEventListener +{ + protected XMultiServiceFactory m_orb; /// our service factory + protected DocumentType m_documentType; /// the type of our document + protected DocumentHelper m_document; /// our current test document + protected FormLayer m_formLayer; + + /** Creates a new instance of TestCase */ + public TestCase( DocumentType docType ) + { + m_documentType = docType; + } + + /* ------------------------------------------------------------------ */ + public String getTestObjectName() + { + return this.getClass().getName(); + } + + /* ------------------------------------------------------------------ */ + public void before() throws com.sun.star.uno.Exception, java.lang.Exception + { + m_orb = (XMultiServiceFactory)param.getMSF(); + } + + /* ------------------------------------------------------------------ */ + public void after() throws com.sun.star.uno.Exception, java.lang.Exception + { + } + + /* ------------------------------------------------------------------ */ + /** closes our document, if we have an open one, via (simulated) user input + */ + protected void closeDocumentByUI() + { + try + { + if ( m_document != null ) + { + // first, set the document to "unmodified" + XModifiable docModify = (XModifiable)m_document.query( XModifiable.class ); + docModify.setModified( false ); + + m_document.getCurrentView().dispatch( ".uno:CloseDoc" ); + + // CloseDoc is asynchronous, so wait until it's done - or 1 second, at most + synchronized ( this ) { wait( 1000 ); } + } + } + catch ( java.lang.Exception e ) + { + e.printStackTrace( System.out ); + } + } + + /* ------------------------------------------------------------------ */ + /** closes our document, if we have an open one + */ + protected void closeDocument() + { + try + { + // close our document + if ( m_document != null ) + { + XCloseable closeDoc = (XCloseable)m_document.query( XCloseable.class ); + closeDoc.close( true ); + } + } + catch ( com.sun.star.uno.Exception e ) + { + e.printStackTrace( System.out ); + } + } + + /* ------------------------------------------------------------------ */ + /** prepares a new document to work with + */ + protected void prepareDocument() throws com.sun.star.uno.Exception, java.lang.Exception + { + m_document = DocumentHelper.blankDocument( m_orb, m_documentType ); + m_document.getDocument( ).addEventListener( this ); + m_formLayer = new FormLayer( m_document ); + } + + /* ------------------------------------------------------------------ */ + /* internal methods */ + /* ------------------------------------------------------------------ */ + /** waits for the user to press a key (on the console where she started the java program) + or the document to be closed by the user. + @return + <TRUE/> if the user pressed a key on the console, <FALSE/> if she closed the document + */ + protected boolean waitForUserInput() throws java.lang.Exception + { + synchronized (this) + { + integration.forms.WaitForInput aWait = new integration.forms.WaitForInput( this ); + aWait.start(); + wait(); + + // if the waiter thread is done, the user pressed enter + boolean bKeyPressed = aWait.isDone(); + if ( !bKeyPressed ) + aWait.interrupt(); + + return bKeyPressed; + } + } + + /* ------------------------------------------------------------------ */ + /* XEventListener overridables */ + /* ------------------------------------------------------------------ */ + public void disposing( com.sun.star.lang.EventObject eventObject ) + { + if ( m_document.getDocument().equals( eventObject.Source ) ) + { + // notify ourself that we can stop waiting for user input + synchronized (this) + { + notify(); + } + } + } +} |