17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 1996-2012, International Business Machines Corporation and    *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                                *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.rbbi;
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.ListResourceBundle;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.BreakIterator;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.RuleBasedBreakIterator;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// TODO: {dlf} this test currently doesn't test anything!
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// You'll notice that the resource that uses the dictionary isn't even on the resource path,
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// so the dictionary never gets used.  Good thing, too, because it would throw a security
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// exception if run with a security manager.  Not that it would matter, the dictionary
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// resource isn't even in the icu source tree!
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// In order to fix this:
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 1) make sure english.dict matches the current dictionary format required by dbbi
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 2) make sure english.dict gets included in icu4jtests.jar
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 3) have this test use getResourceAsStream to get a stream on the dictionary, and
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//    directly instantiate a DictionaryBasedBreakIterator.  It can use the rules from
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//    the appropriate section of ResourceBundle_en_US_TEST.  I'd suggest just copying
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//    the rules into this file.
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 4) change the test text by inserting '|' at word breaks, and '||' at line breaks.
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 5) process this text to a) create tables of break indices, and b) clean up the test
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//    for the break iterator to work on
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// This would NOT test the ability to load dictionary-based break iterators through our
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// normal resource mechanism.  One could install such a break iterator and its
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// resources into the icu4j jar, and it would work, but there's no way to register entire
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// resources from outside yet.  Even if there were, the access restrictions are a bit
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// difficult to manage, if one wanted to register a break iterator whose code and data
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// resides outside the icu4j jar.  Since the code to instantiate would be going through
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// two protection domains, each domain would have to allow access to the data-- but
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// icu4j's domain wouldn't know about ours.  So we could instantiate before registering
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// the break iterator, but this would mean we'd have to fully initialize the dictionary(s)
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// at instantiation time, rather than let this be deferred until they are actually needed.
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// I've done items 2 and 3 above.  Unfortunately, since I haven't done item 1, the
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// dictionary builder crashes.  So for now I'm disabling this test.  This is not
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// that important, since we have a thai dictionary that we do test thoroughly.
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class SimpleBITest extends TestFmwk{
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final String testText =
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        "The rain in Spain stays mainly on the plain.  The plains in Spain are mainly pained with rain.";
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//"one-two now--  Hah!  You owe me exactly $1,345.67...  Pay up, huh?  By the way, why don't I send you my re\u0301sume\u0301?  This is a line\r\nbreak.";
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//"nowisthetimeforallgoodmen...  tocometothehelpoftheircountry";
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert"When, in the course of human events, it becomes necessary for one people to dissolve the political bonds which have "
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//"When,inthecourseofhumanevents,itbecomesnecessaryforonepeopletodissolvethepoliticalbondswhichhave"
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "connectedthemwithanother,andtoassumeamongthepowersoftheearth,theseparateandequalstationtowhichthelaws"
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "ofnatureandofnature'sGodentitlethem,adecentrespecttotheopinionsofmankindrequiresthattheyshoulddeclarethe"
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "causeswhichimpelthemtotheseparation\n"
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Weholdthesetruthstobeself-evident,thatallmenarecreatedequal,thattheyareendowedbytheirCreatorwithcertain"
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "unalienablerights,thatamongthesearelife,libertyandthepursuitofhappiness.Thattosecuretheserights,governmentsare"
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "institutedamongmen,derivingtheirjustpowersfromtheconsentofthegoverned.Thatwheneveranyformofgovernment"
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "becomesdestructivetotheseends,itistherightofthepeopletoalterortoabolishit,andtoinstitutenewgovernment,laying"
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "itsfoundationonsuchprinciplesandorganizingitspowersinsuchform,astothemshallseemmostlikelytoeffecttheirsafety"
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "andhappiness.Prudence,indeed,willdictatethatgovernmentslongestablishedshouldnotbechangedforlightandtransient"
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "causes;andaccordinglyallexperiencehathshownthatmankindaremoredisposedtosuffer,whileevilsaresufferable,than"
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "torightthemselvesbyabolishingtheformstowhichtheyareaccustomed.Butwhenalongtrainofabusesandusurpations,"
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "pursuinginvariablythesameobjectevincesadesigntoreducethemunderabsolutedespotism,itistheirright,itistheirduty,"
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "tothrowoffsuchgovernment,andtoprovidenewguardsfortheirfuturesecurity.--Suchhasbeenthepatientsufferanceof"
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "thesecolonies;andsuchisnowthenecessitywhichconstrainsthemtoaltertheirformersystemsofgovernment.Thehistory"
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "ofthepresentKingofGreatBritainisahistoryofrepeatedinjuriesandusurpations,allhavingindirectobjectthe"
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "establishmentofanabsolutetyrannyoverthesestates.Toprovethis,letfactsbesubmittedtoacandidworld.\n"
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasrefusedhisassenttolaws,themostwholesomeandnecessaryforthepublicgood.\n"
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasforbiddenhisgovernorstopasslawsofimmediateandpressingimportance,unlesssuspendedintheiroperationtill"
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "hisassentshouldbeobtained;andwhensosuspended,hehasutterlyneglectedtoattendtothem.\n"
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasrefusedtopassotherlawsfortheaccommodationoflargedistrictsofpeople,unlessthosepeoplewouldrelinquish"
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "therightofrepresentationinthelegislature,arightinestimabletothemandformidabletotyrantsonly.\n"
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehascalledtogetherlegislativebodiesatplacesunusual,uncomfortable,anddistantfromthedepositoryoftheirpublic"
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "records,forthesolepurposeoffatiguingthemintocompliancewithhismeasures.\n"
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasdissolvedrepresentativehousesrepeatedly,foropposingwithmanlyfirmnesshisinvasionsontherightsofthepeople.\n"
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasrefusedforalongtime,aftersuchdissolutions,tocauseotherstobeelected;wherebythelegislativepowers,"
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "incapableofannihilation,havereturnedtothepeopleatlargefortheirexercise;thestateremaininginthemeantimeexposed"
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "toallthedangersofinvasionfromwithout,andconvulsionswithin.\n"
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasendeavoredtopreventthepopulationofthesestates;forthatpurposeobstructingthelawsfornaturalizationof"
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "foreigners;refusingtopassotherstoencouragetheirmigrationhither,andraisingtheconditionsofnewappropriationsof"
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "lands.\n"
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasobstructedtheadministrationofjustice,byrefusinghisassenttolawsforestablishingjudiciarypowers.\n"
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasmadejudgesdependentonhiswillalone,forthetenureoftheiroffices,andtheamountandpaymentoftheirsalaries.\n"
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehaserectedamultitudeofnewoffices,andsenthitherswarmsofofficerstoharassourpeople,andeatouttheir"
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "substance.\n"
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehaskeptamongus,intimesofpeace,standingarmieswithouttheconsentofourlegislature.\n"
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasaffectedtorenderthemilitaryindependentofandsuperiortocivilpower.\n"
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehascombinedwithotherstosubjectustoajurisdictionforeigntoourconstitution,andunacknowledgedbyourlaws;"
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "givinghisassenttotheiractsofpretendedlegislation:\n"
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forquarteringlargebodiesofarmedtroopsamongus:\n"
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forprotectingthem,bymocktrial,frompunishmentforanymurderswhichtheyshouldcommitontheinhabitantsofthese"
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "states:\n"
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forcuttingoffourtradewithallpartsoftheworld:\n"
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forimposingtaxesonuswithoutourconsent:\n"
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Fordeprivingusinmanycases,ofthebenefitsoftrialbyjury:\n"
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Fortransportingusbeyondseastobetriedforpretendedoffenses:\n"
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "ForabolishingthefreesystemofEnglishlawsinaneighboringprovince,establishingthereinanarbitrarygovernment,and"
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "enlargingitsboundariessoastorenderitatonceanexampleandfitinstrumentforintroducingthesameabsoluteruleinthese"
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "colonies:\n"
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Fortakingawayourcharters,abolishingourmostvaluablelaws,andalteringfundamentallytheformsofourgovernments:\n"
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forsuspendingourownlegislatures,anddeclaringthemselvesinvestedwithpowertolegislateforusinallcaseswhatsoever.\n"
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasabdicatedgovernmenthere,bydeclaringusoutofhisprotectionandwagingwaragainstus.\n"
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasplunderedourseas,ravagedourcoasts,burnedourtowns,anddestroyedthelivesofourpeople.\n"
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Heisatthistimetransportinglargearmiesofforeignmercenariestocompletetheworksofdeath,desolationandtyranny,"
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "alreadybegunwithcircumstancesofcrueltyandperfidyscarcelyparalleledinthemostbarbarousages,andtotalyunworth"
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "theheadofacivilizednation.\n"
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasconstrainedourfellowcitizenstakencaptiveonthehighseastobeararmsagainsttheircountry,tobecomethe"
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "executionersoftheirfriendsandbrethren,ortofallthemselvesbytheirhands.\n"
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasexciteddomesticinsurrectionsamongstus,andhasendeavoredtobringontheinhabitantsofourfrontiers,the"
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "mercilessIndiansavages,whoseknownruleofwarfare,isundistinguisheddestructionofallages,sexesandconditions.\n"
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Ineverystageoftheseoppressionswehavepetitionedforredressinthemosthumbleterms:ourrepeatedpetitionshave"
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "beenansweredonlybyrepeatedinjury.Aprince,whosecharacteristhusmarkedbyeveryactwhichmaydefineatyrant,is"
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "unfittobetherulerofafreepeople.\n"
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "NorhavewebeenwantinginattentiontoourBritishbrethren.Wehavewarnedthemfromtimetotimeofattemptsbytheir"
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "legislaturetoextendanunwarrantablejurisdictionoverus.Wehaveremindedthemofthecircumstancesofouremigration"
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "andsettlementhere.Wehaveappealedtotheirnativejusticeandmagnanimity,andwehaveconjuredthembythetiesofour"
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "commonkindredtodisavowtheseusurpations,which,wouldinevitablyinterruptourconnectionsandcorrespondence.We"
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "must,therefore,acquiesceinthenecessity,whichdenouncesourseparation,andholdthem,asweholdtherestofmankind,"
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "enemiesinwar,inpeacefriends.\n"
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "We,therefore,therepresentativesoftheUnitedStatesofAmerica,inGeneralCongress,assembled,appealingtothe"
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "SupremeJudgeoftheworldfortherectitudeofourintentions,do,inthename,andbytheauthorityofthegoodpeopleof"
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "thesecolonies,solemnlypublishanddeclare,thattheseunitedcoloniesare,andofrightoughttobefreeandindependent"
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "states;thattheyareabsolvedfromallallegiancetotheBritishCrown,andthatallpoliticalconnectionbetweenthemandthe"
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "stateofGreatBritain,isandoughttobetotallydissolved;andthatasfreeandindependentstates,theyhavefullpowerto"
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "leveywar,concludepeace,contractalliances,establishcommerce,andtodoallotheractsandthingswhichindependent"
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "statesmayofrightdo.Andforthesupportofthisdeclaration,withafirmrelianceontheprotectionofDivineProvidence,we"
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "mutuallypledgetoeachotherourlives,ourfortunesandoursacredhonor.\n";
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String[] args) throws Exception {
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new SimpleBITest().run(args);
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected boolean validate() {
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // TODO: remove when english.dict gets fixed
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return false;
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private BreakIterator createTestIterator(int kind) {
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        final String bname = "com.ibm.icu.dev.test.rbbi.BreakIteratorRules_en_US_TEST";
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        BreakIterator iter = null;
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ListResourceBundle bundle = null;
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Class cls = Class.forName(bname);
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            bundle = (ListResourceBundle)cls.newInstance();
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        catch (Exception e) {
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create bundle: " + bname + "exception: " + e.getMessage());
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return null;
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        final String[] kindNames = {
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "Character", "Word", "Line", "Sentence"
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String rulesName = kindNames[kind] + "BreakRules";
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] classNames = bundle.getStringArray("BreakIteratorClasses");
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String rules = bundle.getString(rulesName);
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (classNames[kind].equals("RuleBasedBreakIterator")) {
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            iter = new RuleBasedBreakIterator(rules);
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (iter == null) {
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("could not create iterator");
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return iter;
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testWordBreak() throws Exception {
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        BreakIterator wordBreak = createTestIterator(BreakIterator.KIND_WORD);
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int breaks = doTest(wordBreak);
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln(String.valueOf(breaks));
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testLineBreak() throws Exception {
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        BreakIterator lineBreak = createTestIterator(BreakIterator.KIND_LINE);
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int breaks = doTest(lineBreak);
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln(String.valueOf(breaks));
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testSentenceBreak() throws Exception {
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        BreakIterator sentenceBreak = createTestIterator(BreakIterator.KIND_SENTENCE);
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int breaks = doTest(sentenceBreak);
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln(String.valueOf(breaks));
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private int doTest(BreakIterator bi) {
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // forward
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        bi.setText(testText);
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int p = bi.first();
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int lastP = p;
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String fragment;
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int breaks = 0;
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln("Forward...");
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        while (p != BreakIterator.DONE) {
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            p = bi.next();
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (p != BreakIterator.DONE) {
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                fragment = testText.substring(lastP, p);
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                fragment = testText.substring(lastP);
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            debugPrintln(": >" + fragment + "<");
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            ++breaks;
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            lastP = p;
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return breaks;
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private void debugPrintln(String s) {
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        final String zeros = "0000";
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String temp;
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringBuffer out = new StringBuffer();
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int i = 0; i < s.length(); i++) {
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            char c = s.charAt(i);
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (c >= ' ' && c < '\u007f')
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                out.append(c);
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            else {
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                out.append("\\u");
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                temp = Integer.toHexString((int)c);
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                out.append(zeros.substring(0, 4 - temp.length()));
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                out.append(temp);
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln(out.toString());
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*    private void debugPrintln2(String s) {
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringBuffer out = new StringBuffer();
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int i = 0; i < s.length(); i++) {
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            char c = s.charAt(i);
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (c >= '\u0100')
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                out.append("<" + ((int)c - 0x100) + ">");
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            else
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                out.append(c);
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        logln(out.toString());
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }*/
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
243