17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Copyright (C) 2007-2011, International Business Machines 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Corporation and others. All Rights Reserved. 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.bidi; 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.Bidi; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Regression test for doing transformations in context 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author Matitiahu Allouche 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class TestContext extends BidiTest { 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private class ContextCase { 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String prologue; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String source; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String epilogue; 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expected; 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte paraLevel; 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ContextCase(String pro, String src, String epi, String exp, byte lev) { 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert prologue = pro; 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert source = src; 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert epilogue = epi; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expected = exp; 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert paraLevel = lev; 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private final ContextCase[] contextData = { 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*00*/ new ContextCase("", "", "", "", Bidi.LTR), 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*01*/ new ContextCase("", ".-=JKL-+*", "", ".-=LKJ-+*", Bidi.LTR), 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*02*/ new ContextCase(" ", ".-=JKL-+*", " ", ".-=LKJ-+*", Bidi.LTR), 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*03*/ new ContextCase("a", ".-=JKL-+*", "b", ".-=LKJ-+*", Bidi.LTR), 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*04*/ new ContextCase("D", ".-=JKL-+*", "", "LKJ=-.-+*", Bidi.LTR), 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*05*/ new ContextCase("", ".-=JKL-+*", " D", ".-=*+-LKJ", Bidi.LTR), 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*06*/ new ContextCase("", ".-=JKL-+*", " 2", ".-=*+-LKJ", Bidi.LTR), 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*07*/ new ContextCase("", ".-=JKL-+*", " 7", ".-=*+-LKJ", Bidi.LTR), 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*08*/ new ContextCase(" G 1", ".-=JKL-+*", " H", "*+-LKJ=-.", Bidi.LTR), 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*09*/ new ContextCase("7", ".-=JKL-+*", " H", ".-=*+-LKJ", Bidi.LTR), 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*10*/ new ContextCase("", ".-=abc-+*", "", "*+-abc=-.", Bidi.RTL), 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*11*/ new ContextCase(" ", ".-=abc-+*", " ", "*+-abc=-.", Bidi.RTL), 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*12*/ new ContextCase("D", ".-=abc-+*", "G", "*+-abc=-.", Bidi.RTL), 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*13*/ new ContextCase("x", ".-=abc-+*", "", "*+-.-=abc", Bidi.RTL), 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*14*/ new ContextCase("", ".-=abc-+*", " y", "abc-+*=-.", Bidi.RTL), 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*15*/ new ContextCase("", ".-=abc-+*", " 2", "abc-+*=-.", Bidi.RTL), 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*16*/ new ContextCase(" x 1", ".-=abc-+*", " 2", ".-=abc-+*", Bidi.RTL), 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*17*/ new ContextCase(" x 7", ".-=abc-+*", " 8", "*+-.-=abc", Bidi.RTL), 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*18*/ new ContextCase("x|", ".-=abc-+*", " 8", "*+-abc=-.", Bidi.RTL), 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*19*/ new ContextCase("G|y", ".-=abc-+*", " 8", "*+-.-=abc", Bidi.RTL), 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*20*/ new ContextCase("", ".-=", "", ".-=", Bidi.LEVEL_DEFAULT_LTR), 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*21*/ new ContextCase("D", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR), 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*22*/ new ContextCase("G", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR), 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*23*/ new ContextCase("xG", ".-=", "", ".-=", Bidi.LEVEL_DEFAULT_LTR), 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*24*/ new ContextCase("x|G", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR), 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*25*/ new ContextCase("x|G", ".-=|-+*", "", "=-.|-+*", Bidi.LEVEL_DEFAULT_LTR), 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private final int CONTEXT_COUNT = contextData.length; 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testContext() 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String prologue, epilogue, src, dest; 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Bidi bidi = new Bidi(); 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int tc; 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ContextCase cc; 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("\nEntering TestContext\n"); 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi.orderParagraphsLTR(true); 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (tc = 0; tc < CONTEXT_COUNT; tc++) { 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cc = contextData[tc]; 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert prologue = pseudoToU16(cc.prologue); 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert epilogue = pseudoToU16(cc.epilogue); 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* in the call below, prologue and epilogue are swapped to show 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert that the next call will override this call */ 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi.setContext(epilogue, prologue); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi.setContext(prologue, epilogue); 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert src = pseudoToU16(cc.source); 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi.setPara(src, cc.paraLevel, null); 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dest = bidi.writeReordered(Bidi.DO_MIRRORING); 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dest = u16ToPseudo(dest); 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("\nActual and expected output mismatch on case "+tc+"." + 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\nPrologue: " + cc.prologue + 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\nInput: " + cc.source + 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\nEpilogue: " + cc.epilogue + 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\nParagraph level: " + Byte.toString(bidi.getParaLevel()) + "\n", 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cc.expected, dest); 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("\nExiting TestContext\n"); 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) { 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new TestContext().run(args); 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(e); 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 109