17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2000-2014, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Port From: ICU4C v2.1 : collate/StringSearchTest 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Source File: $ICU4CRoot/source/test/intltest/srchtest.cpp 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.search; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport static com.ibm.icu.text.Collator.IDENTICAL; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport static com.ibm.icu.text.Collator.PRIMARY; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport static com.ibm.icu.text.Collator.QUATERNARY; 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport static com.ibm.icu.text.Collator.SECONDARY; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport static com.ibm.icu.text.Collator.TERTIARY; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport static com.ibm.icu.text.SearchIterator.ElementComparisonType.ANY_BASE_WEIGHT_IS_WILDCARD; 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport static com.ibm.icu.text.SearchIterator.ElementComparisonType.PATTERN_BASE_WEIGHT_IS_WILDCARD; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport static com.ibm.icu.text.SearchIterator.ElementComparisonType.STANDARD_ELEMENT_COMPARISON; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.StringCharacterIterator; 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.BreakIterator; 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.Collator; 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.RuleBasedCollator; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.SearchIterator; 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.SearchIterator.ElementComparisonType; 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.StringSearch; 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class SearchTest extends TestFmwk { 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //inner class 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static class SearchData { 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData(String text, String pattern, 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String coll, int strength, ElementComparisonType cmpType, String breaker, 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] offset, int[] size) { 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.text = text; 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.pattern = pattern; 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.collator = coll; 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.strength = strength; 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.cmpType = cmpType; 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.breaker = breaker; 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.offset = offset; 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.size = size; 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text; 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern; 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String collator; 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int strength; 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ElementComparisonType cmpType; 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String breaker; 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] offset; 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] size; 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator m_en_us_; 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator m_fr_fr_; 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator m_de_; 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator m_es_; 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator m_en_wordbreaker_; 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator m_en_characterbreaker_; 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Just calling SearchData constructor, to make the test data source code 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // nice and short 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static SearchData SD(String text, String pattern, String coll, int strength, 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ElementComparisonType cmpType, String breaker, int[] offset, int[] size) { 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return new SearchData(text, pattern, coll, strength, cmpType, breaker, offset, size); 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Just returning int[], to make the test data nice and short 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static int[] IA(int... elements) { 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return elements; 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static SearchData[] BASIC = { 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("xxxxxxxxxxxxxxxxxxxx", "fisher", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("silly spring string", "string", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(13, -1), IA(6)), 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("silly spring string string", "string", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(13, 20, -1), IA(6, 6)), 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("silly string spring string", "string", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(6, 20, -1), IA(6, 6)), 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("string spring string", "string", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 14, -1), IA(6, 6)), 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("Scott Ganyo", "c", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(1, -1), IA(1)), 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("Scott Ganyo", " ", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(5, -1), IA(1)), 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0300\u0325", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0300\u0325", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300b", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00c9", "e", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData BREAKITERATOREXACT[] = { 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("foxy fox", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(0, 5, -1), IA(3, 3)), 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("foxy fox", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(5, -1), IA(3)), 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("This is a toe T\u00F6ne", "toe", "de", PRIMARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(10, 14, -1), IA(3, 2)), 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("This is a toe T\u00F6ne", "toe", "de", PRIMARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(10, -1), IA(3)), 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("Channel, another channel, more channels, and one last Channel", "Channel", "es", TERTIARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(0, 54, -1), IA(7, 7)), 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* jitterbug 1745 */ 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("testing that \u00e9 does not match e", "e", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(1, 17, 30, -1), IA(1, 1, 1)), 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("testing that string ab\u00e9cd does not match e", "e", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(1, 28, 41, -1), IA(1, 1, 1)), 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00c9", "e", "fr", PRIMARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(0, -1), IA(1)), 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData BREAKITERATORCANONICAL[] = { 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("foxy fox", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(0, 5, -1), IA(3, 3)), 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("foxy fox", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(5, -1), IA(3)), 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("This is a toe T\u00F6ne", "toe", "de", PRIMARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(10, 14, -1), IA(3, 2)), 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("This is a toe T\u00F6ne", "toe", "de", PRIMARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(10, -1), IA(3)), 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("Channel, another channel, more channels, and one last Channel", "Channel", "es", TERTIARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(0, 54, -1), IA(7, 7)), 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* jitterbug 1745 */ 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("testing that \u00e9 does not match e", "e", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(1, 17, 30, -1), IA(1, 1, 1)), 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("testing that string ab\u00e9cd does not match e", "e", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(1, 28, 41, -1), IA(1, 1, 1)), 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00c9", "e", "fr", PRIMARY, STANDARD_ELEMENT_COMPARISON, "characterbreaker", IA(0, -1), IA(1)), 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData BASICCANONICAL[] = { 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("xxxxxxxxxxxxxxxxxxxx", "fisher", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("silly spring string", "string", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(13, -1), IA(6)), 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("silly spring string string", "string", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(13, 20, -1), IA(6, 6)), 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("silly string spring string", "string", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(6, 20, -1), IA(6, 6)), 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("string spring string", "string", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 14, -1), IA(6, 6)), 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("Scott Ganyo", "c", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(1, -1), IA(1)), 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("Scott Ganyo", " ", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(5, -1), IA(1)), 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0300\u0325", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0300\u0325", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300b", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325b", "\u0300b", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0325\u0300A\u0325\u0300", "\u0300A\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0325\u0300A\u0325\u0300", "\u0325A\u0325", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325b\u0300\u0325c \u0325b\u0300 \u0300b\u0325", "\u0300b\u0325", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00c4\u0323", "A\u0323\u0308", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(2)), 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0308\u0323", "\u0323\u0308", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(2)), 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData COLLATOR[] = { 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* english */ 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("fox fpx", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(3)), 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* tailored */ 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("fox fpx", "fox", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 4, -1), IA(3, 3)), 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String TESTCOLLATORRULE = "& o,O ; p,P"; 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String EXTRACOLLATIONRULE = " & ae ; \u00e4 & AE ; \u00c4 & oe ; \u00f6 & OE ; \u00d6 & ue ; \u00fc & UE ; \u00dc"; 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData COLLATORCANONICAL[] = { 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* english */ 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("fox fpx", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(3)), 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* tailored */ 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("fox fpx", "fox", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 4, -1), IA(3, 3)), 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData COMPOSITEBOUNDARIES[] = { 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u00C0C", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0A", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(1, -1), IA(1)), 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("B\u00C0", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0B", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* first one matches only because it's at the start of the text */ 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0300\u00C0", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* \\u0300 blocked by \\u0300 */ 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0\u0300", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* A + 030A + 0301 */ 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u01FA", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "A\u030A\u0301", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u030A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "A\u030A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u030AA", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u0301", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* blocked accent */ 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "A\u0301", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u0301A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u030A\u0301", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u01FA", "A\u030A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FAA", "\u0301A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73", "\u0F73", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73", "\u0F71", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73", "\u0F72", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73", "\u0F71\u0F72", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u0F73", "A\u0F71", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73A", "\u0F72A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA A\u0301\u030A A\u030A\u0301 A\u030A \u01FA", "A\u030A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(10, -1), IA(2)), 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData COMPOSITEBOUNDARIESCANONICAL[] = { 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u00C0C", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0A", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(1, -1), IA(1)), 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("B\u00C0", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0B", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* first one matches only because it's at the start of the text */ 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0300\u00C0", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* \u0300 blocked by \u0300 */ 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00C0\u0300", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* A + 030A + 0301 */ 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u01FA", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "A\u030A\u0301", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u030A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "A\u030A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u030AA", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u0301", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* blocked accent */ 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "A\u0301", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u0301A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA", "\u030A\u0301", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u01FA", "A\u030A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FAA", "\u0301A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73", "\u0F73", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73", "\u0F71", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73", "\u0F72", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73", "\u0F71\u0F72", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1)), 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u0F73", "A\u0F71", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0F73A", "\u0F72A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u01FA A\u0301\u030A A\u030A\u0301 A\u030A \u01FA", "A\u030A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(10, -1), IA(2)), 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData SUPPLEMENTARY[] = { 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("abc \uD800\uDC00 \uD800\uDC01 \uD801\uDC00 \uD800\uDC00abc abc\uD800\uDC00 \uD800\uD800\uDC00 \uD800\uDC00\uDC00", 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD800\uDC00", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(4, 13, 22, 26, 29, -1), IA(2, 2, 2, 2, 2)), 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and\uD834\uDDB9this sentence", "\uD834\uDDB9", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(2)), 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and \uD834\uDDB9 this sentence", " \uD834\uDDB9 ", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(4)), 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and-\uD834\uDDB9-this sentence", "-\uD834\uDDB9-", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(4)), 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and,\uD834\uDDB9,this sentence", ",\uD834\uDDB9,", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(4)), 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and?\uD834\uDDB9?this sentence", "?\uD834\uDDB9?", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(4)), 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String CONTRACTIONRULE = "&z = ab/c < AB < X\u0300 < ABC < X\u0300\u0315"; 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData CONTRACTION[] = { 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* common discontiguous */ 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u0300\u0315", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u0300\u0315", "\u0300\u0315", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* contraction prefix */ 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("AB\u0315C", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("AB\u0315C", "AB", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("AB\u0315C", "\u0315", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * discontiguous problem here for backwards iteration. accents not found because discontiguous stores all 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * information 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0300\u0319\u0315", "\u0319", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* ends not with a contraction character */ 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0315\u0300D", "\u0300\u0315", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0315\u0300D", "X\u0300\u0315", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(3)), 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0300\u031A\u0315D", "X\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* blocked discontiguous */ 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0300\u031A\u0315D", "\u031A\u0315D", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * "ab" generates a contraction that's an expansion. The "z" matches the first CE of the expansion but the 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * match fails because it ends in the middle of an expansion... 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("ab", "z", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData CONTRACTIONCANONICAL[] = { 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* common discontiguous */ 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u0300\u0315", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A\u0300\u0315", "\u0300\u0315", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* contraction prefix */ 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("AB\u0315C", "A", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("AB\u0315C", "AB", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("AB\u0315C", "\u0315", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * discontiguous problem here for backwards iteration. forwards gives 0, 4 but backwards give 1, 3 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * {"X\u0300\u0319\u0315", "\u0319", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, {0, -1), {4}), 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* ends not with a contraction character */ 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0315\u0300D", "\u0300\u0315", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0315\u0300D", "X\u0300\u0315", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(3)), 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0300\u031A\u0315D", "X\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* blocked discontiguous */ 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("X\u0300\u031A\u0315D", "\u031A\u0315D", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * "ab" generates a contraction that's an expansion. The "z" matches the first CE of the expansion but the 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * match fails because it ends in the middle of an expansion... 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("ab", "z", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(2)), 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData MATCH[] = { 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a busy bee is a very busy beeee", "bee", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(7, 26, -1), IA(3, 3)), 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 012345678901234567890123456789012345678901234567890 */ 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a busy bee is a very busy beeee with no bee life", "bee", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(7, 26, 40, -1), IA(3, 3, 3)), 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String IGNORABLERULE = "&a = \u0300"; 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData IGNORABLE[] = { 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * This isn't much of a test when matches have to be on grapheme boundiaries. The match at 0 only works because it's 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * at the start of the text. 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0300\u0315 \u0300\u0315 ", "\u0300", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(2)), 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData DIACTRICMATCH[] = { 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0061\u0061\u00E1", "\u0061\u00E1", null, SECONDARY, STANDARD_ELEMENT_COMPARISON, null, IA(1, -1), IA(2)), 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0020\u00C2\u0303\u0020\u0041\u0061\u1EAA\u0041\u0302\u0303\u00C2\u0303\u1EAB\u0061\u0302\u0303\u00E2\u0303\uD806\uDC01\u0300\u0020", "\u00C2\u0303", 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(1, 4, 5, 6, 7, 10, 12, 13, 16, -1), IA(2, 1, 1, 1, 3, 2, 1, 3, 2)), 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u03BA\u03B1\u03B9\u0300\u0020\u03BA\u03B1\u1F76", "\u03BA\u03B1\u03B9", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 5, -1), IA(4, 3)), 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData NORMCANONICAL[] = { 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0300\u0325", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u0300\u0325", "\u0325", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0325\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0300\u0325", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0325", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData NORMEXACT[] = { 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "a\u0325\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(3)), 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData NONNORMEXACT[] = { 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("a\u0300\u0325", "\u0325\u0300", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData OVERLAP[] = { 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("abababab", "abab", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 2, 4, -1), IA(4, 4, 4)), 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData NONOVERLAP[] = { 3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("abababab", "abab", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 4, -1), IA(4, 4)), 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData OVERLAPCANONICAL[] = { 3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("abababab", "abab", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 2, 4, -1), IA(4, 4, 4)), 3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData NONOVERLAPCANONICAL[] = { 3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("abababab", "abab", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 4, -1), IA(4, 4)), 3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData PATTERNCANONICAL[] = { 3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("The quick brown fox jumps over the lazy foxes", "the", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 31, -1), IA(3, 3)), 3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("The quick brown fox jumps over the lazy foxes", "fox", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(16, 40, -1), IA(3, 3)), 3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData PATTERN[] = { 3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("The quick brown fox jumps over the lazy foxes", "the", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 31, -1), IA(3, 3)), 3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("The quick brown fox jumps over the lazy foxes", "fox", null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(16, 40, -1), IA(3, 3)), 3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String PECHE_WITH_ACCENTS = "un p\u00E9ch\u00E9, " 3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "\u00E7a p\u00E8che par, " 3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "p\u00E9cher, " 3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "une p\u00EAche, " 3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "un p\u00EAcher, " 3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "j\u2019ai p\u00EAch\u00E9, " 3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "un p\u00E9cheur, " 4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "\u201Cp\u00E9che\u201D, " 4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "decomp peche\u0301, " 4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "base peche"; 4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // in the above, the interesting words and their offsets are: 4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 3 pe<301>che<301> 4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 13 pe<300>che 4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 24 pe<301>cher 4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 36 pe<302>che 4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 46 pe<302>cher 4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 59 pe<302>che<301> 4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 69 pe<301>cheur 4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 79 pe<301>che 4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 94 peche<+301> 4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 107 peche 4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData STRENGTH[] = { 4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 012345678901234567890123456789012345678901234567890123456789 */ 4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("The quick brown fox jumps over the lazy foxes", "fox", "en", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(16, 40, -1), IA(3, 3)), 4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("The quick brown fox jumps over the lazy foxes", "fox", "en", PRIMARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(16, -1), IA(3)), 4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("blackbirds Pat p\u00E9ch\u00E9 p\u00EAche p\u00E9cher p\u00EAcher Tod T\u00F6ne black Tofu blackbirds Ton PAT toehold blackbird black-bird pat toe big Toe", 4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "peche", "fr", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(15, 21, 27, 34, -1), IA(5, 5, 5, 5)), 4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("This is a toe T\u00F6ne", "toe", "de", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(10, 14, -1), IA(3, 2)), 4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A channel, another CHANNEL, more Channels, and one last channel...", "channel", "es", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(2, 19, 33, 56, -1), IA(7, 7, 7, 7)), 4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("\u00c0 should match but not A", "A\u0300", "en", IDENTICAL, STANDARD_ELEMENT_COMPARISON, null, IA(0, -1), IA(1, 0)), 4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* some tests for modified element comparison, ticket #7093 */ 4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "en", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 5, 5, 5, 6, 5)), 4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "en", PRIMARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(3, 13, 36, 59, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 6, 5)), 4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "en", SECONDARY, STANDARD_ELEMENT_COMPARISON, null, IA(107, -1), IA(5)), 4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "en", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 5, 5, 5, 6, 5)), 4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "en", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 13, 36, 59, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 6, 5)), 4317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "en", SECONDARY, STANDARD_ELEMENT_COMPARISON, null, IA(24, 69, 79, -1), IA(5, 5, 5)), 4327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "en", SECONDARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(79, -1), IA(5)), 4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "en", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 24, 69, 79, -1), IA(5, 5, 5, 5)), 4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "en", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 79, -1), IA(5, 5)), 4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "en", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 24, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 6, 5)), 4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "en", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 79, 94, 107, -1), IA(5, 5, 6, 5)), 4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "pech\u00E9", "en", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 59, 94, -1), IA(5, 5, 6)), 4387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "pech\u00E9", "en", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 59, 94, -1), IA(5, 5, 6)), 4397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "pech\u00E9", "en", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 5, 5, 5, 6, 5)), 4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "pech\u00E9", "en", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 13, 36, 59, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 6, 5)), 4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche\u0301", "en", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 59, 94, -1), IA(5, 5, 6)), 4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche\u0301", "en", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 59, 94, -1), IA(5, 5, 6)), 4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche\u0301", "en", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 5, 5, 5, 6, 5)), 4447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche\u0301", "en", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 13, 36, 59, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 6, 5)), 4457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* more tests for modified element comparison (with fr), ticket #7093 */ 4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "fr", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 5, 5, 5, 6, 5)), 4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "fr", PRIMARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(3, 13, 36, 59, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 6, 5)), 4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "fr", SECONDARY, STANDARD_ELEMENT_COMPARISON, null, IA(107, -1), IA(5)), 4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "fr", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 5, 5, 5, 6, 5)), 4517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche", "fr", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 13, 36, 59, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 6, 5)), 4527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "fr", SECONDARY, STANDARD_ELEMENT_COMPARISON, null, IA(24, 69, 79, -1), IA(5, 5, 5)), 4537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "fr", SECONDARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(79, -1), IA(5)), 4547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "fr", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 24, 69, 79, -1), IA(5, 5, 5, 5)), 4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "fr", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 79, -1), IA(5, 5)), 4567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "fr", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 24, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 6, 5)), 4577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "p\u00E9che", "fr", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 79, 94, 107, -1), IA(5, 5, 6, 5)), 4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "pech\u00E9", "fr", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 59, 94, -1), IA(5, 5, 6)), 4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "pech\u00E9", "fr", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 59, 94, -1), IA(5, 5, 6)), 4607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "pech\u00E9", "fr", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 5, 5, 5, 6, 5)), 4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "pech\u00E9", "fr", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 13, 36, 59, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 6, 5)), 4627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche\u0301", "fr", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 59, 94, -1), IA(5, 5, 6)), 4637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche\u0301", "fr", SECONDARY, PATTERN_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 59, 94, -1), IA(5, 5, 6)), 4647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche\u0301", "fr", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, null, IA(3, 13, 24, 36, 46, 59, 69, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 5, 5, 5, 6, 5)), 4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(PECHE_WITH_ACCENTS, "peche\u0301", "fr", SECONDARY, ANY_BASE_WEIGHT_IS_WILDCARD, "wordbreaker", IA(3, 13, 36, 59, 79, 94, 107, -1), IA(5, 5, 5, 5, 5, 6, 5)), 4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 4687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData STRENGTHCANONICAL[] = { 4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 012345678901234567890123456789012345678901234567890123456789 */ 4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("The quick brown fox jumps over the lazy foxes", "fox", "en", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(16, 40, -1), IA(3, 3)), 4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("The quick brown fox jumps over the lazy foxes", "fox", "en", PRIMARY, STANDARD_ELEMENT_COMPARISON, "wordbreaker", IA(16, -1), IA(3)), 4737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("blackbirds Pat p\u00E9ch\u00E9 p\u00EAche p\u00E9cher p\u00EAcher Tod T\u00F6ne black Tofu blackbirds Ton PAT toehold blackbird black-bird pat toe big Toe", 4747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "peche", "fr", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(15, 21, 27, 34, -1), IA(5, 5, 5, 5)), 4757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("This is a toe T\u00F6ne", "toe", "de", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(10, 14, -1), IA(3, 2)), 4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("A channel, another CHANNEL, more Channels, and one last channel...", "channel", "es", PRIMARY, STANDARD_ELEMENT_COMPARISON, null, IA(2, 19, 33, 56, -1), IA(7, 7, 7, 7)), 4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData SUPPLEMENTARYCANONICAL[] = { 4807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 012345678901234567890123456789012345678901234567890012345678901234567890123456789012345678901234567890012345678901234567890123456789 */ 4817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("abc \uD800\uDC00 \uD800\uDC01 \uD801\uDC00 \uD800\uDC00abc abc\uD800\uDC00 \uD800\uD800\uDC00 \uD800\uDC00\uDC00", "\uD800\uDC00", 4827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(4, 13, 22, 26, 29, -1), IA(2, 2, 2, 2, 2)), 4837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and\uD834\uDDB9this sentence", "\uD834\uDDB9", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(2)), 4847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and \uD834\uDDB9 this sentence", " \uD834\uDDB9 ", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(4)), 4857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and-\uD834\uDDB9-this sentence", "-\uD834\uDDB9-", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(4)), 4867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and,\uD834\uDDB9,this sentence", ",\uD834\uDDB9,", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(4)), 4877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("and?\uD834\uDDB9?this sentence", "?\uD834\uDDB9?", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(3, -1), IA(4)), 4887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 4897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static SearchData VARIABLE[] = { 4917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 012345678901234567890123456789012345678901234567890123456789 */ 4927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("blackbirds black blackbirds blackbird black-bird", "blackbird", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(0, 17, 28, 38, -1), IA(9, 9, 9, 10)), 4937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 4957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * to see that it doesn't go into an infinite loop if the start of text is a ignorable character 4967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 4977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(" on", "go", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 4987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("abcdefghijklmnopqrstuvwxyz", " ", 4997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert null, PRIMARY, STANDARD_ELEMENT_COMPARISON, null, 5007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert IA(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1), 5017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert IA(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), 5027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* testing tightest match */ 5047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(" abc a bc ab c a bc ab c", "abc", null, QUATERNARY, STANDARD_ELEMENT_COMPARISON, null, IA(1, -1), IA(3)), 5057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 012345678901234567890123456789012345678901234567890123456789 */ 5067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(" abc a bc ab c a bc ab c", "abc", null, SECONDARY, STANDARD_ELEMENT_COMPARISON, null, IA(1, 6, 13, 21, 31, -1), IA(3, 4, 4, 5, 5)), 5077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* totally ignorable text */ 5097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD(" ---------------", "abc", null, SECONDARY, STANDARD_ELEMENT_COMPARISON, null, IA(-1), IA(0)), 5107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 5117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static SearchData TEXTCANONICAL[] = { 5137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("the foxy brown fox", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(4, 15, -1), IA(3, 3)), 5147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("the quick brown fox", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(16, -1), IA(3)), 5157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 5167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 5187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Constructor 5197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 5207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public SearchTest() 5217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 5227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert protected void init()throws Exception{ 5267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_ = (RuleBasedCollator)Collator.getInstance(Locale.US); 5277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_fr_fr_ = (RuleBasedCollator)Collator.getInstance(Locale.FRANCE); 5287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_de_ = (RuleBasedCollator)Collator.getInstance(new Locale("de", "DE")); 5297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_es_ = (RuleBasedCollator)Collator.getInstance(new Locale("es", "ES")); 5307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_wordbreaker_ = BreakIterator.getWordInstance(); 5317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_characterbreaker_ = BreakIterator.getCharacterInstance(); 5327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rules = m_de_.getRules() + EXTRACOLLATIONRULE; 5337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_de_ = new RuleBasedCollator(rules); 5347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert rules = m_es_.getRules() + EXTRACOLLATIONRULE; 5357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_es_ = new RuleBasedCollator(rules); 5367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) throws Exception { 5397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new SearchTest().run(args); 5407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new SearchTest().TestContraction(); 5417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator getCollator(String collator) { 5447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (collator == null) { 5457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return m_en_us_; 5467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } if (collator.equals("fr")) { 5477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return m_fr_fr_; 5487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (collator.equals("de")) { 5497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return m_de_; 5507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (collator.equals("es")) { 5517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return m_es_; 5527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 5537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return m_en_us_; 5547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator getBreakIterator(String breaker) { 5587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (breaker == null) { 5597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return null; 5607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } if (breaker.equals("wordbreaker")) { 5617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return m_en_wordbreaker_; 5627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 5637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return m_en_characterbreaker_; 5647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean assertCanonicalEqual(SearchData search) { 5687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Collator collator = getCollator(search.collator); 5697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator breaker = getBreakIterator(search.breaker); 5707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch; 5717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = search.text; 5737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = search.pattern; 5747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (breaker != null) { 5767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker.setText(text); 5777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(search.strength); 5797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); 5807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 5817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), (RuleBasedCollator)collator, breaker); 5827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setElementComparisonType(search.cmpType); 5837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 5847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 5857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search" + e.getMessage()); 5867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 5877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 5907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 5917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setDecomposition(Collator.NO_DECOMPOSITION); 5927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 5937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 5957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setDecomposition(Collator.NO_DECOMPOSITION); 5967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return true; 5977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean assertEqual(SearchData search) { 6007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Collator collator = getCollator(search.collator); 6017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator breaker = getBreakIterator(search.breaker); 6027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch; 6037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = search.text; 6057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = search.pattern; 6067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (breaker != null) { 6087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker.setText(text); 6097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(search.strength); 6117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 6127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), (RuleBasedCollator)collator, breaker); 6137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setElementComparisonType(search.cmpType); 6147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 6157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search " + e.getMessage()); 6167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 6177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 6207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 6217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 6227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 6247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return true; 6257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean assertEqualWithAttribute(SearchData search, boolean canonical, boolean overlap) { 6287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Collator collator = getCollator(search.collator); 6297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator breaker = getBreakIterator(search.breaker); 6307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch; 6317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = search.text; 6337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = search.pattern; 6347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (breaker != null) { 6367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker.setText(text); 6377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(search.strength); 6397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 6407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), (RuleBasedCollator)collator, breaker); 6417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(canonical); 6427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setOverlapping(overlap); 6437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setElementComparisonType(search.cmpType); 6447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 6457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search " + e.getMessage()); 6467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 6477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 6507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 6517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 6527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 6547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return true; 6557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean assertEqualWithStringSearch(StringSearch strsrch, SearchData search) { 6587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count = 0; 6597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchindex = search.offset[count]; 6607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String matchtext; 6617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getMatchStart() != SearchIterator.DONE || 6637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getMatchLength() != 0) { 6647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error with the initialization of match start and length"); 6657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // start of following matches 6677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (matchindex >= 0) { 6687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchlength = search.size[count]; 6697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.next(); 6707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //int x = strsrch.getMatchStart(); 6717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchindex != strsrch.getMatchStart() || 6727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchlength != strsrch.getMatchLength()) { 6737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + search.text); 6747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Searching forward for pattern: " + strsrch.getPattern()); 6757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Expected offset,len " + matchindex + ", " + matchlength + "; got " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 6767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 6777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert count ++; 6797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchtext = strsrch.getMatchedText(); 6817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String targetText = search.text; 6827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchlength > 0 && 6837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert targetText.substring(matchindex, matchindex + matchlength).compareTo(matchtext) != 0) { 6847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting following matched text"); 6857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchindex = search.offset[count]; 6887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.next(); 6907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getMatchStart() != SearchIterator.DONE || 6917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getMatchLength() != 0) { 6927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + search.text); 6937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Searching forward for pattern: " + strsrch.getPattern()); 6947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Expected DONE offset,len -1, 0; got " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 6957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 6967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // start of preceding matches 6987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert count = count == 0 ? 0 : count - 1; 6997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchindex = search.offset[count]; 7007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (matchindex >= 0) { 7017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchlength = search.size[count]; 7027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.previous(); 7037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchindex != strsrch.getMatchStart() || 7047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchlength != strsrch.getMatchLength()) { 7057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + search.text); 7067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Searching backward for pattern: " + strsrch.getPattern()); 7077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Expected offset,len " + matchindex + ", " + matchlength + "; got " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 7087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 7097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchtext = strsrch.getMatchedText(); 7127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String targetText = search.text; 7137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchlength > 0 && 7147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert targetText.substring(matchindex, matchindex + matchlength).compareTo(matchtext) != 0) { 7157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting following matched text"); 7167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchindex = count > 0 ? search.offset[count - 1] : -1; 7197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert count --; 7207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.previous(); 7227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getMatchStart() != SearchIterator.DONE || 7237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getMatchLength() != 0) { 7247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + search.text); 7257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Searching backward for pattern: " + strsrch.getPattern()); 7267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Expected DONE offset,len -1, 0; got " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 7277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 7287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return true; 7307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestConstructor() 7337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 7347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "pattern"; 7357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = "text"; 7367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringCharacterIterator textiter = new StringCharacterIterator(text); 7377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Collator defaultcollator = Collator.getInstance(); 7387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator breaker = BreakIterator.getCharacterInstance(); 7397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker.setText(text); 7407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch search = new StringSearch(pattern, text); 7417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!search.getPattern().equals(pattern) 7427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getTarget().equals(textiter) 7437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getCollator().equals(defaultcollator) 7447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*|| !search.getBreakIterator().equals(breaker)*/) { 7457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringSearch(String, String) error"); 7467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search = new StringSearch(pattern, textiter, m_fr_fr_); 7487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!search.getPattern().equals(pattern) 7497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getTarget().equals(textiter) 7507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getCollator().equals(m_fr_fr_) 7517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*|| !search.getBreakIterator().equals(breaker)*/) { 7527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringSearch(String, StringCharacterIterator, " 7537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "RuleBasedCollator) error"); 7547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale de = new Locale("de", "DE"); 7567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker = BreakIterator.getCharacterInstance(de); 7577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker.setText(text); 7587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search = new StringSearch(pattern, textiter, de); 7597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!search.getPattern().equals(pattern) 7607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getTarget().equals(textiter) 7617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getCollator().equals(Collator.getInstance(de)) 7627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*|| !search.getBreakIterator().equals(breaker)*/) { 7637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringSearch(String, StringCharacterIterator, Locale) " 7647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "error"); 7657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search = new StringSearch(pattern, textiter, m_fr_fr_, 7687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_wordbreaker_); 7697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!search.getPattern().equals(pattern) 7707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getTarget().equals(textiter) 7717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getCollator().equals(m_fr_fr_) 7727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !search.getBreakIterator().equals(m_en_wordbreaker_)) { 7737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringSearch(String, StringCharacterIterator, Locale) " 7747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "error"); 7757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestBasic() { 7797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < BASIC.length; count++) { 7807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(BASIC[count])) { 7817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 7827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestBreakIterator() { 7877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = BREAKITERATOREXACT[0].text; 7897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = BREAKITERATOREXACT[0].pattern; 7907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 7917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 7927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 7937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 7947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search"); 7957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 7967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setBreakIterator(null); 7997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getBreakIterator() != null) { 8007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error usearch_getBreakIterator returned wrong object"); 8017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setBreakIterator(m_en_characterbreaker_); 8047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.getBreakIterator().equals(m_en_characterbreaker_)) { 8057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error usearch_getBreakIterator returned wrong object"); 8067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setBreakIterator(m_en_wordbreaker_); 8097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.getBreakIterator().equals(m_en_wordbreaker_)) { 8107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error usearch_getBreakIterator returned wrong object"); 8117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count = 0; 8147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (count < 4) { 8157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // special purposes for tests numbers 0-3 8167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData search = BREAKITERATOREXACT[count]; 8177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator collator = getCollator(search.collator); 8187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator breaker = getBreakIterator(search.breaker); 8197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //StringSearch strsrch; 8207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = search.text; 8227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = search.pattern; 8237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (breaker != null) { 8247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker.setText(text); 8257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(search.strength); 8277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), collator, breaker); 8287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getBreakIterator() != breaker) { 8297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting break iterator"); 8307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 8327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 8337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search = BREAKITERATOREXACT[count + 1]; 8357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker = getBreakIterator(search.breaker); 8367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (breaker != null) { 8377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker.setText(text); 8387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setBreakIterator(breaker); 8407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getBreakIterator() != breaker) { 8417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting break iterator"); 8427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 8447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 8457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 8467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert count += 2; 8487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < BREAKITERATOREXACT.length; count++) { 8507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(BREAKITERATOREXACT[count])) { 8517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 8527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestBreakIteratorCanonical() { 8577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count = 0; 8587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (count < 4) { 8597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // special purposes for tests numbers 0-3 8607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData search = BREAKITERATORCANONICAL[count]; 8617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = search.text; 8637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = search.pattern; 8647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator collator = getCollator(search.collator); 8657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(search.strength); 8667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator breaker = getBreakIterator(search.breaker); 8687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 8697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 8707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), collator, breaker); 8717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 8727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error creating string search data"); 8737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 8747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 8767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.getBreakIterator().equals(breaker)) { 8777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting break iterator"); 8787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 8797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 8817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 8827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 8837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search = BREAKITERATOREXACT[count + 1]; 8857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker = getBreakIterator(search.breaker); 8867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert breaker.setText(strsrch.getTarget()); 8877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setBreakIterator(breaker); 8887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.getBreakIterator().equals(breaker)) { 8897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting break iterator"); 8907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 8917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 8937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 8947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 8957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 8967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 8977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert count += 2; 8997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < BREAKITERATORCANONICAL.length; count++) { 9027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(BREAKITERATORCANONICAL[count])) { 9037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 9047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 9057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCanonical() { 9107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < BASICCANONICAL.length; count++) { 9117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertCanonicalEqual(BASICCANONICAL[count])) { 9127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 9137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCollator() { 9187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test collator that thinks "o" and "p" are the same thing 9197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = COLLATOR[0].text; 9207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = COLLATOR[0].pattern; 9217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 9227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 9237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 9247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 9257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search "); 9267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 9277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, COLLATOR[0])) { 9297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 9307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rules = TESTCOLLATORRULE; 9327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator tailored = null; 9337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 9347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tailored = new RuleBasedCollator(rules); 9357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tailored.setStrength(COLLATOR[1].strength); 9367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 9377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening rule based collator "); 9387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 9397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCollator(tailored); 9427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.getCollator().equals(tailored)) { 9437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting rule based collator"); 9447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 9467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, COLLATOR[1])) { 9477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 9487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCollator(m_en_us_); 9507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 9517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.getCollator().equals(m_en_us_)) { 9527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting rule based collator"); 9537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, COLLATOR[0])) { 9557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error searching collator test"); 9567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCollatorCanonical() { 9607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* test collator that thinks "o" and "p" are the same thing */ 9617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = COLLATORCANONICAL[0].text; 9627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = COLLATORCANONICAL[0].pattern; 9637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 9657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 9667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 9677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 9687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 9697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search "); 9707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, COLLATORCANONICAL[0])) { 9737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 9747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rules = TESTCOLLATORRULE; 9777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator tailored = null; 9787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 9797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tailored = new RuleBasedCollator(rules); 9807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tailored.setStrength(COLLATORCANONICAL[1].strength); 9817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tailored.setDecomposition(Collator.CANONICAL_DECOMPOSITION); 9827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 9837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening rule based collator "); 9847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCollator(tailored); 9877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.getCollator().equals(tailored)) { 9887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting rule based collator"); 9897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 9917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 9927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, COLLATORCANONICAL[1])) { 9937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("COLLATORCANONICAL[1] failed"); // Error should already be reported. 9947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCollator(m_en_us_); 9967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 9977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.getCollator().equals(m_en_us_)) { 9987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting rule based collator"); 9997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, COLLATORCANONICAL[0])) { 10017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("COLLATORCANONICAL[0] failed"); // Error should already be reported. 10027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCompositeBoundaries() { 10067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < COMPOSITEBOUNDARIES.length; count++) { 10077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // logln("composite " + count); 10087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(COMPOSITEBOUNDARIES[count])) { 10097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 10107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCompositeBoundariesCanonical() { 10157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < COMPOSITEBOUNDARIESCANONICAL.length; count++) { 10167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // logln("composite " + count); 10177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertCanonicalEqual(COMPOSITEBOUNDARIESCANONICAL[count])) { 10187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 10197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestContraction() { 10247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rules = CONTRACTIONRULE; 10257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator collator = null; 10267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 10277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator = new RuleBasedCollator(rules); 10287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 10297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); 10307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 10317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening collator "); 10327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = "text"; 10347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "pattern"; 10357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 10367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 10377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), collator, null); 10387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 10397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search "); 10407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count< CONTRACTION.length; count++) { 10437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = CONTRACTION[count].text; 10447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = CONTRACTION[count].pattern; 10457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(new StringCharacterIterator(text)); 10467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(pattern); 10477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, CONTRACTION[count])) { 10487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 10497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestContractionCanonical() { 10547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rules = CONTRACTIONRULE; 10557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator collator = null; 10567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 10577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator = new RuleBasedCollator(rules); 10587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(TERTIARY); 10597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); 10607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 10617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening collator "); 10627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = "text"; 10647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "pattern"; 10657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 10667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 10677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), collator, null); 10687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 10697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 10707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search"); 10717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < CONTRACTIONCANONICAL.length; count++) { 10747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = CONTRACTIONCANONICAL[count].text; 10757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = CONTRACTIONCANONICAL[count].pattern; 10767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(new StringCharacterIterator(text)); 10777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(pattern); 10787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, CONTRACTIONCANONICAL[count])) { 10797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 10807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetMatch() { 10857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData search = MATCH[0]; 10867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = search.text; 10877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = search.pattern; 10887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 10907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 10917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 10927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 10937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search "); 10947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 10957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count = 0; 10987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchindex = search.offset[count]; 10997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String matchtext; 11007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (matchindex >= 0) { 11017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchlength = search.size[count]; 11027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.next(); 11037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchindex != strsrch.getMatchStart() || 11047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchlength != strsrch.getMatchLength()) { 11057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + search.text); 11067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Pattern: " + strsrch.getPattern()); 11077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error match found at " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 11087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 11097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert count++; 11117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchtext = strsrch.getMatchedText(); 11137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchtext.length() != matchlength){ 11147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting match text"); 11157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchindex = search.offset[count]; 11177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.next(); 11197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getMatchStart() != StringSearch.DONE || 11207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getMatchLength() != 0) { 11217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error end of match not found"); 11227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchtext = strsrch.getMatchedText(); 11247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchtext != null) { 11257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting null matches"); 11267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetSetAttribute() { 11307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "pattern"; 11317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = "text"; 11327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 11337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 11347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 11357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 11367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening search"); 11377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 11387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.isOverlapping()) { 11417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error default overlaping should be false"); 11427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setOverlapping(true); 11447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.isOverlapping()) { 11457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting overlap true"); 11467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setOverlapping(false); 11487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.isOverlapping()) { 11497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting overlap false"); 11507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 11537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.isCanonical()) { 11547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting canonical match true"); 11557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(false); 11577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.isCanonical()) { 11587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting canonical match false"); 11597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getElementComparisonType() != STANDARD_ELEMENT_COMPARISON) { 11627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error default element comparison type should be STANDARD_ELEMENT_COMPARISON"); 11637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setElementComparisonType(ElementComparisonType.PATTERN_BASE_WEIGHT_IS_WILDCARD); 11657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getElementComparisonType() != ElementComparisonType.PATTERN_BASE_WEIGHT_IS_WILDCARD) { 11667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting element comparison type PATTERN_BASE_WEIGHT_IS_WILDCARD"); 11677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetSetOffset() { 11717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "1234567890123456"; 11727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = "12345678901234567890123456789012"; 11737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 11747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 11757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 11767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 11777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening search"); 11787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 11807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* testing out of bounds error */ 11837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 11847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setIndex(-1); 11857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error expecting set offset error"); 11867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IndexOutOfBoundsException e) { 11877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: strsrch.setIndex(-1) failed as expected"); 11887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 11917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setIndex(128); 11927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error expecting set offset error"); 11937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IndexOutOfBoundsException e) { 11947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: strsrch.setIndex(128) failed as expected"); 11957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int index = 0; index < BASIC.length; index++) { 11987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData search = BASIC[index]; 11997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text =search.text; 12017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = search.pattern; 12027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(new StringCharacterIterator(text)); 12037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(pattern); 12047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getCollator().setStrength(search.strength); 12057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 12067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count = 0; 12087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchindex = search.offset[count]; 12097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (matchindex >= 0) { 12117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchlength = search.size[count]; 12127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.next(); 12137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchindex != strsrch.getMatchStart() || 12147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchlength != strsrch.getMatchLength()) { 12157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + text); 12167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Pattern: " + strsrch.getPattern()); 12177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error match found at " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 12187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 12197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchindex = search.offset[count + 1] == -1 ? -1 : 12217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search.offset[count + 2]; 12227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (search.offset[count + 1] != -1) { 12237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setIndex(search.offset[count + 1] + 1); 12247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getIndex() != search.offset[count + 1] + 1) { 12257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting offset\n"); 12267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 12277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert count += 2; 12317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.next(); 12337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getMatchStart() != StringSearch.DONE) { 12347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + text); 12357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Pattern: " + strsrch.getPattern()); 12367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error match found at " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 12377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 12387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getCollator().setStrength(TERTIARY); 12417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetSetOffsetCanonical() { 12447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = "text"; 12467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "pattern"; 12477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 12487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 12497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 12507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 12517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail to open StringSearch!"); 12527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 12537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 12557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //TODO: setCanonical is not sufficient for canonical match. See #10725 12567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getCollator().setDecomposition(Collator.CANONICAL_DECOMPOSITION); 12577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* testing out of bounds error */ 12587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 12597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setIndex(-1); 12607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error expecting set offset error"); 12617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IndexOutOfBoundsException e) { 12627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: strsrch.setIndex(-1) failed as expected"); 12637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 12657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setIndex(128); 12667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error expecting set offset error"); 12677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IndexOutOfBoundsException e) { 12687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: strsrch.setIndex(128) failed as expected"); 12697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int index = 0; index < BASICCANONICAL.length; index++) { 12727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData search = BASICCANONICAL[index]; 12737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = search.text; 12747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = search.pattern; 12757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(new StringCharacterIterator(text)); 12767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(pattern); 12777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count = 0; 12787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchindex = search.offset[count]; 12797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (matchindex >= 0) { 12807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int matchlength = search.size[count]; 12817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.next(); 12827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (matchindex != strsrch.getMatchStart() || 12837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchlength != strsrch.getMatchLength()) { 12847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + text); 12857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Pattern: " + strsrch.getPattern()); 12867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error match found at " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 12877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 12887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert matchindex = search.offset[count + 1] == -1 ? -1 : 12907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search.offset[count + 2]; 12917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (search.offset[count + 1] != -1) { 12927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setIndex(search.offset[count + 1] + 1); 12937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getIndex() != search.offset[count + 1] + 1) { 12947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting offset"); 12957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 12967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert count += 2; 13007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.next(); 13027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getMatchStart() != StringSearch.DONE) { 13037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Text: " + text); 13047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Pattern: %s" + strsrch.getPattern()); 13057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error match found at " + strsrch.getMatchStart() + ", " + strsrch.getMatchLength()); 13067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 13077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getCollator().setStrength(TERTIARY); 13107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getCollator().setDecomposition(Collator.NO_DECOMPOSITION); 13117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIgnorable() { 13147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rules = IGNORABLERULE; 13157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count = 0; 13167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator collator = null; 13177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 13187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator = new RuleBasedCollator(rules); 13197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setStrength(IGNORABLE[count].strength); 13207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); 13217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 13227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening collator "); 13237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 13247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "pattern"; 13267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = "text"; 13277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 13287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 13297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), collator, null); 13307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 13317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search "); 13327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 13337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (; count < IGNORABLE.length; count++) { 13367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = IGNORABLE[count].text; 13377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = IGNORABLE[count].pattern; 13387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(new StringCharacterIterator(text)); 13397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(pattern); 13407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, IGNORABLE[count])) { 13417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 13427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestInitialization() { 13477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern; 13487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text; 13497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String temp = "a"; 13507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch result; 13517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* simple test on the pattern ce construction */ 13537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = temp + temp; 13547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = temp + temp + temp; 13557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 13567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 13577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 13587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening search "); 13597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 13607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* testing if an extremely large pattern will fail the initialization */ 13637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = ""; 13647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < 512; count ++) { 13657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern += temp; 13667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 13687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 13697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("pattern:" + result.getPattern()); 13707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 13717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail: an extremely large pattern will fail the initialization"); 13727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 13737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNormCanonical() { 13777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setDecomposition(Collator.CANONICAL_DECOMPOSITION); 13787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < NORMCANONICAL.length; count++) { 13797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertCanonicalEqual(NORMCANONICAL[count])) { 13807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 13817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setDecomposition(Collator.NO_DECOMPOSITION); 13847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNormExact() { 13877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count; 13887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setDecomposition(Collator.CANONICAL_DECOMPOSITION); 13907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < BASIC.length; count++) { 13917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(BASIC[count])) { 13927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 13937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < NORMEXACT.length; count++) { 13967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(NORMEXACT[count])) { 13977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 13987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setDecomposition(Collator.NO_DECOMPOSITION); 14017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < NONNORMEXACT.length; count++) { 14027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(NONNORMEXACT[count])) { 14037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 14047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestOpenClose() { 14097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch result; 14107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator breakiter = m_en_wordbreaker_; 14117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = ""; 14127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = ""; 14137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String temp = "a"; 14147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringCharacterIterator chariter= new StringCharacterIterator(text); 14157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* testing null arguments */ 14177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), null, null); 14197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: null arguments should produce an error"); 14207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: null arguments failed as expected"); 14227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert chariter.setText(text); 14257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, chariter, null, null); 14277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: null arguments should produce an error"); 14287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: null arguments failed as expected"); 14307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = String.valueOf(0x1); 14337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), null, null); 14357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: Empty pattern should produce an error"); 14367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: Empty pattern failed as expected"); 14387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert chariter.setText(text); 14417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, chariter, null, null); 14437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: Empty pattern should produce an error"); 14447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: Empty pattern failed as expected"); 14467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = ""; 14497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern =temp; 14507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), null, null); 14527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: Empty text should produce an error"); 14537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: Empty text failed as expected"); 14557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert chariter.setText(text); 14587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, chariter, null, null); 14607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: Empty text should produce an error"); 14617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: Empty text failed as expected"); 14637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text += temp; 14667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), null, null); 14687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: null arguments should produce an error"); 14697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: null arguments failed as expected"); 14717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert chariter.setText(text); 14747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, chariter, null, null); 14767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: null arguments should produce an error"); 14777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PASS: null arguments failed as expected"); 14797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, null); 14837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: null break iterator is valid for opening search"); 14857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, chariter, m_en_us_, null); 14897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: null break iterator is valid for opening search"); 14917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 14947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), Locale.ENGLISH); 14957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 14967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: null break iterator is valid for opening search"); 14977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 15007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, chariter, Locale.ENGLISH); 15017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 15027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: null break iterator is valid for opening search"); 15037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 15067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, new StringCharacterIterator(text), m_en_us_, breakiter); 15077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 15087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: Break iterator is valid for opening search"); 15097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 15127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = new StringSearch(pattern, chariter, m_en_us_, null); 15137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("pattern:" + result.getPattern()); 15147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 15157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: Break iterator is valid for opening search"); 15167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestOverlap() { 15207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count; 15217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < OVERLAP.length; count++) { 15237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithAttribute(OVERLAP[count], false, true)) { 15247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at overlap test number " + count); 15257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < NONOVERLAP.length; count++) { 15297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(NONOVERLAP[count])) { 15307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at non overlap test number " + count); 15317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < OVERLAP.length && count < NONOVERLAP.length; count++) { 15357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData search = (OVERLAP[count]); 15367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = search.text; 15377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = search.pattern; 15387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator collator = getCollator(search.collator); 15407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 15417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 15427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, new StringCharacterIterator(text), collator, null); 15437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 15447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error open StringSearch"); 15457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 15467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setOverlapping(true); 15497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strsrch.isOverlapping()) { 15507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting overlap option"); 15517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 15537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 15547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search = NONOVERLAP[count]; 15577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setOverlapping(false); 15587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.isOverlapping()) { 15597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting overlap option"); 15607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 15627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 15637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 15647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestOverlapCanonical() { 15697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int count; 15707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < OVERLAPCANONICAL.length; count++) { 15727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithAttribute(OVERLAPCANONICAL[count], true, true)) { 15737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at overlap test number %d" + count); 15747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < NONOVERLAP.length; count++) { 15787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertCanonicalEqual(NONOVERLAPCANONICAL[count])) { 15797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at non overlap test number %d" + count); 15807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (count = 0; count < OVERLAPCANONICAL.length && count < NONOVERLAPCANONICAL.length; count++) { 15847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData search = OVERLAPCANONICAL[count]; 15857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator collator = getCollator(search.collator); 15867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = new StringSearch(search.pattern, new StringCharacterIterator(search.text), collator, null); 15877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 15887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setOverlapping(true); 15897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.isOverlapping() != true) { 15907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting overlap option"); 15917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 15937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 15947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 15957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert search = NONOVERLAPCANONICAL[count]; 15977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setOverlapping(false); 15987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.isOverlapping() != false) { 15997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting overlap option"); 16007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 16027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, search)) { 16037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number %d" + count); 16057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPattern() { 16107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(PATTERN[0].strength); 16117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = new StringSearch(PATTERN[0].pattern, new StringCharacterIterator(PATTERN[0].text), m_en_us_, null); 16127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getPattern() != PATTERN[0].pattern) { 16147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting pattern"); 16157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, PATTERN[0])) { 16177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 16187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch != null) { 16197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 16227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(PATTERN[1].pattern); 16257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (PATTERN[1].pattern != strsrch.getPattern()) { 16267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting pattern"); 16277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 16287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch != null) { 16297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 16327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 16347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, PATTERN[1])) { 16367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 16377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch != null) { 16387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 16417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(PATTERN[0].pattern); 16447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (PATTERN[0].pattern != strsrch.getPattern()) { 16457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting pattern"); 16467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 16477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch != null) { 16487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 16517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 16537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, PATTERN[0])) { 16557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 16567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch != null) { 16577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 16607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* enormous pattern size to see if this crashes */ 16627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = ""; 16637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int templength = 0; templength != 512; templength ++) { 16647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern += 0x61; 16657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 16677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(pattern); 16687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e) { 16697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting pattern with size 512"); 16707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 16737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch != null) { 16747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPatternCanonical() { 16797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //StringCharacterIterator text = new StringCharacterIterator(PATTERNCANONICAL[0].text); 16807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(PATTERNCANONICAL[0].strength); 16817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = new StringSearch(PATTERNCANONICAL[0].pattern, new StringCharacterIterator(PATTERNCANONICAL[0].text), 16827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_, null); 16837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 16847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (PATTERNCANONICAL[0].pattern != strsrch.getPattern()) { 16867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting pattern"); 16877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, PATTERNCANONICAL[0])) { 16897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 16907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 16927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(PATTERNCANONICAL[1].pattern); 16957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (PATTERNCANONICAL[1].pattern != strsrch.getPattern()) { 16967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting pattern"); 16977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 16987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 16997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 17007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 17027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 17037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, PATTERNCANONICAL[1])) { 17057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 17067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 17077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 17087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(PATTERNCANONICAL[0].pattern); 17117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (PATTERNCANONICAL[0].pattern != strsrch.getPattern()) { 17127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting pattern"); 17137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 17147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 17157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 17167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 17197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 17207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, PATTERNCANONICAL[0])) { 17217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setStrength(TERTIARY); 17227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 17237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 17247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestReset() { 17287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringCharacterIterator text = new StringCharacterIterator("fish fish"); 17297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "s"; 17307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = new StringSearch(pattern, text, m_en_us_, null); 17327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setOverlapping(true); 17337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 17347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setIndex(9); 17357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 17367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.isCanonical() || strsrch.isOverlapping() || 17377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getIndex() != 0 || strsrch.getMatchLength() != 0 || 17387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getMatchStart() != SearchIterator.DONE) { 17397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error resetting string search"); 17407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.previous(); 17437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.getMatchStart() != 7 || strsrch.getMatchLength() != 1) { 17447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error resetting string search\n"); 17457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSetMatch() { 17497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < MATCH.length; count++) { 17507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData search = MATCH[count]; 17517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = new StringSearch(search.pattern, new StringCharacterIterator(search.text), 17527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_, null); 17537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = 0; 17557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (search.offset[size] != -1) { 17567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert size ++; 17577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.first() != search.offset[0]) { 17607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting first match"); 17617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.last() != search.offset[size -1]) { 17637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting last match"); 17647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int index = 0; 17677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (index < size) { 17687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (index + 2 < size) { 17697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.following(search.offset[index + 2] - 1) != search.offset[index + 2]) { 17707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting following match at index " + (search.offset[index + 2]-1)); 17717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (index + 1 < size) { 17747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.preceding(search.offset[index + 1] + search.size[index + 1] + 1) != search.offset[index + 1]) { 17757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting preceeding match at index " + (search.offset[index + 1] + 1)); 17767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert index += 2; 17797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.following(search.text.length()) != SearchIterator.DONE) { 17827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error expecting out of bounds match"); 17837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (strsrch.preceding(0) != SearchIterator.DONE) { 17857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error expecting out of bounds match"); 17867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestStrength() { 17917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < STRENGTH.length; count++) { 17927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(STRENGTH[count])) { 17937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 17947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestStrengthCanonical() { 17997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < STRENGTHCANONICAL.length; count++) { 18007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertCanonicalEqual(STRENGTHCANONICAL[count])) { 18017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number" + count); 18027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSupplementary() { 18077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < SUPPLEMENTARY.length; count++) { 18087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(SUPPLEMENTARY[count])) { 18097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 18107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSupplementaryCanonical() { 18157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < SUPPLEMENTARYCANONICAL.length; count++) { 18167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertCanonicalEqual(SUPPLEMENTARYCANONICAL[count])) { 18177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number" + count); 18187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestText() { 18237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SearchData TEXT[] = { 18247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("the foxy brown fox", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(4, 15, -1), IA(3, 3)), 18257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SD("the quick brown fox", "fox", null, TERTIARY, STANDARD_ELEMENT_COMPARISON, null, IA(16, -1), IA(3)) 18267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 18277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringCharacterIterator t = new StringCharacterIterator(TEXT[0].text); 18287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = new StringSearch(TEXT[0].pattern, t, m_en_us_, null); 18297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!t.equals(strsrch.getTarget())) { 18317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting text"); 18327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, TEXT[0])) { 18347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at assertEqualWithStringSearch"); 18357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 18367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert t = new StringCharacterIterator(TEXT[1].text); 18397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(t); 18407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!t.equals(strsrch.getTarget())) { 18417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting text"); 18427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 18437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, TEXT[1])) { 18467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at assertEqualWithStringSearch"); 18477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 18487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestTextCanonical() { 18527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringCharacterIterator t = new StringCharacterIterator(TEXTCANONICAL[0].text); 18537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = new StringSearch(TEXTCANONICAL[0].pattern, t, m_en_us_, null); 18547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCanonical(true); 18557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!t.equals(strsrch.getTarget())) { 18577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting text"); 18587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, TEXTCANONICAL[0])) { 18607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 18617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 18627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert t = new StringCharacterIterator(TEXTCANONICAL[1].text); 18657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(t); 18667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!t.equals(strsrch.getTarget())) { 18677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting text"); 18687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 18697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 18707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, TEXTCANONICAL[1])) { 18737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 18747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 18757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert t = new StringCharacterIterator(TEXTCANONICAL[0].text); 18787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(t); 18797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!t.equals(strsrch.getTarget())) { 18807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error setting text"); 18817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 18827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 18837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, TEXTCANONICAL[0])) { 18867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at assertEqualWithStringSearch"); 18877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = null; 18887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 18897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestVariable() { 18937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setAlternateHandlingShifted(true); 18947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < VARIABLE.length; count++) { 18957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // logln("variable" + count); 18967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqual(VARIABLE[count])) { 18977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 18987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 18997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setAlternateHandlingShifted(false); 19017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestVariableCanonical() { 19047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setAlternateHandlingShifted(true); 19057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < VARIABLE.length; count++) { 19067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // logln("variable " + count); 19077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertCanonicalEqual(VARIABLE[count])) { 19087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 19097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m_en_us_.setAlternateHandlingShifted(false); 19127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSubClass() 19157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 19167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert class TestSearch extends SearchIterator 19177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 19187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern; 19197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text; 19207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestSearch(StringCharacterIterator target, BreakIterator breaker, 19227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern) 19237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 19247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert super(target, breaker); 19257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.pattern = pattern; 19267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer buffer = new StringBuffer(); 19277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (targetText.getIndex() != targetText.getEndIndex()) { 19287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buffer.append(targetText.current()); 19297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert targetText.next(); 19307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = buffer.toString(); 19327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert targetText.setIndex(targetText.getBeginIndex()); 19337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert protected int handleNext(int start) 19357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 19367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int match = text.indexOf(pattern, start); 19377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (match < 0) { 19387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert targetText.last(); 19397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return DONE; 19407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert targetText.setIndex(match); 19427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert setMatchLength(pattern.length()); 19437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return match; 19447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert protected int handlePrevious(int start) 19467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 19477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int match = text.lastIndexOf(pattern, start - 1); 19487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (match < 0) { 19497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert targetText.setIndex(0); 19507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return DONE; 19517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert targetText.setIndex(match); 19537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert setMatchLength(pattern.length()); 19547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return match; 19557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int getIndex() 19587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 19597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int result = targetText.getIndex(); 19607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result < 0 || result >= text.length()) { 19617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return DONE; 19627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return result; 19647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestSearch search = new TestSearch( 19687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new StringCharacterIterator("abc abcd abc"), 19697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert null, "abc"); 19707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expected[] = {0, 4, 9}; 19717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < expected.length; i ++) { 19727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (search.next() != expected[i]) { 19737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting next match"); 19747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (search.getMatchLength() != search.pattern.length()) { 19767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting next match length"); 19777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (search.next() != SearchIterator.DONE) { 19807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error should have reached the end of the iteration"); 19817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = expected.length - 1; i >= 0; i --) { 19837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (search.previous() != expected[i]) { 19847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting next match"); 19857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (search.getMatchLength() != search.pattern.length()) { 19877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting next match length"); 19887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (search.previous() != SearchIterator.DONE) { 19917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error should have reached the start of the iteration"); 19927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 19947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //Test for ticket 5024 19967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestDiactricMatch() { 19977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = "pattern"; 19987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = "text"; 19997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch strsrch = null; 20007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 20017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch = new StringSearch(pattern, text); 20027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 20037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error opening string search "); 20047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 20057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 20067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < DIACTRICMATCH.length; count++) { 20087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setCollator(getCollator(DIACTRICMATCH[count].collator)); 20097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.getCollator().setStrength(DIACTRICMATCH[count].strength); 20107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setBreakIterator(getBreakIterator(DIACTRICMATCH[count].breaker)); 20117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.reset(); 20127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = DIACTRICMATCH[count].text; 20137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = DIACTRICMATCH[count].pattern; 20147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setTarget(new StringCharacterIterator(text)); 20157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strsrch.setPattern(pattern); 20167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!assertEqualWithStringSearch(strsrch, DIACTRICMATCH[count])) { 20177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error at test number " + count); 20187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 20197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 20207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 20217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestUsingSearchCollator() { 20237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String scKoText = 20247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " " + 20257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*01*/ "\uAC00 " + // simple LV Hangul 20267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*03*/ "\uAC01 " + // simple LVT Hangul 20277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*05*/ "\uAC0F " + // LVTT, last jamo expands for search 20287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*07*/ "\uAFFF " + // LLVVVTT, every jamo expands for search 20297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*09*/ "\u1100\u1161\u11A8 " + // 0xAC01 as conjoining jamo 20307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*13*/ "\u1100\u1161\u1100 " + // 0xAC01 as basic conjoining jamo (per search rules) 20317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*17*/ "\u3131\u314F\u3131 " + // 0xAC01 as compatibility jamo 20327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*21*/ "\u1100\u1161\u11B6 " + // 0xAC0F as conjoining jamo; last expands for search 20337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*25*/ "\u1100\u1161\u1105\u1112 " + // 0xAC0F as basic conjoining jamo; last expands for search 20347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*30*/ "\u1101\u1170\u11B6 " + // 0xAFFF as conjoining jamo; all expand for search 20357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*34*/ "\u00E6 " + // small letter ae, expands 20367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*36*/ "\u1E4D " + // small letter o with tilde and acute, decomposes 20377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ""; 20387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String scKoPat0 = "\uAC01"; 20407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String scKoPat1 = "\u1100\u1161\u11A8"; // 0xAC01 as conjoining jamo 20417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String scKoPat2 = "\uAC0F"; 20427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String scKoPat3 = "\u1100\u1161\u1105\u1112"; // 0xAC0F as basic conjoining jamo 20437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String scKoPat4 = "\uAFFF"; 20447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String scKoPat5 = "\u1101\u1170\u11B6"; // 0xAFFF as conjoining jamo 20457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scKoSrchOff01 = { 3, 9, 13 }; 20477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scKoSrchOff23 = { 5, 21, 25 }; 20487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scKoSrchOff45 = { 7, 30 }; 20497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scKoStndOff01 = { 3, 9 }; 20517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scKoStndOff2 = { 5, 21 }; 20527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scKoStndOff3 = { 25 }; 20537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scKoStndOff45 = { 7, 30 }; 20547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert class PatternAndOffsets { 20567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private String pattern; 20577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private int[] offsets; 20587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert PatternAndOffsets(String pat, int[] offs) { 20597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = pat; 20607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert offsets = offs; 20617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 20627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String getPattern() { return pattern; } 20637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int[] getOffsets() { return offsets; } 20647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 20657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final PatternAndOffsets[] scKoSrchPatternsOffsets = { 20667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat0, scKoSrchOff01 ), 20677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat1, scKoSrchOff01 ), 20687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat2, scKoSrchOff23 ), 20697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat3, scKoSrchOff23 ), 20707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat4, scKoSrchOff45 ), 20717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat5, scKoSrchOff45 ), 20727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 20737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final PatternAndOffsets[] scKoStndPatternsOffsets = { 20747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat0, scKoStndOff01 ), 20757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat1, scKoStndOff01 ), 20767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat2, scKoStndOff2 ), 20777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat3, scKoStndOff3 ), 20787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat4, scKoStndOff45 ), 20797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PatternAndOffsets( scKoPat5, scKoStndOff45 ), 20807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 20817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert class TUSCItem { 20837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private String localeString; 20847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private String text; 20857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private PatternAndOffsets[] patternsAndOffsets; 20867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TUSCItem(String locStr, String txt, PatternAndOffsets[] patsAndOffs) { 20877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert localeString = locStr; 20887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert text = txt; 20897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert patternsAndOffsets = patsAndOffs; 20907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 20917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String getLocaleString() { return localeString; } 20927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String getText() { return text; } 20937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public PatternAndOffsets[] getPatternsAndOffsets() { return patternsAndOffsets; } 20947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 20957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final TUSCItem[] tuscItems = { 20967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new TUSCItem( "root", scKoText, scKoStndPatternsOffsets ), 20977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new TUSCItem( "root@collation=search", scKoText, scKoSrchPatternsOffsets ), 20987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new TUSCItem( "ko@collation=search", scKoText, scKoSrchPatternsOffsets ), 20997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 21007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String dummyPat = "a"; 21027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (TUSCItem tuscItem: tuscItems) { 21047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String localeString = tuscItem.getLocaleString(); 21057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale uloc = new ULocale(localeString); 21067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedCollator col = null; 21077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 21087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert col = (RuleBasedCollator)Collator.getInstance(uloc); 21097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 21107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: in locale " + localeString + ", err in Collator.getInstance"); 21117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 21127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringCharacterIterator ci = new StringCharacterIterator(tuscItem.getText()); 21147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringSearch srch = new StringSearch(dummyPat, ci, col); 21157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for ( PatternAndOffsets patternAndOffsets: tuscItem.getPatternsAndOffsets() ) { 21167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert srch.setPattern(patternAndOffsets.getPattern()); 21177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] offsets = patternAndOffsets.getOffsets(); 21187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int ioff, noff = offsets.length; 21197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int offset; 21207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert srch.reset(); 21227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ioff = 0; 21237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (true) { 21247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert offset = srch.next(); 21257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (offset == SearchIterator.DONE) { 21267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 21277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ( ioff < noff ) { 21297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ( offset != offsets[ioff] ) { 21307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: in locale " + localeString + ", expected SearchIterator.next() " + offsets[ioff] + ", got " + offset); 21317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //ioff = noff; 21327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //break; 21337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ioff++; 21357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 21367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: in locale " + localeString + ", SearchIterator.next() returned more matches than expected"); 21377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ( ioff < noff ) { 21407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: in locale " + localeString + ", SearchIterator.next() returned fewer matches than expected"); 21417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert srch.reset(); 21447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ioff = noff; 21457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (true) { 21467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert offset = srch.previous(); 21477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (offset == SearchIterator.DONE) { 21487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 21497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ( ioff > 0 ) { 21517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ioff--; 21527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ( offset != offsets[ioff] ) { 21537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: in locale " + localeString + ", expected SearchIterator.previous() " + offsets[ioff] + ", got " + offset); 21547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //ioff = 0; 21557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // break; 21567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 21587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: in locale " + localeString + ", expected SearchIterator.previous() returned more matches than expected"); 21597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ( ioff > 0 ) { 21627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error: in locale " + localeString + ", expected SearchIterator.previous() returned fewer matches than expected"); 21637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 2171