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.container; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.container.NoSuchElementException; 27*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameContainer; 28*b1cdbd2cSJim Jagielski import lib.MultiMethodTest; 29*b1cdbd2cSJim Jagielski import lib.StatusException; 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski /** 32*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.container.XNameContainer</code> 33*b1cdbd2cSJim Jagielski * interface methods : 34*b1cdbd2cSJim Jagielski * <ul> 35*b1cdbd2cSJim Jagielski * <li><code> insertByName()</code></li> 36*b1cdbd2cSJim Jagielski * <li><code> removeByName()</code></li> 37*b1cdbd2cSJim Jagielski * </ul> 38*b1cdbd2cSJim Jagielski * This test needs the following object relations : 39*b1cdbd2cSJim Jagielski * <ul> 40*b1cdbd2cSJim Jagielski * <li> <code>'INSTANCE1', ..., 'INSTANCEN'</code> : N relations 41*b1cdbd2cSJim Jagielski * which represents objects to be inserted. See below 42*b1cdbd2cSJim Jagielski * for more information.</li> 43*b1cdbd2cSJim Jagielski * <li> <code>'XNameContainerINDEX'</code> : For internal test 44*b1cdbd2cSJim Jagielski * usage. Contains current thread number. </li> 45*b1cdbd2cSJim Jagielski * <li> <code>'XNameContainer.AllowDuplicateNames'</code> <b>optional</b>: 46*b1cdbd2cSJim Jagielski * if this relation exists then container elements can have duplicate 47*b1cdbd2cSJim Jagielski * names. </li> 48*b1cdbd2cSJim Jagielski * <li> Test environment variable <code>'THRCNT'</code> : number 49*b1cdbd2cSJim Jagielski * of interface threads running concurently. </li> 50*b1cdbd2cSJim Jagielski * <ul> <p> 51*b1cdbd2cSJim Jagielski * XNameComtainer needs n ObjectRelations "INSTANCEn" , where n=1, ..., THRCNT. 52*b1cdbd2cSJim Jagielski * 53*b1cdbd2cSJim Jagielski * When this interface tested by different threads, it must use different 54*b1cdbd2cSJim Jagielski * instances to insert/remove - one for each thread. 55*b1cdbd2cSJim Jagielski * 56*b1cdbd2cSJim Jagielski * That's why we use objRelation "XNameContainerINDEX" to store the number of 57*b1cdbd2cSJim Jagielski * last taken instance. If there is no such relation, it initialize with 1. 58*b1cdbd2cSJim Jagielski * 59*b1cdbd2cSJim Jagielski * If you insert the same Object by insertByName() several times you 60*b1cdbd2cSJim Jagielski * don't insert the Object several times. The first insertByName() inserts 61*b1cdbd2cSJim Jagielski * the Object to the Container but all other insertByName() changes 62*b1cdbd2cSJim Jagielski * the Name in the Continer because it's the same Object. 63*b1cdbd2cSJim Jagielski * @see com.sun.star.container.XNameContainer 64*b1cdbd2cSJim Jagielski */ 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski public class _XNameContainer extends MultiMethodTest { 67*b1cdbd2cSJim Jagielski public XNameContainer oObj = null; 68*b1cdbd2cSJim Jagielski String Name = "XNameContainer"; 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski /** 71*b1cdbd2cSJim Jagielski * First inserts object by name (different objects for different threads) 72*b1cdbd2cSJim Jagielski * and checks if it exists. Second, if duplicate names are not allowed 73*b1cdbd2cSJim Jagielski * test tries to insert element with the same name and checks for 74*b1cdbd2cSJim Jagielski * proper exception. Third, tries to add <code>null</code> element and 75*b1cdbd2cSJim Jagielski * checks for proper exception. <p> 76*b1cdbd2cSJim Jagielski * Has <b>OK</b> status if in the first case element added exists in 77*b1cdbd2cSJim Jagielski * the container, in the second case <code>ElementExistException</code> 78*b1cdbd2cSJim Jagielski * is thrown, and in the third case <code>IllegalArgumentException</code> 79*b1cdbd2cSJim Jagielski * is thrown. 80*b1cdbd2cSJim Jagielski */ _insertByName()81*b1cdbd2cSJim Jagielski public void _insertByName() { 82*b1cdbd2cSJim Jagielski boolean result = true; 83*b1cdbd2cSJim Jagielski int Index = 0; 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski //get for every thread its own Object to insert it 86*b1cdbd2cSJim Jagielski log.println("get ObjRelation(\"XNameContainerINDEX\")"); 87*b1cdbd2cSJim Jagielski String sIndex = null ; 88*b1cdbd2cSJim Jagielski synchronized (tEnv) { 89*b1cdbd2cSJim Jagielski sIndex = (String)tEnv.getObjRelation("XNameContainerINDEX"); 90*b1cdbd2cSJim Jagielski if (sIndex == null) { 91*b1cdbd2cSJim Jagielski log.println("No XNameContainerINDEX - so set it to 1."); 92*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XNameContainerINDEX",Integer.toString(1)); 93*b1cdbd2cSJim Jagielski Index = 1; 94*b1cdbd2cSJim Jagielski } else { 95*b1cdbd2cSJim Jagielski Index = Integer.parseInt(sIndex); 96*b1cdbd2cSJim Jagielski Index++; 97*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XNameContainerINDEX", 98*b1cdbd2cSJim Jagielski Integer.toString(Index)); 99*b1cdbd2cSJim Jagielski } 100*b1cdbd2cSJim Jagielski } 101*b1cdbd2cSJim Jagielski Name += Index ; 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski log.println("get ObjRelation(\"INSTANCE" + Index +"\")"); 104*b1cdbd2cSJim Jagielski Object oInstance = tEnv.getObjRelation("INSTANCE"+ Index); 105*b1cdbd2cSJim Jagielski if (oInstance == null) { 106*b1cdbd2cSJim Jagielski log.println("ObjRelation(\"INSTANCE" + Index +"\") Object n.a."); 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski log.println("testing insertByName(\""+Name+"\")..."); 111*b1cdbd2cSJim Jagielski try { 112*b1cdbd2cSJim Jagielski String[] names = oObj.getElementNames() ; 113*b1cdbd2cSJim Jagielski log.println("Element names :") ; 114*b1cdbd2cSJim Jagielski for (int i = 0; i<names.length; i++) { 115*b1cdbd2cSJim Jagielski log.println(" '" + names[i] + "'") ; 116*b1cdbd2cSJim Jagielski } 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski oObj.insertByName(Name, oInstance); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski names = oObj.getElementNames() ; 121*b1cdbd2cSJim Jagielski log.println("Element names :") ; 122*b1cdbd2cSJim Jagielski for (int i = 0; i<names.length; i++) { 123*b1cdbd2cSJim Jagielski log.println(" " + names[i]) ; 124*b1cdbd2cSJim Jagielski } 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski result &= oObj.hasByName(Name) ; 127*b1cdbd2cSJim Jagielski log.println("insertByName(\""+Name+"\")...OK"); 128*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 129*b1cdbd2cSJim Jagielski log.println("insertByName(\""+Name+"\"): " + e + " FALSE"); 130*b1cdbd2cSJim Jagielski result = false; 131*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 132*b1cdbd2cSJim Jagielski log.println("insertByName(\""+Name+"\"): " + e + " FALSE"); 133*b1cdbd2cSJim Jagielski result = false; 134*b1cdbd2cSJim Jagielski } catch (com.sun.star.container.ElementExistException e) { 135*b1cdbd2cSJim Jagielski log.println("insertByName(\""+Name+"\"): " + e + " FALSE"); 136*b1cdbd2cSJim Jagielski result = false; 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski // if duplicate names is not allowed test for valid exception 140*b1cdbd2cSJim Jagielski if (tEnv.getObjRelation("XNameContainer.AllowDuplicateNames")==null) { 141*b1cdbd2cSJim Jagielski Object secondInstance = tEnv.getObjRelation("SecondInstance"); 142*b1cdbd2cSJim Jagielski if (secondInstance != null) { 143*b1cdbd2cSJim Jagielski oInstance = secondInstance; 144*b1cdbd2cSJim Jagielski } 145*b1cdbd2cSJim Jagielski log.println("Trying to add element with the same name ...") ; 146*b1cdbd2cSJim Jagielski try { 147*b1cdbd2cSJim Jagielski oObj.insertByName(Name, oInstance); 148*b1cdbd2cSJim Jagielski result = false ; 149*b1cdbd2cSJim Jagielski log.println("!!! No exception were thrown !!!"); 150*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 151*b1cdbd2cSJim Jagielski log.println("!!! Wrong exception : " + e + " FALSE"); 152*b1cdbd2cSJim Jagielski result = false; 153*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 154*b1cdbd2cSJim Jagielski log.println("!!! Wrong exception : " + e + " FALSE"); 155*b1cdbd2cSJim Jagielski result = false; 156*b1cdbd2cSJim Jagielski } catch (com.sun.star.container.ElementExistException e) { 157*b1cdbd2cSJim Jagielski log.println("Right exception : " + e + " OK"); 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski log.println("inserting a wrong Object occurs Exceptions ..."); 162*b1cdbd2cSJim Jagielski try { 163*b1cdbd2cSJim Jagielski Object dummy = null; 164*b1cdbd2cSJim Jagielski oObj.insertByName("Dummy", dummy); 165*b1cdbd2cSJim Jagielski log.println("No Exception: -> FALSE"); 166*b1cdbd2cSJim Jagielski result = false; 167*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 168*b1cdbd2cSJim Jagielski log.println("Dummy-Exception: " + e + " -> OK"); 169*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 170*b1cdbd2cSJim Jagielski log.println("!!! This exception not expected: " +e+ " -> FAILED"); 171*b1cdbd2cSJim Jagielski result = false; 172*b1cdbd2cSJim Jagielski } catch (com.sun.star.container.ElementExistException e) { 173*b1cdbd2cSJim Jagielski log.println("!!! This exception not expected: " +e+ " -> FAILED"); 174*b1cdbd2cSJim Jagielski result = false; 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski tRes.tested("insertByName()", result); 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski } // end insertByName() 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski /** 182*b1cdbd2cSJim Jagielski * Test removes element inserted before and checks if element 183*b1cdbd2cSJim Jagielski * still exists in the container. Second test tries to remove 184*b1cdbd2cSJim Jagielski * element with non-existing name and checks for proper exception. <p> 185*b1cdbd2cSJim Jagielski * Has <b> OK </b> status if in the first case element doesn't 186*b1cdbd2cSJim Jagielski * exist anymore (or duplicate names are allowed), and in the 187*b1cdbd2cSJim Jagielski * second case <code>NoSuchElementException</code> is thrown. <p> 188*b1cdbd2cSJim Jagielski * The following method tests are to be completed successfully before : 189*b1cdbd2cSJim Jagielski * <ul> 190*b1cdbd2cSJim Jagielski * <li> <code> insertByName() </code> : to remove the element inserted 191*b1cdbd2cSJim Jagielski * in this test. </li> 192*b1cdbd2cSJim Jagielski * </ul> 193*b1cdbd2cSJim Jagielski */ _removeByName()194*b1cdbd2cSJim Jagielski public void _removeByName() { 195*b1cdbd2cSJim Jagielski try { 196*b1cdbd2cSJim Jagielski requiredMethod("insertByName()"); 197*b1cdbd2cSJim Jagielski } catch (StatusException e) { 198*b1cdbd2cSJim Jagielski // removing the name anywhere 199*b1cdbd2cSJim Jagielski try { 200*b1cdbd2cSJim Jagielski oObj.removeByName(Name); 201*b1cdbd2cSJim Jagielski } catch (com.sun.star.container.NoSuchElementException e1) { 202*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e1) { 203*b1cdbd2cSJim Jagielski } 204*b1cdbd2cSJim Jagielski } 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski boolean result = true; 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski log.println("testing removeByName() ..."); 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski try { 211*b1cdbd2cSJim Jagielski log.println("remove " + Name); 212*b1cdbd2cSJim Jagielski String[] names = oObj.getElementNames() ; 213*b1cdbd2cSJim Jagielski log.println("Element names :") ; 214*b1cdbd2cSJim Jagielski for (int i = 0; i<names.length; i++) { 215*b1cdbd2cSJim Jagielski log.println(" " + names[i]) ; 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski oObj.removeByName(Name); 218*b1cdbd2cSJim Jagielski boolean loc_res = !oObj.hasByName(Name) || tEnv.getObjRelation 219*b1cdbd2cSJim Jagielski ("XNameContainer.AllowDuplicateNames") != null ; 220*b1cdbd2cSJim Jagielski result &= loc_res ; 221*b1cdbd2cSJim Jagielski if (loc_res) 222*b1cdbd2cSJim Jagielski log.println("1. removeByName(\""+Name+"\") ...OK"); 223*b1cdbd2cSJim Jagielski else 224*b1cdbd2cSJim Jagielski log.println("1. !!! Container still has element with name " 225*b1cdbd2cSJim Jagielski + Name) ; 226*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 227*b1cdbd2cSJim Jagielski result = false; 228*b1cdbd2cSJim Jagielski log.println("1. removeByName:(\""+Name+"\") " + e + " - FAILED"); 229*b1cdbd2cSJim Jagielski } catch (com.sun.star.container.NoSuchElementException e) { 230*b1cdbd2cSJim Jagielski result = false; 231*b1cdbd2cSJim Jagielski log.println("1. removeByName:(\""+Name+"\") " + e + " - FAILED"); 232*b1cdbd2cSJim Jagielski } 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski log.println("removing a non existent object to get an exception"); 235*b1cdbd2cSJim Jagielski try { 236*b1cdbd2cSJim Jagielski oObj.removeByName(Name+ " dummy"); 237*b1cdbd2cSJim Jagielski result = false; 238*b1cdbd2cSJim Jagielski log.println("2. removeByName(): Exception expected! - FAILED"); 239*b1cdbd2cSJim Jagielski } catch (NoSuchElementException e) { 240*b1cdbd2cSJim Jagielski log.println("2. removeByName(): Expected exception - OK"); 241*b1cdbd2cSJim Jagielski result &= true; 242*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 243*b1cdbd2cSJim Jagielski result = false; 244*b1cdbd2cSJim Jagielski log.println("2. removeByName(): Unexpected exception! - " + 245*b1cdbd2cSJim Jagielski e + " - FAILED"); 246*b1cdbd2cSJim Jagielski } 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski tRes.tested("removeByName()", result); 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski return; 251*b1cdbd2cSJim Jagielski } // end removeByName() 252*b1cdbd2cSJim Jagielski } //XNameContainer 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski 256