blob: c07bdf60adf3e56cb716e9a42fb5363ca8bf8140 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package ifc.text;
import lib.MultiMethodTest;
import lib.Status;
import lib.StatusException;
import util.ValueComparer;
import com.sun.star.text.XAutoTextGroup;
import com.sun.star.text.XTextRange;
/**
* Testing <code>com.sun.star.text.XAutoTextGroup</code>
* interface methods :
* <ul>
* <li><code> getTitles()</code></li>
* <li><code> renameByName()</code></li>
* <li><code> insertNewByName()</code></li>
* <li><code> removeByName()</code></li>
* </ul> <p>
* This test needs the following object relations :
* <ul>
* <li> <code>'TextRange'</code> (of type <code>XTextRange</code>):
* the range for which an entry is added. </li>
* <ul> <p>
* Test is multithread compilant. <p>
* @see com.sun.star.text.XAutoTextGroup
*/
public class _XAutoTextGroup extends MultiMethodTest {
public XAutoTextGroup oObj = null;
/**
* Unique number among different interface threads.
*/
protected static int uniq = 0 ;
/**
* Unique string for AutoTextEntry names among different
* threads.
*/
protected String str = null ;
/**
* Prefix for unique string.
* @see #str
*/
protected static final String pref = "XAutoTextGroup" ;
protected XTextRange oRange = null;
/**
* Constructs a unique string for current interface thread
* for naming purposes. All old entries which names are
* started with prefix used for entry names, are deleted
* from the group (they can remain after previous unsuccessfull
* test runs). The relation is obtained.
*
* @throws StatusException if the relation is not found.
*/
public void before() {
str = pref + uniq++ ;
String[] names = oObj.getElementNames() ;
for (int i = 0; i < names.length; i++) {
log.println(" " + names[i]);
if (names[i].toUpperCase().indexOf(pref.toUpperCase()) > 0) {
try {
log.println(" ... removing ...");
oObj.removeByName(names[i]) ;
} catch (com.sun.star.container.NoSuchElementException e) {
log.println("Element '" + names[i] + "' not found.");
}
}
}
oRange = (XTextRange) tEnv.getObjRelation("TextRange");
if (oRange == null) {
throw new StatusException(Status.failed("No relation found")) ;
}
}
/**
* Test calls the method. <p>
* Has <b> OK </b> status if the method returns not
* <code>null</code> value.
*/
public void _getTitles() {
String[] titles = oObj.getTitles();
tRes.tested("getTitles()",titles != null);
}
/**
* Firsts inserts a new <code>AutoTextEntry</code> using a range
* from relation, entry titles are checked before and after
* insertion, second tries to add an entry with the same name. <p>
*
* Has <b>OK</b> status if in the first case titles are changed,
* and in the second case <code>ElementExistException</code> is
* thrown.
*/
public void _insertNewByName() {
boolean result = false;
try {
String[] before = oObj.getTitles();
oObj.insertNewByName(str, "For " + str,oRange);
String[] after = oObj.getTitles();
result = !util.ValueComparer.equalValue(before, after);
}
catch (com.sun.star.container.ElementExistException ex) {
log.println("Exception occured while testing insertNewByName");
ex.printStackTrace(log);
result = false;
}
try {
oObj.insertNewByName(str, "For " + str, oRange);
log.println(
"com::sun::star::container::ElementExistsException wasn't thrown");
oObj.removeByName(str);
result &= false;
} catch (com.sun.star.container.ElementExistException ex) {
result &= true;
} catch (com.sun.star.container.NoSuchElementException ex) {
log.println("Wrong exception was thrown :");
ex.printStackTrace(log);
result &= false;
}
tRes.tested("insertNewByName()",result);
}
/**
* Removes <code>AutoTextEntry</code> added before and checks
* titles of the group before and after removing. <p>
* Has <b> OK </b> status if titles are not equal before and after
* removing and no exceptions were thrown. <p>
* The following method tests are to be completed successfully before :
* <ul>
* <li> <code> insertNewByName() </code> : the entry is
* inserted here. </li>
* </ul>
*/
public void _removeByName() {
requiredMethod("insertNewByName()") ;
try {
String[] before = oObj.getTitles();
oObj.removeByName(str);
String[] after = oObj.getTitles();
tRes.tested("removeByName()",
!ValueComparer.equalValue(before,after));
}
catch (com.sun.star.container.NoSuchElementException ex) {
log.println("Exception occured while testing removeByName");
ex.printStackTrace(log);
tRes.tested("removeByName()",false);
}
}
/**
* Three cases are tested here :
* <ol>
* <li> Trying to rename an entry to a name, which already
* exists in the group. <code>ElementExistException</code>
* must be thrown. </li>
* <li> Trying to rename an element with non-existing name.
* <code>IllegalArgumentException</code> must be thrown.</li>
* <li> The normal situation : no exceptions must be thrown
* and element with a new name must arise. </li>
* </ol>
*
* Has <b>OK</b> status if all three cases were completed successfully.
*/
public void _renameByName() {
boolean result = false;
try {
String[] tit = oObj.getTitles() ;
String[] names = oObj.getElementNames() ;
oObj.insertNewByName(str,"For " + str,oRange);
oObj.insertNewByName(str + "dup","For " + str,oRange);
tit = oObj.getTitles() ;
names = oObj.getElementNames() ;
result = true;
} catch (com.sun.star.container.ElementExistException e) {
log.println("Unexpected exception occured :") ;
e.printStackTrace(log);
} finally {
if (!result) {
try {
oObj.removeByName(str);
} catch (com.sun.star.container.NoSuchElementException e) {}
try {
oObj.removeByName(str + "dup");
} catch (com.sun.star.container.NoSuchElementException e) {}
tRes.tested("renameByName()", false);
return;
}
}
try {
oObj.renameByName(str, str + "dup", "For "+str);
log.println(
"com::sun::star::container::ElementExistsException wasn't thrown");
result = false;
} catch (com.sun.star.container.ElementExistException e) {
result = true;
} catch (com.sun.star.io.IOException e) {
log.println("Wrong exception was thrown :");
e.printStackTrace(log);
result = false;
} catch (com.sun.star.lang.IllegalArgumentException e) {
log.println("Wrong exception was thrown :");
e.printStackTrace(log);
result = false;
} finally {
try {
oObj.removeByName(str);
} catch (com.sun.star.container.NoSuchElementException e) {}
try {
oObj.removeByName(str + "dup");
} catch (com.sun.star.container.NoSuchElementException e) {}
}
try {
oObj.renameByName("~"+str,str,str);
log.println(
"com::sun::star::lang::IllegalArgumentException wasn't thrown");
result &= false;
} catch (com.sun.star.lang.IllegalArgumentException ex) {
result &= true;
} catch (com.sun.star.container.ElementExistException e) {
log.println("Unexpected exception :") ;
e.printStackTrace(log) ;
result = false ;
} catch (com.sun.star.io.IOException e) {
log.println("Unexpected exception :") ;
e.printStackTrace(log) ;
result = false ;
} finally {
try {
oObj.removeByName(str);
} catch (com.sun.star.container.NoSuchElementException e) {}
}
try {
oObj.insertNewByName(str, "For " + str, oRange);
oObj.renameByName(str,str+"a",str+"b");
result &= oObj.hasByName(str + "a");
} catch (com.sun.star.container.ElementExistException ex) {
log.println("Exception occured while testing renameByName");
ex.printStackTrace(log);
result &=false;
} catch (com.sun.star.lang.IllegalArgumentException ex) {
log.println("Exception occured while testing renameByName");
ex.printStackTrace(log);
result &=false;
} catch (com.sun.star.io.IOException ex) {
log.println("Exception occured while testing renameByName");
ex.printStackTrace(log);
result &=false;
} finally {
try {
oObj.removeByName(str);
} catch (com.sun.star.container.NoSuchElementException e) {}
try {
oObj.removeByName(str + "a");
} catch (com.sun.star.container.NoSuchElementException e) {}
}
tRes.tested("renameByName()",result);
}
} // finish class _XAutoTextGroup