1/* 2 * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24/* 25 * @test 26 * @library /java/text/testlib 27 * @summary test Collation API 28 * @modules jdk.localedata 29 */ 30/* 31(C) Copyright Taligent, Inc. 1996 - All Rights Reserved 32(C) Copyright IBM Corp. 1996 - All Rights Reserved 33 34 The original version of this source code and documentation is copyrighted and 35owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These materials are 36provided under terms of a License Agreement between Taligent and Sun. This 37technology is protected by multiple US and International patents. This notice and 38attribution to Taligent may not be removed. 39 Taligent is a registered trademark of Taligent, Inc. 40*/ 41 42import java.util.Locale; 43import java.text.Collator; 44import java.text.RuleBasedCollator; 45import java.text.CollationKey; 46import java.text.CollationElementIterator; 47 48public class APITest extends CollatorTest { 49 50 public static void main(String[] args) throws Exception { 51 new APITest().run(args); 52 } 53 54 final void doAssert(boolean condition, String message) 55 { 56 if (!condition) { 57 err("ERROR: "); 58 errln(message); 59 } 60 } 61 62 public final void TestProperty( ) 63 { 64 Collator col = null; 65 try { 66 col = Collator.getInstance(Locale.ROOT); 67 logln("The property tests begin : "); 68 logln("Test ctors : "); 69 doAssert(col.compare("ab", "abc") < 0, "ab < abc comparison failed"); 70 doAssert(col.compare("ab", "AB") < 0, "ab < AB comparison failed"); 71 doAssert(col.compare("black-bird", "blackbird") > 0, "black-bird > blackbird comparison failed"); 72 doAssert(col.compare("black bird", "black-bird") < 0, "black bird < black-bird comparison failed"); 73 doAssert(col.compare("Hello", "hello") > 0, "Hello > hello comparison failed"); 74 75 logln("Test ctors ends."); 76 logln("testing Collator.getStrength() method ..."); 77 doAssert(col.getStrength() == Collator.TERTIARY, "collation object has the wrong strength"); 78 doAssert(col.getStrength() != Collator.PRIMARY, "collation object's strength is primary difference"); 79 80 logln("testing Collator.setStrength() method ..."); 81 col.setStrength(Collator.SECONDARY); 82 doAssert(col.getStrength() != Collator.TERTIARY, "collation object's strength is secondary difference"); 83 doAssert(col.getStrength() != Collator.PRIMARY, "collation object's strength is primary difference"); 84 doAssert(col.getStrength() == Collator.SECONDARY, "collation object has the wrong strength"); 85 86 logln("testing Collator.setDecomposition() method ..."); 87 col.setDecomposition(Collator.NO_DECOMPOSITION); 88 doAssert(col.getDecomposition() != Collator.FULL_DECOMPOSITION, "collation object's strength is secondary difference"); 89 doAssert(col.getDecomposition() != Collator.CANONICAL_DECOMPOSITION, "collation object's strength is primary difference"); 90 doAssert(col.getDecomposition() == Collator.NO_DECOMPOSITION, "collation object has the wrong strength"); 91 } catch (Exception foo) { 92 errln("Error : " + foo.getMessage()); 93 errln("Default Collator creation failed."); 94 } 95 logln("Default collation property test ended."); 96 logln("Collator.getRules() testing ..."); 97 doAssert(((RuleBasedCollator)col).getRules().length() != 0, "getRules() result incorrect" ); 98 logln("getRules tests end."); 99 try { 100 col = Collator.getInstance(Locale.FRENCH); 101 col.setStrength(Collator.PRIMARY); 102 logln("testing Collator.getStrength() method again ..."); 103 doAssert(col.getStrength() != Collator.TERTIARY, "collation object has the wrong strength"); 104 doAssert(col.getStrength() == Collator.PRIMARY, "collation object's strength is not primary difference"); 105 106 logln("testing French Collator.setStrength() method ..."); 107 col.setStrength(Collator.TERTIARY); 108 doAssert(col.getStrength() == Collator.TERTIARY, "collation object's strength is not tertiary difference"); 109 doAssert(col.getStrength() != Collator.PRIMARY, "collation object's strength is primary difference"); 110 doAssert(col.getStrength() != Collator.SECONDARY, "collation object's strength is secondary difference"); 111 112 } catch (Exception bar) { 113 errln("Error : " + bar.getMessage()); 114 errln("Creating French collation failed."); 115 } 116 117 logln("Create junk collation: "); 118 Locale abcd = new Locale("ab", "CD", ""); 119 Collator junk = null; 120 try { 121 junk = Collator.getInstance(abcd); 122 } catch (Exception err) { 123 errln("Error : " + err.getMessage()); 124 errln("Junk collation creation failed, should at least return the collator for the base bundle."); 125 } 126 try { 127 col = Collator.getInstance(Locale.ROOT); 128 doAssert(col.equals(junk), "The base bundle's collation should be returned."); 129 } catch (Exception exc) { 130 errln("Error : " + exc.getMessage()); 131 errln("Default collation comparison, caching not working."); 132 } 133 134 logln("Collator property test ended."); 135 } 136 137 public final void TestHashCode( ) 138 { 139 logln("hashCode tests begin."); 140 Collator col1 = null; 141 try { 142 col1 = Collator.getInstance(Locale.ROOT); 143 } catch (Exception foo) { 144 errln("Error : " + foo.getMessage()); 145 errln("Default collation creation failed."); 146 } 147 Collator col2 = null; 148 Locale dk = new Locale("da", "DK", ""); 149 try { 150 col2 = Collator.getInstance(dk); 151 } catch (Exception bar) { 152 errln("Error : " + bar.getMessage()); 153 errln("Danish collation creation failed."); 154 return; 155 } 156 Collator col3 = null; 157 try { 158 col3 = Collator.getInstance(Locale.ROOT); 159 } catch (Exception err) { 160 errln("Error : " + err.getMessage()); 161 errln("2nd default collation creation failed."); 162 } 163 logln("Collator.hashCode() testing ..."); 164 165 if (col1 != null) { 166 doAssert(col1.hashCode() != col2.hashCode(), "Hash test1 result incorrect"); 167 if (col3 != null) { 168 doAssert(col1.hashCode() == col3.hashCode(), "Hash result not equal"); 169 } 170 } 171 172 logln("hashCode tests end."); 173 } 174 175 //---------------------------------------------------------------------------- 176 // ctor -- Tests the constructor methods 177 // 178 public final void TestCollationKey( ) 179 { 180 logln("testing CollationKey begins..."); 181 Collator col = null; 182 try { 183 col = Collator.getInstance(Locale.ROOT); 184 } catch (Exception foo) { 185 errln("Error : " + foo.getMessage()); 186 errln("Default collation creation failed."); 187 } 188 if (col == null) { 189 return; 190 } 191 192 String test1 = "Abcda", test2 = "abcda"; 193 logln("Use tertiary comparison level testing ...."); 194 CollationKey sortk1 = col.getCollationKey(test1); 195 CollationKey sortk2 = col.getCollationKey(test2); 196 doAssert(sortk1.compareTo(sortk2) > 0, 197 "Result should be \"Abcda\" >>> \"abcda\""); 198 CollationKey sortk3 = sortk2; 199 CollationKey sortkNew = sortk1; 200 doAssert(sortk1 != sortk2, "The sort keys should be different"); 201 doAssert(sortk1.hashCode() != sortk2.hashCode(), "sort key hashCode() failed"); 202 doAssert(sortk2.compareTo(sortk3) == 0, "The sort keys should be the same"); 203 doAssert(sortk1 == sortkNew, "The sort keys assignment failed"); 204 doAssert(sortk1.hashCode() == sortkNew.hashCode(), "sort key hashCode() failed"); 205 doAssert(sortkNew != sortk3, "The sort keys should be different"); 206 doAssert(sortk1.compareTo(sortk3) > 0, "Result should be \"Abcda\" >>> \"abcda\""); 207 doAssert(sortk2.compareTo(sortk3) == 0, "Result should be \"abcda\" == \"abcda\""); 208 long cnt1, cnt2; 209 byte byteArray1[] = sortk1.toByteArray(); 210 byte byteArray2[] = sortk2.toByteArray(); 211 doAssert(byteArray1 != null && byteArray2 != null, "CollationKey.toByteArray failed."); 212 logln("testing sortkey ends..."); 213 } 214 //---------------------------------------------------------------------------- 215 // ctor -- Tests the constructor methods 216 // 217 public final void TestElemIter( ) 218 { 219 logln("testing sortkey begins..."); 220 Collator col = null; 221 try { 222 col = Collator.getInstance(); 223 } catch (Exception foo) { 224 errln("Error : " + foo.getMessage()); 225 errln("Default collation creation failed."); 226 } 227 RuleBasedCollator rbCol; 228 if (col instanceof RuleBasedCollator) { 229 rbCol = (RuleBasedCollator) col; 230 } else { 231 return; 232 } 233 String testString1 = "XFILE What subset of all possible test cases has the highest probability of detecting the most errors?"; 234 String testString2 = "Xf ile What subset of all possible test cases has the lowest probability of detecting the least errors?"; 235 logln("Constructors and comparison testing...."); 236 CollationElementIterator iterator1 = rbCol.getCollationElementIterator(testString1); 237 CollationElementIterator iterator2 = rbCol.getCollationElementIterator(testString1); 238 CollationElementIterator iterator3 = rbCol.getCollationElementIterator(testString2); 239 int order1, order2, order3; 240 order1 = iterator1.next(); 241 order2 = iterator2.next(); 242 doAssert(order1 == order2, "The order result should be the same"); 243 244 order3 = iterator3.next(); 245 doAssert(CollationElementIterator.primaryOrder(order1) 246 == CollationElementIterator.primaryOrder(order3), 247 "The primary orders should be the same"); 248 doAssert(CollationElementIterator.secondaryOrder(order1) 249 == CollationElementIterator.secondaryOrder(order3), 250 "The secondary orders should be the same"); 251 doAssert(CollationElementIterator.tertiaryOrder(order1) 252 == CollationElementIterator.tertiaryOrder(order3), 253 "The tertiary orders should be the same"); 254 255 order1 = iterator1.next(); 256 order3 = iterator3.next(); 257 doAssert(CollationElementIterator.primaryOrder(order1) 258 == CollationElementIterator.primaryOrder(order3), 259 "The primary orders should be identical"); 260 doAssert(CollationElementIterator.tertiaryOrder(order1) 261 != CollationElementIterator.tertiaryOrder(order3), 262 "The tertiary orders should be different"); 263 264 order1 = iterator1.next(); 265 order3 = iterator3.next(); 266 doAssert(CollationElementIterator.secondaryOrder(order1) 267 != CollationElementIterator.secondaryOrder(order3), 268 "The secondary orders should be different"); 269 doAssert(order1 != CollationElementIterator.NULLORDER, 270 "Unexpected end of iterator reached"); 271 272 iterator1.reset(); 273 iterator2.reset(); 274 iterator3.reset(); 275 order1 = iterator1.next(); 276 order2 = iterator2.next(); 277 doAssert(order1 == order2, "The order result should be the same"); 278 279 order3 = iterator3.next(); 280 doAssert(CollationElementIterator.primaryOrder(order1) 281 == CollationElementIterator.primaryOrder(order3), 282 "The orders should be the same"); 283 doAssert(CollationElementIterator.secondaryOrder(order1) 284 == CollationElementIterator.secondaryOrder(order3), 285 "The orders should be the same"); 286 doAssert(CollationElementIterator.tertiaryOrder(order1) 287 == CollationElementIterator.tertiaryOrder(order3), 288 "The orders should be the same"); 289 290 order1 = iterator1.next(); 291 order2 = iterator2.next(); 292 order3 = iterator3.next(); 293 doAssert(CollationElementIterator.primaryOrder(order1) 294 == CollationElementIterator.primaryOrder(order3), 295 "The primary orders should be identical"); 296 doAssert(CollationElementIterator.tertiaryOrder(order1) 297 != CollationElementIterator.tertiaryOrder(order3), 298 "The tertiary orders should be different"); 299 300 order1 = iterator1.next(); 301 order3 = iterator3.next(); 302 doAssert(CollationElementIterator.secondaryOrder(order1) 303 != CollationElementIterator.secondaryOrder(order3), 304 "The secondary orders should be different"); 305 doAssert(order1 != CollationElementIterator.NULLORDER, "Unexpected end of iterator reached"); 306 logln("testing CollationElementIterator ends..."); 307 } 308 309 public final void TestGetAll() 310 { 311 Locale[] list = Collator.getAvailableLocales(); 312 for (int i = 0; i < list.length; ++i) { 313 log("Locale name: "); 314 log(list[i].toString()); 315 log(" , the display name is : "); 316 logln(list[i].getDisplayName()); 317 } 318 } 319} 320