/*
* This file is part of the LibreOffice project .
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice :
*
* 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 .
*/
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 compliant . < 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 unsuccessful
* test runs ) . The relation is obtained .
*
* @ throws StatusException if the relation is not found .
*/
@Override
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 occurred 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 occurred 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 {
oObj.getTitles();
oObj.getElementNames();
oObj.insertNewByName(str,"For " + str,oRange);
oObj.insertNewByName(str + "dup" ,"For " + str,oRange);
oObj.getTitles();
oObj.getElementNames();
result = true ;
} catch (com.sun.star.container.ElementExistException e) {
log.println("Unexpected exception occurred :" ) ;
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 );
}
}
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 occurred while testing renameByName" );
ex.printStackTrace(log);
result &=false ;
} catch (com.sun.star.lang.IllegalArgumentException ex) {
log.println("Exception occurred while testing renameByName" );
ex.printStackTrace(log);
result &=false ;
} catch (com.sun.star.io.IOException ex) {
log.println("Exception occurred 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
Messung V0.5 in Prozent C=94 H=99 G=96
¤ Dauer der Verarbeitung: 0.9 Sekunden
¤
*© Formatika GbR, Deutschland