blob: a0eedbad9efc1412d5828efedac1d5dffd033d6f [file] [log] [blame]
/*
*******************************************************************************
* 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);
}
}
}