1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package ifc.frame; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import lib.MultiMethodTest; 27*b1cdbd2cSJim Jagielski import lib.Status; 28*b1cdbd2cSJim Jagielski import lib.StatusException; 29*b1cdbd2cSJim Jagielski import util.SOfficeFactory; 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 32*b1cdbd2cSJim Jagielski import com.sun.star.frame.XDesktop; 33*b1cdbd2cSJim Jagielski import com.sun.star.frame.XFrame; 34*b1cdbd2cSJim Jagielski import com.sun.star.frame.XFrameLoader; 35*b1cdbd2cSJim Jagielski import com.sun.star.frame.XLoadEventListener; 36*b1cdbd2cSJim Jagielski import com.sun.star.lang.EventObject; 37*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 38*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 39*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski /** 43*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.frame.XFrameLoader</code> 44*b1cdbd2cSJim Jagielski * interface methods : 45*b1cdbd2cSJim Jagielski * <ul> 46*b1cdbd2cSJim Jagielski * <li><code> load()</code></li> 47*b1cdbd2cSJim Jagielski * <li><code> cancel()</code></li> 48*b1cdbd2cSJim Jagielski * </ul> <p> 49*b1cdbd2cSJim Jagielski * This test needs the following object relations : 50*b1cdbd2cSJim Jagielski * <ul> 51*b1cdbd2cSJim Jagielski * <li> <code>'FrameLoader.URL'</code> (of type <code>String</code>): 52*b1cdbd2cSJim Jagielski * an url or component to be loaded </li> 53*b1cdbd2cSJim Jagielski * <li> <code>'FrameLoader.Frame'</code> <b>(optional)</b> 54*b1cdbd2cSJim Jagielski * (of type <code>com.sun.star.frame.XFrame</code>): 55*b1cdbd2cSJim Jagielski * a target frame where component to be loaded. If this 56*b1cdbd2cSJim Jagielski * relation is ommited then a text document created and its 57*b1cdbd2cSJim Jagielski * frame is used. </li> 58*b1cdbd2cSJim Jagielski * <li> <code>'FrameLoader.args'</code> <b>(optional)</b> 59*b1cdbd2cSJim Jagielski * (of type <code>Object[]</code>): 60*b1cdbd2cSJim Jagielski * necessary arguuments for loading a component. If ommited 61*b1cdbd2cSJim Jagielski * then zero length array is passed as parameter</li> 62*b1cdbd2cSJim Jagielski * <ul> <p> 63*b1cdbd2cSJim Jagielski * Test is <b> NOT </b> multithread compilant. <p> 64*b1cdbd2cSJim Jagielski * @see com.sun.star.frame.XFrameLoader 65*b1cdbd2cSJim Jagielski */ 66*b1cdbd2cSJim Jagielski public class _XFrameLoader extends MultiMethodTest { 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski public XFrameLoader oObj = null; // oObj filled by MultiMethodTest 69*b1cdbd2cSJim Jagielski private String url = null ; 70*b1cdbd2cSJim Jagielski private XFrame frame = null ; 71*b1cdbd2cSJim Jagielski private PropertyValue[] args = new PropertyValue[0] ; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski /** 74*b1cdbd2cSJim Jagielski * Implemetation of load listener which geristers all it's calls. 75*b1cdbd2cSJim Jagielski */ 76*b1cdbd2cSJim Jagielski protected class TestListener implements XLoadEventListener { 77*b1cdbd2cSJim Jagielski public boolean finished = false ; 78*b1cdbd2cSJim Jagielski public boolean cancelled = false ; 79*b1cdbd2cSJim Jagielski loadFinished(XFrameLoader l)80*b1cdbd2cSJim Jagielski public void loadFinished(XFrameLoader l) { 81*b1cdbd2cSJim Jagielski finished = true ; 82*b1cdbd2cSJim Jagielski } loadCancelled(XFrameLoader l)83*b1cdbd2cSJim Jagielski public void loadCancelled(XFrameLoader l) { 84*b1cdbd2cSJim Jagielski cancelled = true ; 85*b1cdbd2cSJim Jagielski } disposing(EventObject e)86*b1cdbd2cSJim Jagielski public void disposing(EventObject e) {} 87*b1cdbd2cSJim Jagielski } 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski TestListener listener = new TestListener() ; 90*b1cdbd2cSJim Jagielski XComponent frameSup = null ; 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski /** 93*b1cdbd2cSJim Jagielski * Retrieves all relations. If optional ones are not found 94*b1cdbd2cSJim Jagielski * creates their default values. <p> 95*b1cdbd2cSJim Jagielski * @throws StatusException If one of required relations not found. 96*b1cdbd2cSJim Jagielski */ before()97*b1cdbd2cSJim Jagielski public void before() { 98*b1cdbd2cSJim Jagielski url = (String) tEnv.getObjRelation("FrameLoader.URL") ; 99*b1cdbd2cSJim Jagielski frame = (XFrame) tEnv.getObjRelation("FrameLoader.Frame") ; 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski if (frame == null) { 102*b1cdbd2cSJim Jagielski SOfficeFactory SOF = SOfficeFactory.getFactory( (XMultiServiceFactory)tParam.getMSF() ); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski try { 105*b1cdbd2cSJim Jagielski log.println( "creating a textdocument" ); 106*b1cdbd2cSJim Jagielski frameSup = SOF.createTextDoc( null ); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski Object oDsk = ((XMultiServiceFactory)tParam.getMSF()) 109*b1cdbd2cSJim Jagielski .createInstance("com.sun.star.frame.Desktop") ; 110*b1cdbd2cSJim Jagielski XDesktop dsk = (XDesktop) 111*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XDesktop.class, oDsk) ; 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski shortWait() ; 114*b1cdbd2cSJim Jagielski frame = dsk.getCurrentFrame() ; 115*b1cdbd2cSJim Jagielski } catch ( com.sun.star.uno.Exception e ) { 116*b1cdbd2cSJim Jagielski // Some exception occures.FAILED 117*b1cdbd2cSJim Jagielski e.printStackTrace( log ); 118*b1cdbd2cSJim Jagielski throw new StatusException( "Couldn't create a frame.", e ); 119*b1cdbd2cSJim Jagielski } 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski Object args = tEnv.getObjRelation("FrameLoader.args") ; 123*b1cdbd2cSJim Jagielski if (args != null) this.args = (PropertyValue[]) args ; 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski if (url == null /*|| frame == null*/) { 126*b1cdbd2cSJim Jagielski throw new StatusException 127*b1cdbd2cSJim Jagielski (Status.failed("Some relations not found")) ; 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski private boolean loaded = false ; 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski /** 134*b1cdbd2cSJim Jagielski * Firts <code>cancel</code> method test is called. 135*b1cdbd2cSJim Jagielski * If in that test loaing process was interrupted by 136*b1cdbd2cSJim Jagielski * <code>cancel</code> call then <code>load</code> test 137*b1cdbd2cSJim Jagielski * executes. It loads a component, waits some moment to 138*b1cdbd2cSJim Jagielski * listener have a chance to be called and then checks 139*b1cdbd2cSJim Jagielski * if the load listener was called. <p> 140*b1cdbd2cSJim Jagielski * Has <b>OK</b> status if <code>cancel</code> method test 141*b1cdbd2cSJim Jagielski * didn't interrupt loading and it was successfull, or 142*b1cdbd2cSJim Jagielski * if in this method it loads successfull and listener's 143*b1cdbd2cSJim Jagielski * <code>finished</code> method was called. 144*b1cdbd2cSJim Jagielski * The following method tests are to be executed before : 145*b1cdbd2cSJim Jagielski * <ul> 146*b1cdbd2cSJim Jagielski * <li> <code> cancel() </code> </li> 147*b1cdbd2cSJim Jagielski * </ul> 148*b1cdbd2cSJim Jagielski */ _load()149*b1cdbd2cSJim Jagielski public void _load() { 150*b1cdbd2cSJim Jagielski executeMethod("cancel()") ; 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski if (!loaded) { 153*b1cdbd2cSJim Jagielski oObj.load(frame, url, args, listener) ; 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski shortWait(); 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski loaded = listener.finished ; 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski tRes.tested("load()", loaded) ; 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski /** 164*b1cdbd2cSJim Jagielski * Starts to load a component and then immediatly tries to 165*b1cdbd2cSJim Jagielski * cancel the process. <p> 166*b1cdbd2cSJim Jagielski * Has <b>OK</b> status if the process was cancelled or 167*b1cdbd2cSJim Jagielski * finished (appropriate listener methods were called). 168*b1cdbd2cSJim Jagielski */ _cancel()169*b1cdbd2cSJim Jagielski public void _cancel() { 170*b1cdbd2cSJim Jagielski boolean result = true ; 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski oObj.load(frame, url, args, listener) ; 173*b1cdbd2cSJim Jagielski oObj.cancel() ; 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski shortWait(); 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski if (listener.cancelled) { 178*b1cdbd2cSJim Jagielski log.println("Loading was canceled.") ; 179*b1cdbd2cSJim Jagielski } 180*b1cdbd2cSJim Jagielski if (listener.finished) { 181*b1cdbd2cSJim Jagielski log.println("Loading was finished.") ; 182*b1cdbd2cSJim Jagielski loaded = true ; 183*b1cdbd2cSJim Jagielski } 184*b1cdbd2cSJim Jagielski if (!listener.cancelled && !listener.finished) { 185*b1cdbd2cSJim Jagielski log.println("Loading was not canceled and not finished") ; 186*b1cdbd2cSJim Jagielski result = false ; 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski tRes.tested("cancel()", result) ; 190*b1cdbd2cSJim Jagielski } 191*b1cdbd2cSJim Jagielski after()192*b1cdbd2cSJim Jagielski public void after() { 193*b1cdbd2cSJim Jagielski if (frameSup != null) frameSup.dispose() ; 194*b1cdbd2cSJim Jagielski frame.dispose(); 195*b1cdbd2cSJim Jagielski } 196*b1cdbd2cSJim Jagielski shortWait()197*b1cdbd2cSJim Jagielski private void shortWait() { 198*b1cdbd2cSJim Jagielski try { 199*b1cdbd2cSJim Jagielski Thread.sleep(5000); 200*b1cdbd2cSJim Jagielski } 201*b1cdbd2cSJim Jagielski catch (InterruptedException ex) { 202*b1cdbd2cSJim Jagielski } 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski } 205*b1cdbd2cSJim Jagielski } 206*b1cdbd2cSJim Jagielski 207