4c7b313e0d
Reviewed-by: naoto
326 lines
14 KiB
Java
326 lines
14 KiB
Java
/*
|
|
* Copyright (c) 1997, 2024, 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.
|
|
*/
|
|
|
|
/*
|
|
(C) Copyright Taligent, Inc. 1996 - All Rights Reserved
|
|
(C) Copyright IBM Corp. 1996 - All Rights Reserved
|
|
|
|
The original version of this source code and documentation is copyrighted and
|
|
owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These materials are
|
|
provided under terms of a License Agreement between Taligent and Sun. This
|
|
technology is protected by multiple US and International patents. This notice and
|
|
attribution to Taligent may not be removed.
|
|
Taligent is a registered trademark of Taligent, Inc.
|
|
*/
|
|
|
|
/*
|
|
* @test
|
|
* @library /java/text/testlib
|
|
* @summary test Collation API
|
|
* @modules jdk.localedata
|
|
* @run junit APITest
|
|
*/
|
|
|
|
import java.util.Locale;
|
|
import java.text.Collator;
|
|
import java.text.RuleBasedCollator;
|
|
import java.text.CollationKey;
|
|
import java.text.CollationElementIterator;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static org.junit.jupiter.api.Assertions.fail;
|
|
|
|
public class APITest {
|
|
|
|
final void doAssert(boolean condition, String message)
|
|
{
|
|
if (!condition) {
|
|
fail("ERROR: " + message);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public final void TestProperty( )
|
|
{
|
|
Collator col = null;
|
|
try {
|
|
col = Collator.getInstance(Locale.ROOT);
|
|
System.out.println("The property tests begin : ");
|
|
System.out.println("Test ctors : ");
|
|
doAssert(col.compare("ab", "abc") < 0, "ab < abc comparison failed");
|
|
doAssert(col.compare("ab", "AB") < 0, "ab < AB comparison failed");
|
|
doAssert(col.compare("black-bird", "blackbird") > 0, "black-bird > blackbird comparison failed");
|
|
doAssert(col.compare("black bird", "black-bird") < 0, "black bird < black-bird comparison failed");
|
|
doAssert(col.compare("Hello", "hello") > 0, "Hello > hello comparison failed");
|
|
|
|
System.out.println("Test ctors ends.");
|
|
System.out.println("testing Collator.getStrength() method ...");
|
|
doAssert(col.getStrength() == Collator.TERTIARY, "collation object has the wrong strength");
|
|
doAssert(col.getStrength() != Collator.PRIMARY, "collation object's strength is primary difference");
|
|
|
|
System.out.println("testing Collator.setStrength() method ...");
|
|
col.setStrength(Collator.SECONDARY);
|
|
doAssert(col.getStrength() != Collator.TERTIARY, "collation object's strength is secondary difference");
|
|
doAssert(col.getStrength() != Collator.PRIMARY, "collation object's strength is primary difference");
|
|
doAssert(col.getStrength() == Collator.SECONDARY, "collation object has the wrong strength");
|
|
|
|
System.out.println("testing Collator.setDecomposition() method ...");
|
|
col.setDecomposition(Collator.NO_DECOMPOSITION);
|
|
doAssert(col.getDecomposition() != Collator.FULL_DECOMPOSITION, "collation object's strength is secondary difference");
|
|
doAssert(col.getDecomposition() != Collator.CANONICAL_DECOMPOSITION, "collation object's strength is primary difference");
|
|
doAssert(col.getDecomposition() == Collator.NO_DECOMPOSITION, "collation object has the wrong strength");
|
|
} catch (Exception foo) {
|
|
fail("Error : " + foo.getMessage()
|
|
+ "\n Default Collator creation failed.");
|
|
}
|
|
System.out.println("Default collation property test ended.");
|
|
System.out.println("Collator.getRules() testing ...");
|
|
doAssert(((RuleBasedCollator)col).getRules().length() != 0, "getRules() result incorrect" );
|
|
System.out.println("getRules tests end.");
|
|
try {
|
|
col = Collator.getInstance(Locale.FRENCH);
|
|
col.setStrength(Collator.PRIMARY);
|
|
System.out.println("testing Collator.getStrength() method again ...");
|
|
doAssert(col.getStrength() != Collator.TERTIARY, "collation object has the wrong strength");
|
|
doAssert(col.getStrength() == Collator.PRIMARY, "collation object's strength is not primary difference");
|
|
|
|
System.out.println("testing French Collator.setStrength() method ...");
|
|
col.setStrength(Collator.TERTIARY);
|
|
doAssert(col.getStrength() == Collator.TERTIARY, "collation object's strength is not tertiary difference");
|
|
doAssert(col.getStrength() != Collator.PRIMARY, "collation object's strength is primary difference");
|
|
doAssert(col.getStrength() != Collator.SECONDARY, "collation object's strength is secondary difference");
|
|
|
|
} catch (Exception bar) {
|
|
fail("Error : " + bar.getMessage()
|
|
+ "\n Creating French collation failed.");
|
|
}
|
|
|
|
System.out.println("Create junk collation: ");
|
|
Locale abcd = Locale.of("ab", "CD");
|
|
Collator junk = null;
|
|
try {
|
|
junk = Collator.getInstance(abcd);
|
|
} catch (Exception err) {
|
|
fail("Error : " + err.getMessage()
|
|
+ "\n Junk collation creation failed, should at least return the collator for the base bundle.");
|
|
}
|
|
try {
|
|
col = Collator.getInstance(Locale.ROOT);
|
|
doAssert(col.equals(junk), "The base bundle's collation should be returned.");
|
|
} catch (Exception exc) {
|
|
fail("Error : " + exc.getMessage()
|
|
+ "\n Default collation comparison, caching not working.");
|
|
}
|
|
|
|
System.out.println("Collator property test ended.");
|
|
}
|
|
|
|
@Test
|
|
public final void TestHashCode( )
|
|
{
|
|
System.out.println("hashCode tests begin.");
|
|
Collator col1 = null;
|
|
try {
|
|
col1 = Collator.getInstance(Locale.ROOT);
|
|
} catch (Exception foo) {
|
|
fail("Error : " + foo.getMessage()
|
|
+ "\n Default collation creation failed.");
|
|
}
|
|
Collator col2 = null;
|
|
Locale dk = Locale.of("da", "DK");
|
|
try {
|
|
col2 = Collator.getInstance(dk);
|
|
} catch (Exception bar) {
|
|
fail("Error : " + bar.getMessage()
|
|
+ "\n Danish collation creation failed.");
|
|
return;
|
|
}
|
|
Collator col3 = null;
|
|
try {
|
|
col3 = Collator.getInstance(Locale.ROOT);
|
|
} catch (Exception err) {
|
|
fail("Error : " + err.getMessage()
|
|
+ "\n 2nd default collation creation failed.");
|
|
}
|
|
System.out.println("Collator.hashCode() testing ...");
|
|
|
|
if (col1 != null) {
|
|
doAssert(col1.hashCode() != col2.hashCode(), "Hash test1 result incorrect");
|
|
if (col3 != null) {
|
|
doAssert(col1.hashCode() == col3.hashCode(), "Hash result not equal");
|
|
}
|
|
}
|
|
|
|
System.out.println("hashCode tests end.");
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// ctor -- Tests the constructor methods
|
|
//
|
|
@Test
|
|
public final void TestCollationKey( )
|
|
{
|
|
System.out.println("testing CollationKey begins...");
|
|
Collator col = null;
|
|
try {
|
|
col = Collator.getInstance(Locale.ROOT);
|
|
} catch (Exception foo) {
|
|
fail("Error : " + foo.getMessage()
|
|
+ "\n Default collation creation failed.");
|
|
}
|
|
if (col == null) {
|
|
return;
|
|
}
|
|
|
|
String test1 = "Abcda", test2 = "abcda";
|
|
System.out.println("Use tertiary comparison level testing ....");
|
|
CollationKey sortk1 = col.getCollationKey(test1);
|
|
CollationKey sortk2 = col.getCollationKey(test2);
|
|
doAssert(sortk1.compareTo(sortk2) > 0,
|
|
"Result should be \"Abcda\" >>> \"abcda\"");
|
|
CollationKey sortk3 = sortk2;
|
|
CollationKey sortkNew = sortk1;
|
|
doAssert(sortk1 != sortk2, "The sort keys should be different");
|
|
doAssert(sortk1.hashCode() != sortk2.hashCode(), "sort key hashCode() failed");
|
|
doAssert(sortk2.compareTo(sortk3) == 0, "The sort keys should be the same");
|
|
doAssert(sortk1 == sortkNew, "The sort keys assignment failed");
|
|
doAssert(sortk1.hashCode() == sortkNew.hashCode(), "sort key hashCode() failed");
|
|
doAssert(sortkNew != sortk3, "The sort keys should be different");
|
|
doAssert(sortk1.compareTo(sortk3) > 0, "Result should be \"Abcda\" >>> \"abcda\"");
|
|
doAssert(sortk2.compareTo(sortk3) == 0, "Result should be \"abcda\" == \"abcda\"");
|
|
long cnt1, cnt2;
|
|
byte byteArray1[] = sortk1.toByteArray();
|
|
byte byteArray2[] = sortk2.toByteArray();
|
|
doAssert(byteArray1 != null && byteArray2 != null, "CollationKey.toByteArray failed.");
|
|
System.out.println("testing sortkey ends...");
|
|
}
|
|
//----------------------------------------------------------------------------
|
|
// ctor -- Tests the constructor methods
|
|
//
|
|
@Test
|
|
public final void TestElemIter( )
|
|
{
|
|
System.out.println("testing sortkey begins...");
|
|
Collator col = null;
|
|
try {
|
|
col = Collator.getInstance();
|
|
} catch (Exception foo) {
|
|
fail("Error : " + foo.getMessage()
|
|
+ "\n Default collation creation failed.");
|
|
}
|
|
RuleBasedCollator rbCol;
|
|
if (col instanceof RuleBasedCollator) {
|
|
rbCol = (RuleBasedCollator) col;
|
|
} else {
|
|
return;
|
|
}
|
|
String testString1 = "XFILE What subset of all possible test cases has the highest probability of detecting the most errors?";
|
|
String testString2 = "Xf ile What subset of all possible test cases has the lowest probability of detecting the least errors?";
|
|
System.out.println("Constructors and comparison testing....");
|
|
CollationElementIterator iterator1 = rbCol.getCollationElementIterator(testString1);
|
|
CollationElementIterator iterator2 = rbCol.getCollationElementIterator(testString1);
|
|
CollationElementIterator iterator3 = rbCol.getCollationElementIterator(testString2);
|
|
int order1, order2, order3;
|
|
order1 = iterator1.next();
|
|
order2 = iterator2.next();
|
|
doAssert(order1 == order2, "The order result should be the same");
|
|
|
|
order3 = iterator3.next();
|
|
doAssert(CollationElementIterator.primaryOrder(order1)
|
|
== CollationElementIterator.primaryOrder(order3),
|
|
"The primary orders should be the same");
|
|
doAssert(CollationElementIterator.secondaryOrder(order1)
|
|
== CollationElementIterator.secondaryOrder(order3),
|
|
"The secondary orders should be the same");
|
|
doAssert(CollationElementIterator.tertiaryOrder(order1)
|
|
== CollationElementIterator.tertiaryOrder(order3),
|
|
"The tertiary orders should be the same");
|
|
|
|
order1 = iterator1.next();
|
|
order3 = iterator3.next();
|
|
doAssert(CollationElementIterator.primaryOrder(order1)
|
|
== CollationElementIterator.primaryOrder(order3),
|
|
"The primary orders should be identical");
|
|
doAssert(CollationElementIterator.tertiaryOrder(order1)
|
|
!= CollationElementIterator.tertiaryOrder(order3),
|
|
"The tertiary orders should be different");
|
|
|
|
order1 = iterator1.next();
|
|
order3 = iterator3.next();
|
|
doAssert(CollationElementIterator.secondaryOrder(order1)
|
|
!= CollationElementIterator.secondaryOrder(order3),
|
|
"The secondary orders should be different");
|
|
doAssert(order1 != CollationElementIterator.NULLORDER,
|
|
"Unexpected end of iterator reached");
|
|
|
|
iterator1.reset();
|
|
iterator2.reset();
|
|
iterator3.reset();
|
|
order1 = iterator1.next();
|
|
order2 = iterator2.next();
|
|
doAssert(order1 == order2, "The order result should be the same");
|
|
|
|
order3 = iterator3.next();
|
|
doAssert(CollationElementIterator.primaryOrder(order1)
|
|
== CollationElementIterator.primaryOrder(order3),
|
|
"The orders should be the same");
|
|
doAssert(CollationElementIterator.secondaryOrder(order1)
|
|
== CollationElementIterator.secondaryOrder(order3),
|
|
"The orders should be the same");
|
|
doAssert(CollationElementIterator.tertiaryOrder(order1)
|
|
== CollationElementIterator.tertiaryOrder(order3),
|
|
"The orders should be the same");
|
|
|
|
order1 = iterator1.next();
|
|
order2 = iterator2.next();
|
|
order3 = iterator3.next();
|
|
doAssert(CollationElementIterator.primaryOrder(order1)
|
|
== CollationElementIterator.primaryOrder(order3),
|
|
"The primary orders should be identical");
|
|
doAssert(CollationElementIterator.tertiaryOrder(order1)
|
|
!= CollationElementIterator.tertiaryOrder(order3),
|
|
"The tertiary orders should be different");
|
|
|
|
order1 = iterator1.next();
|
|
order3 = iterator3.next();
|
|
doAssert(CollationElementIterator.secondaryOrder(order1)
|
|
!= CollationElementIterator.secondaryOrder(order3),
|
|
"The secondary orders should be different");
|
|
doAssert(order1 != CollationElementIterator.NULLORDER, "Unexpected end of iterator reached");
|
|
System.out.println("testing CollationElementIterator ends...");
|
|
}
|
|
|
|
@Test
|
|
public final void TestGetAll()
|
|
{
|
|
Locale[] list = Collator.getAvailableLocales();
|
|
for (int i = 0; i < list.length; ++i) {
|
|
System.out.println("Locale name: ");
|
|
System.out.println(list[i].toString());
|
|
System.out.println(" , the display name is : ");
|
|
System.out.println(list[i].getDisplayName());
|
|
}
|
|
}
|
|
}
|