1 /* 2 * This file is part of the LibreOffice project. 3 * 4 * This Source Code Form is subject to the terms of the Mozilla Public 5 * License, v. 2.0. If a copy of the MPL was not distributed with this 6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 * 8 * This file incorporates work covered by the following license notice: 9 * 10 * Licensed to the Apache Software Foundation (ASF) under one or more 11 * contributor license agreements. See the NOTICE file distributed 12 * with this work for additional information regarding copyright 13 * ownership. The ASF licenses this file to you under the Apache 14 * License, Version 2.0 (the "License"); you may not use this file 15 * except in compliance with the License. You may obtain a copy of 16 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 17 */ 18 19 package ifc.text; 20 21 import lib.MultiMethodTest; 22 import lib.Status; 23 import lib.StatusException; 24 import util.ValueComparer; 25 26 import com.sun.star.text.XAutoTextGroup; 27 import com.sun.star.text.XTextRange; 28 29 /** 30 * Testing <code>com.sun.star.text.XAutoTextGroup</code> 31 * interface methods : 32 * <ul> 33 * <li><code> getTitles()</code></li> 34 * <li><code> renameByName()</code></li> 35 * <li><code> insertNewByName()</code></li> 36 * <li><code> removeByName()</code></li> 37 * </ul> <p> 38 * This test needs the following object relations : 39 * <ul> 40 * <li> <code>'TextRange'</code> (of type <code>XTextRange</code>): 41 * the range for which an entry is added. </li> 42 * <ul> <p> 43 * Test is multithread compliant. <p> 44 * @see com.sun.star.text.XAutoTextGroup 45 */ 46 public class _XAutoTextGroup extends MultiMethodTest { 47 48 public XAutoTextGroup oObj = null; 49 50 /** 51 * Unique number among different interface threads. 52 */ 53 protected static int uniq = 0 ; 54 55 /** 56 * Unique string for AutoTextEntry names among different 57 * threads. 58 */ 59 protected String str = null ; 60 61 /** 62 * Prefix for unique string. 63 * @see #str 64 */ 65 protected static final String pref = "XAutoTextGroup" ; 66 protected XTextRange oRange = null; 67 68 /** 69 * Constructs a unique string for current interface thread 70 * for naming purposes. All old entries which names are 71 * started with prefix used for entry names, are deleted 72 * from the group (they can remain after previous unsuccessful 73 * test runs). The relation is obtained. 74 * 75 * @throws StatusException if the relation is not found. 76 */ 77 @Override before()78 public void before() { 79 str = pref + uniq++ ; 80 String[] names = oObj.getElementNames() ; 81 for (int i = 0; i < names.length; i++) { 82 log.println(" " + names[i]); 83 if (names[i].toUpperCase().indexOf(pref.toUpperCase()) > 0) { 84 try { 85 log.println(" ... removing ..."); 86 oObj.removeByName(names[i]) ; 87 } catch (com.sun.star.container.NoSuchElementException e) { 88 log.println("Element '" + names[i] + "' not found."); 89 } 90 } 91 } 92 93 oRange = (XTextRange) tEnv.getObjRelation("TextRange"); 94 if (oRange == null) { 95 throw new StatusException(Status.failed("No relation found")) ; 96 } 97 } 98 99 /** 100 * Test calls the method. <p> 101 * Has <b> OK </b> status if the method returns not 102 * <code>null</code> value. 103 */ _getTitles()104 public void _getTitles() { 105 106 String[] titles = oObj.getTitles(); 107 tRes.tested("getTitles()",titles != null); 108 } 109 110 /** 111 * Firsts inserts a new <code>AutoTextEntry</code> using a range 112 * from relation, entry titles are checked before and after 113 * insertion, second tries to add an entry with the same name. <p> 114 * 115 * Has <b>OK</b> status if in the first case titles are changed, 116 * and in the second case <code>ElementExistException</code> is 117 * thrown. 118 */ _insertNewByName()119 public void _insertNewByName() { 120 121 boolean result = false; 122 123 try { 124 String[] before = oObj.getTitles(); 125 oObj.insertNewByName(str, "For " + str,oRange); 126 String[] after = oObj.getTitles(); 127 result = !util.ValueComparer.equalValue(before, after); 128 } 129 catch (com.sun.star.container.ElementExistException ex) { 130 log.println("Exception occurred while testing insertNewByName"); 131 ex.printStackTrace(log); 132 result = false; 133 } 134 135 try { 136 oObj.insertNewByName(str, "For " + str, oRange); 137 log.println( 138 "com::sun::star::container::ElementExistsException wasn't thrown"); 139 oObj.removeByName(str); 140 result &= false; 141 } catch (com.sun.star.container.ElementExistException ex) { 142 result &= true; 143 } catch (com.sun.star.container.NoSuchElementException ex) { 144 log.println("Wrong exception was thrown :"); 145 ex.printStackTrace(log); 146 result &= false; 147 } 148 149 tRes.tested("insertNewByName()",result); 150 151 } 152 153 /** 154 * Removes <code>AutoTextEntry</code> added before and checks 155 * titles of the group before and after removing. <p> 156 * Has <b> OK </b> status if titles are not equal before and after 157 * removing and no exceptions were thrown. <p> 158 * The following method tests are to be completed successfully before : 159 * <ul> 160 * <li> <code> insertNewByName() </code> : the entry is 161 * inserted here. </li> 162 * </ul> 163 */ _removeByName()164 public void _removeByName() { 165 requiredMethod("insertNewByName()") ; 166 167 try { 168 String[] before = oObj.getTitles(); 169 oObj.removeByName(str); 170 String[] after = oObj.getTitles(); 171 tRes.tested("removeByName()", 172 !ValueComparer.equalValue(before,after)); 173 } 174 catch (com.sun.star.container.NoSuchElementException ex) { 175 log.println("Exception occurred while testing removeByName"); 176 ex.printStackTrace(log); 177 tRes.tested("removeByName()",false); 178 } 179 } 180 181 /** 182 * Three cases are tested here : 183 * <ol> 184 * <li> Trying to rename an entry to a name, which already 185 * exists in the group. <code>ElementExistException</code> 186 * must be thrown. </li> 187 * <li> Trying to rename an element with non-existing name. 188 * <code>IllegalArgumentException</code> must be thrown.</li> 189 * <li> The normal situation : no exceptions must be thrown 190 * and element with a new name must arise. </li> 191 * </ol> 192 * 193 * Has <b>OK</b> status if all three cases were completed successfully. 194 */ _renameByName()195 public void _renameByName() { 196 boolean result = false; 197 198 try { 199 oObj.getTitles(); 200 oObj.getElementNames(); 201 oObj.insertNewByName(str,"For " + str,oRange); 202 oObj.insertNewByName(str + "dup","For " + str,oRange); 203 oObj.getTitles(); 204 oObj.getElementNames(); 205 result = true; 206 } catch (com.sun.star.container.ElementExistException e) { 207 log.println("Unexpected exception occurred :") ; 208 e.printStackTrace(log); 209 } finally { 210 if (!result) { 211 try { 212 oObj.removeByName(str); 213 } catch (com.sun.star.container.NoSuchElementException e) {} 214 try { 215 oObj.removeByName(str + "dup"); 216 } catch (com.sun.star.container.NoSuchElementException e) {} 217 tRes.tested("renameByName()", false); 218 } 219 } 220 221 222 try { 223 oObj.renameByName(str, str + "dup", "For "+str); 224 log.println( 225 "com::sun::star::container::ElementExistsException wasn't thrown"); 226 result = false; 227 } catch (com.sun.star.container.ElementExistException e) { 228 result = true; 229 } catch (com.sun.star.io.IOException e) { 230 log.println("Wrong exception was thrown :"); 231 e.printStackTrace(log); 232 result = false; 233 } catch (com.sun.star.lang.IllegalArgumentException e) { 234 log.println("Wrong exception was thrown :"); 235 e.printStackTrace(log); 236 result = false; 237 } finally { 238 try { 239 oObj.removeByName(str); 240 } catch (com.sun.star.container.NoSuchElementException e) {} 241 try { 242 oObj.removeByName(str + "dup"); 243 } catch (com.sun.star.container.NoSuchElementException e) {} 244 } 245 246 try { 247 oObj.renameByName("~"+str,str,str); 248 log.println( 249 "com::sun::star::lang::IllegalArgumentException wasn't thrown"); 250 result &= false; 251 } catch (com.sun.star.lang.IllegalArgumentException ex) { 252 result &= true; 253 } catch (com.sun.star.container.ElementExistException e) { 254 log.println("Unexpected exception :") ; 255 e.printStackTrace(log) ; 256 result = false ; 257 } catch (com.sun.star.io.IOException e) { 258 log.println("Unexpected exception :") ; 259 e.printStackTrace(log) ; 260 result = false ; 261 } finally { 262 try { 263 oObj.removeByName(str); 264 } catch (com.sun.star.container.NoSuchElementException e) {} 265 } 266 267 try { 268 oObj.insertNewByName(str, "For " + str, oRange); 269 270 oObj.renameByName(str,str+"a",str+"b"); 271 result &= oObj.hasByName(str + "a"); 272 } catch (com.sun.star.container.ElementExistException ex) { 273 log.println("Exception occurred while testing renameByName"); 274 ex.printStackTrace(log); 275 result &=false; 276 } catch (com.sun.star.lang.IllegalArgumentException ex) { 277 log.println("Exception occurred while testing renameByName"); 278 ex.printStackTrace(log); 279 result &=false; 280 } catch (com.sun.star.io.IOException ex) { 281 log.println("Exception occurred while testing renameByName"); 282 ex.printStackTrace(log); 283 result &=false; 284 } finally { 285 try { 286 oObj.removeByName(str); 287 } catch (com.sun.star.container.NoSuchElementException e) {} 288 try { 289 oObj.removeByName(str + "a"); 290 } catch (com.sun.star.container.NoSuchElementException e) {} 291 } 292 293 tRes.tested("renameByName()",result); 294 295 } 296 297 } // finish class _XAutoTextGroup 298 299 300