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 Dummy Collation 28 */ 29 30import java.text.Collator; 31import java.text.RuleBasedCollator; 32 33/* 34(C) Copyright Taligent, Inc. 1996 - All Rights Reserved 35(C) Copyright IBM Corp. 1996 - All Rights Reserved 36 37 The original version of this source code and documentation is copyrighted and 38owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These materials are 39provided under terms of a License Agreement between Taligent and Sun. This 40technology is protected by multiple US and International patents. This notice and 41attribution to Taligent may not be removed. 42 Taligent is a registered trademark of Taligent, Inc. 43*/ 44 45public class DummyTest extends CollatorTest { 46 47 public static void main(String[] args) throws Exception { 48 new DummyTest().run(args); 49 } 50 51 private static final String DEFAULTRULES = 52 "='\u200B'=\u200C=\u200D=\u200E=\u200F" 53 // Control Characters 54 + "=\u0000 =\u0001 =\u0002 =\u0003 =\u0004" //null, .. eot 55 + "=\u0005 =\u0006 =\u0007 =\u0008 ='\u0009'" //enq, ... 56 + "='\u000b' =\u000e" //vt,, so 57 + "=\u000f ='\u0010' =\u0011 =\u0012 =\u0013" //si, dle, dc1, dc2, dc3 58 + "=\u0014 =\u0015 =\u0016 =\u0017 =\u0018" //dc4, nak, syn, etb, can 59 + "=\u0019 =\u001a =\u001b =\u001c =\u001d" //em, sub, esc, fs, gs 60 + "=\u001e =\u001f =\u007f" //rs, us, del 61 //....then the C1 Latin 1 reserved control codes 62 + "=\u0080 =\u0081 =\u0082 =\u0083 =\u0084 =\u0085" 63 + "=\u0086 =\u0087 =\u0088 =\u0089 =\u008a =\u008b" 64 + "=\u008c =\u008d =\u008e =\u008f =\u0090 =\u0091" 65 + "=\u0092 =\u0093 =\u0094 =\u0095 =\u0096 =\u0097" 66 + "=\u0098 =\u0099 =\u009a =\u009b =\u009c =\u009d" 67 + "=\u009e =\u009f" 68 // IGNORE except for secondary, tertiary difference 69 // Spaces 70 + ";'\u0020';'\u00A0'" // spaces 71 + ";'\u2000';'\u2001';'\u2002';'\u2003';'\u2004'" // spaces 72 + ";'\u2005';'\u2006';'\u2007';'\u2008';'\u2009'" // spaces 73 + ";'\u200A';'\u3000';'\uFEFF'" // spaces 74 + ";'\r' ;'\t' ;'\n';'\f';'\u000b'" // whitespace 75 76 // Non-spacing accents 77 78 + ";\u0301" // non-spacing acute accent 79 + ";\u0300" // non-spacing grave accent 80 + ";\u0306" // non-spacing breve accent 81 + ";\u0302" // non-spacing circumflex accent 82 + ";\u030c" // non-spacing caron/hacek accent 83 + ";\u030a" // non-spacing ring above accent 84 + ";\u030d" // non-spacing vertical line above 85 + ";\u0308" // non-spacing diaeresis accent 86 + ";\u030b" // non-spacing double acute accent 87 + ";\u0303" // non-spacing tilde accent 88 + ";\u0307" // non-spacing dot above/overdot accent 89 + ";\u0304" // non-spacing macron accent 90 + ";\u0337" // non-spacing short slash overlay (overstruck diacritic) 91 + ";\u0327" // non-spacing cedilla accent 92 + ";\u0328" // non-spacing ogonek accent 93 + ";\u0323" // non-spacing dot-below/underdot accent 94 + ";\u0332" // non-spacing underscore/underline accent 95 // with the rest of the general diacritical marks in binary order 96 + ";\u0305" // non-spacing overscore/overline 97 + ";\u0309" // non-spacing hook above 98 + ";\u030e" // non-spacing double vertical line above 99 + ";\u030f" // non-spacing double grave 100 + ";\u0310" // non-spacing chandrabindu 101 + ";\u0311" // non-spacing inverted breve 102 + ";\u0312" // non-spacing turned comma above/cedilla above 103 + ";\u0313" // non-spacing comma above 104 + ";\u0314" // non-spacing reversed comma above 105 + ";\u0315" // non-spacing comma above right 106 + ";\u0316" // non-spacing grave below 107 + ";\u0317" // non-spacing acute below 108 + ";\u0318" // non-spacing left tack below 109 + ";\u0319" // non-spacing tack below 110 + ";\u031a" // non-spacing left angle above 111 + ";\u031b" // non-spacing horn 112 + ";\u031c" // non-spacing left half ring below 113 + ";\u031d" // non-spacing up tack below 114 + ";\u031e" // non-spacing down tack below 115 + ";\u031f" // non-spacing plus sign below 116 + ";\u0320" // non-spacing minus sign below 117 + ";\u0321" // non-spacing palatalized hook below 118 + ";\u0322" // non-spacing retroflex hook below 119 + ";\u0324" // non-spacing double dot below 120 + ";\u0325" // non-spacing ring below 121 + ";\u0326" // non-spacing comma below 122 + ";\u0329" // non-spacing vertical line below 123 + ";\u032a" // non-spacing bridge below 124 + ";\u032b" // non-spacing inverted double arch below 125 + ";\u032c" // non-spacing hacek below 126 + ";\u032d" // non-spacing circumflex below 127 + ";\u032e" // non-spacing breve below 128 + ";\u032f" // non-spacing inverted breve below 129 + ";\u0330" // non-spacing tilde below 130 + ";\u0331" // non-spacing macron below 131 + ";\u0333" // non-spacing double underscore 132 + ";\u0334" // non-spacing tilde overlay 133 + ";\u0335" // non-spacing short bar overlay 134 + ";\u0336" // non-spacing long bar overlay 135 + ";\u0338" // non-spacing long slash overlay 136 + ";\u0339" // non-spacing right half ring below 137 + ";\u033a" // non-spacing inverted bridge below 138 + ";\u033b" // non-spacing square below 139 + ";\u033c" // non-spacing seagull below 140 + ";\u033d" // non-spacing x above 141 + ";\u033e" // non-spacing vertical tilde 142 + ";\u033f" // non-spacing double overscore 143 + ";\u0340" // non-spacing grave tone mark 144 + ";\u0341" // non-spacing acute tone mark 145 + ";\u0342;\u0343;\u0344;\u0345;\u0360;\u0361" // newer 146 + ";\u0483;\u0484;\u0485;\u0486" // Cyrillic accents 147 148 + ";\u20D0;\u20D1;\u20D2" // symbol accents 149 + ";\u20D3;\u20D4;\u20D5" // symbol accents 150 + ";\u20D6;\u20D7;\u20D8" // symbol accents 151 + ";\u20D9;\u20DA;\u20DB" // symbol accents 152 + ";\u20DC;\u20DD;\u20DE" // symbol accents 153 + ";\u20DF;\u20E0;\u20E1" // symbol accents 154 155 + ",'\u002D';\u00AD" // dashes 156 + ";\u2010;\u2011;\u2012" // dashes 157 + ";\u2013;\u2014;\u2015" // dashes 158 + ";\u2212" // dashes 159 160 // other punctuation 161 162 + "<'\u005f'" // underline/underscore (spacing) 163 + "<\u00af" // overline or macron (spacing) 164// + "<\u00ad" // syllable hyphen (SHY) or soft hyphen 165 + "<'\u002c'" // comma (spacing) 166 + "<'\u003b'" // semicolon 167 + "<'\u003a'" // colon 168 + "<'\u0021'" // exclamation point 169 + "<\u00a1" // inverted exclamation point 170 + "<'\u003f'" // question mark 171 + "<\u00bf" // inverted question mark 172 + "<'\u002f'" // slash 173 + "<'\u002e'" // period/full stop 174 + "<\u00b4" // acute accent (spacing) 175 + "<'\u0060'" // grave accent (spacing) 176 + "<'\u005e'" // circumflex accent (spacing) 177 + "<\u00a8" // diaresis/umlaut accent (spacing) 178 + "<'\u007e'" // tilde accent (spacing) 179 + "<\u00b7" // middle dot (spacing) 180 + "<\u00b8" // cedilla accent (spacing) 181 + "<'\u0027'" // apostrophe 182 + "<'\"'" // quotation marks 183 + "<\u00ab" // left angle quotes 184 + "<\u00bb" // right angle quotes 185 + "<'\u0028'" // left parenthesis 186 + "<'\u0029'" // right parenthesis 187 + "<'\u005b'" // left bracket 188 + "<'\u005d'" // right bracket 189 + "<'\u007b'" // left brace 190 + "<'\u007d'" // right brace 191 + "<\u00a7" // section symbol 192 + "<\u00b6" // paragraph symbol 193 + "<\u00a9" // copyright symbol 194 + "<\u00ae" // registered trademark symbol 195 + "<'\u0040'" // at sign 196 + "<\u00a4" // international currency symbol 197 + "<\u00a2" // cent sign 198 + "<'\u0024'" // dollar sign 199 + "<\u00a3" // pound-sterling sign 200 + "<\u00a5" // yen sign 201 + "<'\u002a'" // asterisk 202 + "<'\\u005c'" // backslash 203 + "<'\u0026'" // ampersand 204 + "<'\u0023'" // number sign 205 + "<'\u0025'" // percent sign 206 + "<'\u002b'" // plus sign 207// + "<\u002d" // hyphen or minus sign 208 + "<\u00b1" // plus-or-minus sign 209 + "<\u00f7" // divide sign 210 + "<\u00d7" // multiply sign 211 + "<'\u003c'" // less-than sign 212 + "<'\u003d'" // equal sign 213 + "<'\u003e'" // greater-than sign 214 + "<\u00ac" // end of line symbol/logical NOT symbol 215 + "<'\u007c'" // vertical line/logical OR symbol 216 + "<\u00a6" // broken vertical line 217 + "<\u00b0" // degree symbol 218 + "<\u00b5" // micro symbol 219 220 // NUMERICS 221 222 + "<0<1<2<3<4<5<6<7<8<9" 223 + "<\u00bc<\u00bd<\u00be" // 1/4,1/2,3/4 fractions 224 225 // NON-IGNORABLES 226 + "<a,A" 227 + "<b,B" 228 + "<c,C" 229 + "<d,D" 230 + "<\u00F0,\u00D0" // eth 231 + "<e,E" 232 + "<f,F" 233 + "<g,G" 234 + "<h,H" 235 + "<i,I" 236 + "<j,J" 237 + "<k,K" 238 + "<l,L" 239 + "<m,M" 240 + "<n,N" 241 + "<o,O" 242 + "<p,P" 243 + "<q,Q" 244 + "<r,R" 245 + "<s, S & SS,\u00DF" // s-zet 246 + "<t,T" 247 + "&th, \u00FE & TH, \u00DE" // thorn 248 + "<u,U" 249 + "<v,V" 250 + "<w,W" 251 + "<x,X" 252 + "<y,Y" 253 + "<z,Z" 254 + "&AE,\u00C6" // ae & AE ligature 255 + "&AE,\u00E6" 256 + "&OE,\u0152" // oe & OE ligature 257 + "&OE,\u0153"; 258 259 /* 260 * Data for TestPrimary() 261 */ 262 private static final String[] primarySourceData = { 263 "p\u00EAche", 264 "abc", 265 "abc", 266 "abc", 267 "abc", 268 "abc", 269 "a\u00E6c", 270 "acHc", 271 "black" 272 }; 273 274 private static final String[] primaryTargetData = { 275 "p\u00E9ch\u00E9", 276 "abc", 277 "aBC", 278 "abch", 279 "abd", 280 "\u00E4bc", 281 "a\u00C6c", 282 "aCHc", 283 "black-bird" 284 }; 285 286 private static final int[] primaryResults = { 287 0, 0, 0, -1, -1, 0, 0, 0, -1 288 }; 289 290 /* 291 * Data for TestSecondary() 292 */ 293 private static final String[] secondarySourceData = { 294 "four", 295 "five", 296 "1", 297 "abc", 298 "abc", 299 "abcH", 300 "abc", 301 "acHc" 302 }; 303 304 private static final String[] secondaryTargetData = { 305 306 "4", 307 "5", 308 "one", 309 "abc", 310 "aBc", 311 "abch", 312 "abd", 313 "aCHc" 314 }; 315 316 private static final int[] secondaryResults = { 317 0, 0, 0, 0, 0, 0, -1, 0 318 }; 319 320 /* 321 * Data for TestTertiary() 322 */ 323 private static final String[] tertiarySourceData = { 324 "ab'c", 325 "co-op", 326 "ab", 327 "ampersad", 328 "all", 329 "four", 330 "five", 331 "1", 332 "1", 333 "1", 334 "2", 335 "2", 336 "Hello", 337 "a<b", 338 "a<b", 339 "acc", 340 "acHc" 341 }; 342 343 private static final String[] tertiaryTargetData = { 344 "abc", 345 "COOP", 346 "abc", 347 "&", 348 "&", 349 "4", 350 "5", 351 "one", 352 "nne", 353 "pne", 354 "two", 355 "uwo", 356 "hellO", 357 "a<=b", 358 "abc", 359 "aCHc", 360 "aCHc" 361 }; 362 363 private static final int[] tertiaryResults = { 364 -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 365 1, -1, 1, 1, -1, -1, -1 366 }; 367 368 369 private static final String[] testData = { 370 "a", 371 "A", 372 "\u00e4", 373 "\u00c4", 374 "ae", 375 "aE", 376 "Ae", 377 "AE", 378 "\u00e6", 379 "\u00c6", 380 "b", 381 "c", 382 "z" 383 }; 384 385 public void TestPrimary() { 386 doTest(getCollator(), Collator.PRIMARY, 387 primarySourceData, primaryTargetData, primaryResults); 388 } 389 390 public void TestSecondary() { 391 doTest(getCollator(), Collator.SECONDARY, 392 secondarySourceData, secondaryTargetData, secondaryResults); 393 } 394 395 public void TestTertiary() { 396 Collator col = getCollator(); 397 398 doTest(col, Collator.TERTIARY, 399 tertiarySourceData, tertiaryTargetData, tertiaryResults); 400 401 for (int i = 0; i < testData.length-1; i++) { 402 for (int j = i+1; j < testData.length; j++) { 403 doTest(col, testData[i], testData[j], -1); 404 } 405 } 406 } 407 408 private RuleBasedCollator myCollation = null; 409 private Collator getCollator() { 410 if (myCollation == null) { 411 try { 412 myCollation = new RuleBasedCollator 413 (DEFAULTRULES + "& C < ch, cH, Ch, CH & Five, 5 & Four, 4 & one, 1 & Ampersand; '&' & Two, 2 "); 414 } catch (Exception foo) { 415 errln("Collator creation failed."); 416 myCollation = (RuleBasedCollator)Collator.getInstance(); 417 } 418 } 419 return myCollation; 420 } 421} 422