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.document; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.io.IOException; 27*b1cdbd2cSJim Jagielski import lib.MultiMethodTest; 28*b1cdbd2cSJim Jagielski import lib.Status; 29*b1cdbd2cSJim Jagielski import lib.StatusException; 30*b1cdbd2cSJim Jagielski import util.utils; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 33*b1cdbd2cSJim Jagielski import com.sun.star.document.XDocumentInsertable; 34*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextRange; 35*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski /** 39*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.document.XDocumentInsertable</code> 40*b1cdbd2cSJim Jagielski * interface methods : 41*b1cdbd2cSJim Jagielski * <ul> 42*b1cdbd2cSJim Jagielski * <li><code> insertDocumentFromURL()</code></li> 43*b1cdbd2cSJim Jagielski * </ul> <p> 44*b1cdbd2cSJim Jagielski * This test needs the following object relations : 45*b1cdbd2cSJim Jagielski * <ul> 46*b1cdbd2cSJim Jagielski * <li> <code>'XDocumentInsertable.Checker'</code> 47*b1cdbd2cSJim Jagielski * (of type <code>_XDocumentInsertable.InsertChecker</code>) 48*b1cdbd2cSJim Jagielski * <b> optional </b> : 49*b1cdbd2cSJim Jagielski * relation for checking if document was inserted properly and 50*b1cdbd2cSJim Jagielski * for obtaining document file name. For details see the class 51*b1cdbd2cSJim Jagielski * description. If the relation doesn't exist default document 52*b1cdbd2cSJim Jagielski * name is used, and <code>XTextRange</code> interface of 53*b1cdbd2cSJim Jagielski * component is used for checking.</li> 54*b1cdbd2cSJim Jagielski * <ul> <p> 55*b1cdbd2cSJim Jagielski * The following predefined files needed to complete the test: 56*b1cdbd2cSJim Jagielski * <ul> 57*b1cdbd2cSJim Jagielski * <li> <code>XDocumentInsertable.sxw</code> : StarWriter document 58*b1cdbd2cSJim Jagielski * which content started with 'XDocumentInsertable test.' string. 59*b1cdbd2cSJim Jagielski * The file is needed if no other file name specified by relation. 60*b1cdbd2cSJim Jagielski * </li> 61*b1cdbd2cSJim Jagielski * <ul> <p> 62*b1cdbd2cSJim Jagielski * Test is <b> NOT </b> multithread compilant. <p> 63*b1cdbd2cSJim Jagielski * @see com.sun.star.document.XDocumentInsertable 64*b1cdbd2cSJim Jagielski */ 65*b1cdbd2cSJim Jagielski public class _XDocumentInsertable extends MultiMethodTest { 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski public XDocumentInsertable oObj = null; 68*b1cdbd2cSJim Jagielski protected XTextRange range = null ; 69*b1cdbd2cSJim Jagielski protected static final String defaultFileName = "XDocumentInsertable.sxw" ; 70*b1cdbd2cSJim Jagielski protected InsertChecker checker = null ; 71*b1cdbd2cSJim Jagielski protected String fileName = defaultFileName ; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski /** 74*b1cdbd2cSJim Jagielski * Abstract class for relation passing. It must check if 75*b1cdbd2cSJim Jagielski * document was inserted successfully and can specify its 76*b1cdbd2cSJim Jagielski * own document name to be inserted. 77*b1cdbd2cSJim Jagielski */ 78*b1cdbd2cSJim Jagielski public static abstract class InsertChecker { 79*b1cdbd2cSJim Jagielski /** 80*b1cdbd2cSJim Jagielski * Must be overriden to check if document was 81*b1cdbd2cSJim Jagielski * successfully inserted. 82*b1cdbd2cSJim Jagielski * @return <code>true</code> if document was inserted. 83*b1cdbd2cSJim Jagielski */ isInserted()84*b1cdbd2cSJim Jagielski public abstract boolean isInserted() ; 85*b1cdbd2cSJim Jagielski /** 86*b1cdbd2cSJim Jagielski * Can be overriden to specify different than default 87*b1cdbd2cSJim Jagielski * document name. This document must be situated in 88*b1cdbd2cSJim Jagielski * the test document disrectory, and its name must 89*b1cdbd2cSJim Jagielski * be specified relational to this directory. By 90*b1cdbd2cSJim Jagielski * default 'XDocumentInsertable.swx' file name returned. 91*b1cdbd2cSJim Jagielski * @return File name of the document to be inserted. 92*b1cdbd2cSJim Jagielski */ getFileNameToInsert()93*b1cdbd2cSJim Jagielski public String getFileNameToInsert() { 94*b1cdbd2cSJim Jagielski return defaultFileName ; 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski /** 99*b1cdbd2cSJim Jagielski * Retrieves object relation. If the relation is not found 100*b1cdbd2cSJim Jagielski * then the object tested is tried to query <code>XTextRange</code> 101*b1cdbd2cSJim Jagielski * interface for testing. If the relation is found then document name 102*b1cdbd2cSJim Jagielski * for testing is retrieved, else the default one is used. 103*b1cdbd2cSJim Jagielski * 104*b1cdbd2cSJim Jagielski * @throws StatusException If neither relation found nor 105*b1cdbd2cSJim Jagielski * <code>XTextRange</code> interface is queried. 106*b1cdbd2cSJim Jagielski */ before()107*b1cdbd2cSJim Jagielski public void before() { 108*b1cdbd2cSJim Jagielski checker = (InsertChecker) 109*b1cdbd2cSJim Jagielski tEnv.getObjRelation("XDocumentInsertable.Checker") ; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski if (checker == null) { 112*b1cdbd2cSJim Jagielski log.println("Relaion not found, trying to query for "+ 113*b1cdbd2cSJim Jagielski "XTextRange ...") ; 114*b1cdbd2cSJim Jagielski range = (XTextRange) 115*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface (XTextRange.class, oObj) ; 116*b1cdbd2cSJim Jagielski if (range == null) { 117*b1cdbd2cSJim Jagielski log.println("XTextRange isn't supported by the component."); 118*b1cdbd2cSJim Jagielski throw new StatusException(Status.failed 119*b1cdbd2cSJim Jagielski ("XTextRange isn't supported and relation not found")) ; 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski } else { 122*b1cdbd2cSJim Jagielski fileName = checker.getFileNameToInsert(); 123*b1cdbd2cSJim Jagielski } 124*b1cdbd2cSJim Jagielski } 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski /** 127*b1cdbd2cSJim Jagielski * Tries to insert document from URL specified by relation or 128*b1cdbd2cSJim Jagielski * from default URL. If no relation was passed, text range is 129*b1cdbd2cSJim Jagielski * checked for existance of loaded document content. In case 130*b1cdbd2cSJim Jagielski * if relation was found, then its <code>isInserted</code> 131*b1cdbd2cSJim Jagielski * method is used to check insertion.<p> 132*b1cdbd2cSJim Jagielski * A Second test uses an invalid URL and checks for correct exceptions. 133*b1cdbd2cSJim Jagielski * 134*b1cdbd2cSJim Jagielski * Has <b> OK </b> status if at first insertion was completed successfully 135*b1cdbd2cSJim Jagielski * and no exceptions were thrown and as second a expected excption was thrown. <p> 136*b1cdbd2cSJim Jagielski */ _insertDocumentFromURL()137*b1cdbd2cSJim Jagielski public void _insertDocumentFromURL() { 138*b1cdbd2cSJim Jagielski boolean result = true ; 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski try { 141*b1cdbd2cSJim Jagielski PropertyValue [] szEmptyArgs = new PropertyValue [0]; 142*b1cdbd2cSJim Jagielski String docURL = utils.getFullTestURL(fileName) ; 143*b1cdbd2cSJim Jagielski log.println("Inserting document from URL '" + docURL + "'"); 144*b1cdbd2cSJim Jagielski oObj.insertDocumentFromURL(docURL, szEmptyArgs); 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski if (checker == null) { 147*b1cdbd2cSJim Jagielski log.println("Checker is not specified, testing through "+ 148*b1cdbd2cSJim Jagielski "XTextRange ...") ; 149*b1cdbd2cSJim Jagielski String text = range.getString() ; 150*b1cdbd2cSJim Jagielski log.println("Document text :\n" + text); 151*b1cdbd2cSJim Jagielski log.println("---"); 152*b1cdbd2cSJim Jagielski result &= ( text.indexOf("XDocumentInsertable test.") >= 0 ); 153*b1cdbd2cSJim Jagielski } else { 154*b1cdbd2cSJim Jagielski result &= checker.isInserted(); 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException ex) { 158*b1cdbd2cSJim Jagielski log.println("Exception occured while testing "+ 159*b1cdbd2cSJim Jagielski "insertDocumentFromURL()"); 160*b1cdbd2cSJim Jagielski ex.printStackTrace(log); 161*b1cdbd2cSJim Jagielski result = false ; 162*b1cdbd2cSJim Jagielski } catch (com.sun.star.io.IOException ex) { 163*b1cdbd2cSJim Jagielski log.println("Exception occured while testing "+ 164*b1cdbd2cSJim Jagielski "insertDocumentFromURL()"); 165*b1cdbd2cSJim Jagielski ex.printStackTrace(log); 166*b1cdbd2cSJim Jagielski result = false ; 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski try { 170*b1cdbd2cSJim Jagielski PropertyValue [] szEmptyArgs = new PropertyValue [0]; 171*b1cdbd2cSJim Jagielski String docURL = "file:///c:/ThisIsAnInvaldURL"; 172*b1cdbd2cSJim Jagielski log.println("Inserting document from URL '" + docURL + "'"); 173*b1cdbd2cSJim Jagielski oObj.insertDocumentFromURL(docURL, szEmptyArgs); 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski result=false; 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski } catch (IOException ex) { 178*b1cdbd2cSJim Jagielski log.println("expected exception was thrown -> ok"); 179*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException ex) { 180*b1cdbd2cSJim Jagielski log.println("expected exception was thrown -> ok"); 181*b1cdbd2cSJim Jagielski } 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski tRes.tested("insertDocumentFromURL()", result); 185*b1cdbd2cSJim Jagielski } 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski /** 188*b1cdbd2cSJim Jagielski * Forces environment recreation. 189*b1cdbd2cSJim Jagielski */ after()190*b1cdbd2cSJim Jagielski protected void after() { 191*b1cdbd2cSJim Jagielski disposeEnvironment(); 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski } // finish class _XDocumentInsertable 194*b1cdbd2cSJim Jagielski 195