/* | |
******************************************************************************* | |
* Copyright (C) 2007-2011, International Business Machines | |
* Corporation and others. All Rights Reserved. | |
******************************************************************************* | |
*/ | |
package com.ibm.icu.dev.test.bidi; | |
import com.ibm.icu.text.Bidi; | |
/** | |
* Regression test for doing transformations in context | |
* | |
* @author Matitiahu Allouche | |
*/ | |
public class TestContext extends BidiTest { | |
private class ContextCase { | |
String prologue; | |
String source; | |
String epilogue; | |
String expected; | |
byte paraLevel; | |
ContextCase(String pro, String src, String epi, String exp, byte lev) { | |
prologue = pro; | |
source = src; | |
epilogue = epi; | |
expected = exp; | |
paraLevel = lev; | |
} | |
}; | |
private final ContextCase[] contextData = { | |
/*00*/ new ContextCase("", "", "", "", Bidi.LTR), | |
/*01*/ new ContextCase("", ".-=JKL-+*", "", ".-=LKJ-+*", Bidi.LTR), | |
/*02*/ new ContextCase(" ", ".-=JKL-+*", " ", ".-=LKJ-+*", Bidi.LTR), | |
/*03*/ new ContextCase("a", ".-=JKL-+*", "b", ".-=LKJ-+*", Bidi.LTR), | |
/*04*/ new ContextCase("D", ".-=JKL-+*", "", "LKJ=-.-+*", Bidi.LTR), | |
/*05*/ new ContextCase("", ".-=JKL-+*", " D", ".-=*+-LKJ", Bidi.LTR), | |
/*06*/ new ContextCase("", ".-=JKL-+*", " 2", ".-=*+-LKJ", Bidi.LTR), | |
/*07*/ new ContextCase("", ".-=JKL-+*", " 7", ".-=*+-LKJ", Bidi.LTR), | |
/*08*/ new ContextCase(" G 1", ".-=JKL-+*", " H", "*+-LKJ=-.", Bidi.LTR), | |
/*09*/ new ContextCase("7", ".-=JKL-+*", " H", ".-=*+-LKJ", Bidi.LTR), | |
/*10*/ new ContextCase("", ".-=abc-+*", "", "*+-abc=-.", Bidi.RTL), | |
/*11*/ new ContextCase(" ", ".-=abc-+*", " ", "*+-abc=-.", Bidi.RTL), | |
/*12*/ new ContextCase("D", ".-=abc-+*", "G", "*+-abc=-.", Bidi.RTL), | |
/*13*/ new ContextCase("x", ".-=abc-+*", "", "*+-.-=abc", Bidi.RTL), | |
/*14*/ new ContextCase("", ".-=abc-+*", " y", "abc-+*=-.", Bidi.RTL), | |
/*15*/ new ContextCase("", ".-=abc-+*", " 2", "abc-+*=-.", Bidi.RTL), | |
/*16*/ new ContextCase(" x 1", ".-=abc-+*", " 2", ".-=abc-+*", Bidi.RTL), | |
/*17*/ new ContextCase(" x 7", ".-=abc-+*", " 8", "*+-.-=abc", Bidi.RTL), | |
/*18*/ new ContextCase("x|", ".-=abc-+*", " 8", "*+-abc=-.", Bidi.RTL), | |
/*19*/ new ContextCase("G|y", ".-=abc-+*", " 8", "*+-.-=abc", Bidi.RTL), | |
/*20*/ new ContextCase("", ".-=", "", ".-=", Bidi.LEVEL_DEFAULT_LTR), | |
/*21*/ new ContextCase("D", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR), | |
/*22*/ new ContextCase("G", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR), | |
/*23*/ new ContextCase("xG", ".-=", "", ".-=", Bidi.LEVEL_DEFAULT_LTR), | |
/*24*/ new ContextCase("x|G", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR), | |
/*25*/ new ContextCase("x|G", ".-=|-+*", "", "=-.|-+*", Bidi.LEVEL_DEFAULT_LTR), | |
}; | |
private final int CONTEXT_COUNT = contextData.length; | |
public void testContext() | |
{ | |
String prologue, epilogue, src, dest; | |
Bidi bidi = new Bidi(); | |
int tc; | |
ContextCase cc; | |
logln("\nEntering TestContext\n"); | |
bidi.orderParagraphsLTR(true); | |
for (tc = 0; tc < CONTEXT_COUNT; tc++) { | |
cc = contextData[tc]; | |
prologue = pseudoToU16(cc.prologue); | |
epilogue = pseudoToU16(cc.epilogue); | |
/* in the call below, prologue and epilogue are swapped to show | |
that the next call will override this call */ | |
bidi.setContext(epilogue, prologue); | |
bidi.setContext(prologue, epilogue); | |
src = pseudoToU16(cc.source); | |
bidi.setPara(src, cc.paraLevel, null); | |
dest = bidi.writeReordered(Bidi.DO_MIRRORING); | |
dest = u16ToPseudo(dest); | |
assertEquals("\nActual and expected output mismatch on case "+tc+"." + | |
"\nPrologue: " + cc.prologue + | |
"\nInput: " + cc.source + | |
"\nEpilogue: " + cc.epilogue + | |
"\nParagraph level: " + Byte.toString(bidi.getParaLevel()) + "\n", | |
cc.expected, dest); | |
} | |
logln("\nExiting TestContext\n"); | |
} | |
public static void main(String[] args) { | |
try { | |
new TestContext().run(args); | |
} | |
catch (Exception e) { | |
System.out.println(e); | |
} | |
} | |
} |