/*
* Copyright ( c ) 2005 , 2016 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
/*
* @ test
* @ bug 6271411
* @ library / java / text / testlib
* @ summary Confirm that three JCK testcases for CollationElementIterator pass .
*/
import java.text.*;
/*
* Based on JCK - runtime - 15 / tests / api / java_text / CollationElementIterator / ColltnElmtIterTests . java .
*/
public class Bug6271411 extends IntlTest {
public static void main(String argv[]) throws Exception {
Bug6271411 test = new Bug6271411();
test.run(argv);
}
/*
* Rule for RuleBasedCollator
*/
static final String rule = "< c, C < d; D" ;
/*
* Textdata
*/
static final String[] values = {
"" , "c" , "cH522Yd" , "Hi, high school" , "abcchCHidD"
};
/*
* Confirm that setOffset ( ) throws IllegalArgumentException
* ( not IndexOutOfBoundsException ) if the given offset is invalid .
* Use CollationElementIterator . setText ( String ) .
*/
public void Test_CollationElementIterator0007() throws Exception {
int [] offsets = {
Integer.MIN_VALUE, Integer.MIN_VALUE + 1 , -10000 , -2 , -1 ,
100 , 101 , // These two are customized for every test data later.
12345 , Integer.MAX_VALUE - 1 , Integer.MAX_VALUE
};
boolean err = false ;
RuleBasedCollator rbc = new RuleBasedCollator(rule);
CollationElementIterator iterator = rbc.getCollationElementIterator("" );
for (int i = 0 ; i < values.length; i++) {
String source = values[i];
iterator.setText(source);
int len = source.length();
offsets[5 ] = len + 1 ;
offsets[6 ] = len + 2 ;
for (int j = 0 ; j < offsets.length; j++) {
try {
iterator.setOffset(offsets[j]);
System.out.println("IllegalArgumentException should be thrown for setOffset(" +
offsets[j] + ") for <" + source + ">." );
err = true ;
}
catch (IllegalArgumentException e) {
}
}
}
if (err) {
errln("CollationElementIterator.setOffset() didn't throw an expected IllegalArguemntException." );
}
}
/*
* Confirm that setText ( ) doesn ' t throw an exception and setOffset ( ) throws
* IllegalArgumentException if the given offset is invalid .
* Use CollationElementIterator . setText ( CharacterIterator ) .
*/
public void Test_CollationElementIterator0010() throws Exception {
String prefix = "xyz abc" ;
String suffix = "1234567890" ;
int begin = prefix.length();
int [] offsets = {
Integer.MIN_VALUE, Integer.MIN_VALUE + 1 , -10000 ,
-2 , -1 , 0 , 1 , begin - 2 , begin - 1 , 9 , 10 , 11 , 12 , 13 , 14 ,
15 , 12345 , Integer.MAX_VALUE - 1 , Integer.MAX_VALUE
};
boolean err = false ;
RuleBasedCollator rbc = new RuleBasedCollator(rule);
CollationElementIterator iterator = rbc.getCollationElementIterator("" );
for (int i = 0 ; i < values.length; i++) {
String str = prefix + values[i] + suffix;
int len = str.length();
int end = len - suffix.length();
CharacterIterator source =
new StringCharacterIterator(str, begin, end, begin);
iterator.setText(source);
offsets[9 ] = end + 1 ;
offsets[10 ] = end + 2 ;
offsets[11 ] = (end + len) / 2 ;
offsets[12 ] = len - 1 ;
offsets[13 ] = len;
offsets[14 ] = len + 1 ;
offsets[15 ] = len + 2 ;
for (int j = 0 ; j < offsets.length; j++) {
try {
iterator.setOffset(offsets[j]);
System.out.println("IllegalArgumentException should be thrown for setOffset(" +
offsets[j] + ") for <" + str + ">." );
err = true ;
}
catch (IllegalArgumentException e) {
}
}
}
if (err) {
errln("CollationElementIterator.setOffset() didn't throw an expected IllegalArguemntException." );
}
}
/*
* Confirm that setText ( ) doesn ' t throw an exception and setOffset ( ) sets
* an offset as expected .
* Use CollationElementIterator . setText ( CharacterIterator ) .
*/
public void Test_CollationElementIterator0011() throws Exception {
String prefix = "xyz abc" ;
String suffix = "1234567890" ;
int begin = prefix.length();
int [] offsets = { begin, begin + 1 , 2 , 3 , 4 };
RuleBasedCollator rbc = new RuleBasedCollator(rule);
CollationElementIterator iterator = rbc.getCollationElementIterator("" );
for (int i = 0 ; i < values.length; i++) {
String str = prefix + values[i] + suffix;
int len = str.length();
int end = len - suffix.length();
CharacterIterator source =
new StringCharacterIterator(str, begin, end, begin);
iterator.setText(source);
offsets[2 ] = (end + len) / 2 ;
offsets[3 ] = len - 1 ;
offsets[4 ] = len;
for (int j = 0 ; j < offsets.length; j++) {
int offset = offsets[j];
if (offset < begin || offset > end) {
break ;
}
iterator.setOffset(offset);
int newOffset = iterator.getOffset();
if (newOffset != offset) {
throw new RuntimeException("setOffset() didn't set a correct offset. Got: " +
newOffset + " Expected: " + offset + " for <" + str + ">." );
}
}
}
}
}
Messung V0.5 in Prozent C=95 H=92 G=93
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland