1*b9b79128SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*b9b79128SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*b9b79128SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*b9b79128SAndrew Rist * distributed with this work for additional information 6*b9b79128SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*b9b79128SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*b9b79128SAndrew Rist * "License"); you may not use this file except in compliance 9*b9b79128SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*b9b79128SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*b9b79128SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*b9b79128SAndrew Rist * software distributed under the License is distributed on an 15*b9b79128SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b9b79128SAndrew Rist * KIND, either express or implied. See the License for the 17*b9b79128SAndrew Rist * specific language governing permissions and limitations 18*b9b79128SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*b9b79128SAndrew Rist *************************************************************/ 21*b9b79128SAndrew Rist 22*b9b79128SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir package integration.forms; 25cdf0e10cSrcweir 26cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 27cdf0e10cSrcweir import com.sun.star.util.XCloseable; 28cdf0e10cSrcweir import com.sun.star.util.XModifiable; 29cdf0e10cSrcweir 30cdf0e10cSrcweir public abstract class TestCase extends complexlib.ComplexTestCase implements com.sun.star.lang.XEventListener 31cdf0e10cSrcweir { 32cdf0e10cSrcweir protected XMultiServiceFactory m_orb; /// our service factory 33cdf0e10cSrcweir protected DocumentType m_documentType; /// the type of our document 34cdf0e10cSrcweir protected DocumentHelper m_document; /// our current test document 35cdf0e10cSrcweir protected FormLayer m_formLayer; 36cdf0e10cSrcweir 37cdf0e10cSrcweir /** Creates a new instance of TestCase */ TestCase( DocumentType docType )38cdf0e10cSrcweir public TestCase( DocumentType docType ) 39cdf0e10cSrcweir { 40cdf0e10cSrcweir m_documentType = docType; 41cdf0e10cSrcweir } 42cdf0e10cSrcweir 43cdf0e10cSrcweir /* ------------------------------------------------------------------ */ getTestObjectName()44cdf0e10cSrcweir public String getTestObjectName() 45cdf0e10cSrcweir { 46cdf0e10cSrcweir return this.getClass().getName(); 47cdf0e10cSrcweir } 48cdf0e10cSrcweir 49cdf0e10cSrcweir /* ------------------------------------------------------------------ */ before()50cdf0e10cSrcweir public void before() throws com.sun.star.uno.Exception, java.lang.Exception 51cdf0e10cSrcweir { 52cdf0e10cSrcweir m_orb = (XMultiServiceFactory)param.getMSF(); 53cdf0e10cSrcweir } 54cdf0e10cSrcweir 55cdf0e10cSrcweir /* ------------------------------------------------------------------ */ after()56cdf0e10cSrcweir public void after() throws com.sun.star.uno.Exception, java.lang.Exception 57cdf0e10cSrcweir { 58cdf0e10cSrcweir } 59cdf0e10cSrcweir 60cdf0e10cSrcweir /* ------------------------------------------------------------------ */ 61cdf0e10cSrcweir /** closes our document, if we have an open one, via (simulated) user input 62cdf0e10cSrcweir */ closeDocumentByUI()63cdf0e10cSrcweir protected void closeDocumentByUI() 64cdf0e10cSrcweir { 65cdf0e10cSrcweir try 66cdf0e10cSrcweir { 67cdf0e10cSrcweir if ( m_document != null ) 68cdf0e10cSrcweir { 69cdf0e10cSrcweir // first, set the document to "unmodified" 70cdf0e10cSrcweir XModifiable docModify = (XModifiable)m_document.query( XModifiable.class ); 71cdf0e10cSrcweir docModify.setModified( false ); 72cdf0e10cSrcweir 73cdf0e10cSrcweir m_document.getCurrentView().dispatch( ".uno:CloseDoc" ); 74cdf0e10cSrcweir 75cdf0e10cSrcweir // CloseDoc is asynchronous, so wait until it's done - or 1 second, at most 76cdf0e10cSrcweir synchronized ( this ) { wait( 1000 ); } 77cdf0e10cSrcweir } 78cdf0e10cSrcweir } 79cdf0e10cSrcweir catch ( java.lang.Exception e ) 80cdf0e10cSrcweir { 81cdf0e10cSrcweir e.printStackTrace( System.out ); 82cdf0e10cSrcweir } 83cdf0e10cSrcweir } 84cdf0e10cSrcweir 85cdf0e10cSrcweir /* ------------------------------------------------------------------ */ 86cdf0e10cSrcweir /** closes our document, if we have an open one 87cdf0e10cSrcweir */ closeDocument()88cdf0e10cSrcweir protected void closeDocument() 89cdf0e10cSrcweir { 90cdf0e10cSrcweir try 91cdf0e10cSrcweir { 92cdf0e10cSrcweir // close our document 93cdf0e10cSrcweir if ( m_document != null ) 94cdf0e10cSrcweir { 95cdf0e10cSrcweir XCloseable closeDoc = (XCloseable)m_document.query( XCloseable.class ); 96cdf0e10cSrcweir closeDoc.close( true ); 97cdf0e10cSrcweir } 98cdf0e10cSrcweir } 99cdf0e10cSrcweir catch ( com.sun.star.uno.Exception e ) 100cdf0e10cSrcweir { 101cdf0e10cSrcweir e.printStackTrace( System.out ); 102cdf0e10cSrcweir } 103cdf0e10cSrcweir } 104cdf0e10cSrcweir 105cdf0e10cSrcweir /* ------------------------------------------------------------------ */ 106cdf0e10cSrcweir /** prepares a new document to work with 107cdf0e10cSrcweir */ prepareDocument()108cdf0e10cSrcweir protected void prepareDocument() throws com.sun.star.uno.Exception, java.lang.Exception 109cdf0e10cSrcweir { 110cdf0e10cSrcweir m_document = DocumentHelper.blankDocument( m_orb, m_documentType ); 111cdf0e10cSrcweir m_document.getDocument( ).addEventListener( this ); 112cdf0e10cSrcweir m_formLayer = new FormLayer( m_document ); 113cdf0e10cSrcweir } 114cdf0e10cSrcweir 115cdf0e10cSrcweir /* ------------------------------------------------------------------ */ 116cdf0e10cSrcweir /* internal methods */ 117cdf0e10cSrcweir /* ------------------------------------------------------------------ */ 118cdf0e10cSrcweir /** waits for the user to press a key (on the console where she started the java program) 119cdf0e10cSrcweir or the document to be closed by the user. 120cdf0e10cSrcweir @return 121cdf0e10cSrcweir <TRUE/> if the user pressed a key on the console, <FALSE/> if she closed the document 122cdf0e10cSrcweir */ waitForUserInput()123cdf0e10cSrcweir protected boolean waitForUserInput() throws java.lang.Exception 124cdf0e10cSrcweir { 125cdf0e10cSrcweir synchronized (this) 126cdf0e10cSrcweir { 127cdf0e10cSrcweir integration.forms.WaitForInput aWait = new integration.forms.WaitForInput( this ); 128cdf0e10cSrcweir aWait.start(); 129cdf0e10cSrcweir wait(); 130cdf0e10cSrcweir 131cdf0e10cSrcweir // if the waiter thread is done, the user pressed enter 132cdf0e10cSrcweir boolean bKeyPressed = aWait.isDone(); 133cdf0e10cSrcweir if ( !bKeyPressed ) 134cdf0e10cSrcweir aWait.interrupt(); 135cdf0e10cSrcweir 136cdf0e10cSrcweir return bKeyPressed; 137cdf0e10cSrcweir } 138cdf0e10cSrcweir } 139cdf0e10cSrcweir 140cdf0e10cSrcweir /* ------------------------------------------------------------------ */ 141cdf0e10cSrcweir /* XEventListener overridables */ 142cdf0e10cSrcweir /* ------------------------------------------------------------------ */ disposing( com.sun.star.lang.EventObject eventObject )143cdf0e10cSrcweir public void disposing( com.sun.star.lang.EventObject eventObject ) 144cdf0e10cSrcweir { 145cdf0e10cSrcweir if ( m_document.getDocument().equals( eventObject.Source ) ) 146cdf0e10cSrcweir { 147cdf0e10cSrcweir // notify ourself that we can stop waiting for user input 148cdf0e10cSrcweir synchronized (this) 149cdf0e10cSrcweir { 150cdf0e10cSrcweir notify(); 151cdf0e10cSrcweir } 152cdf0e10cSrcweir } 153cdf0e10cSrcweir } 154cdf0e10cSrcweir } 155