1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/*
5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*******************************************************************************
6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*   Copyright (C) 2007-2011, International Business Machines
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*   Corporation and others.  All Rights Reserved.
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*******************************************************************************
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*/
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.bidi;
12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
13f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
14f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.Bidi;
162e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillinimport android.icu.testsharding.MainTestShard;
17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
18aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/**
19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Regression test for doing transformations in context
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *
21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * @author Matitiahu Allouche
22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
23aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
242e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillin@MainTestShard
25f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertpublic class TestContext extends BidiFmwk {
26aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private class ContextCase {
28aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String prologue;
29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String source;
30aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String epilogue;
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String expected;
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        byte paraLevel;
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
34aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        ContextCase(String pro, String src, String epi, String exp, byte lev) {
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            prologue = pro;
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            source = src;
37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            epilogue = epi;
38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            expected = exp;
39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            paraLevel = lev;
40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    };
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private final ContextCase[] contextData = {
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*00*/  new ContextCase("", "", "", "", Bidi.LTR),
45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*01*/  new ContextCase("", ".-=JKL-+*", "", ".-=LKJ-+*", Bidi.LTR),
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*02*/  new ContextCase(" ", ".-=JKL-+*", " ", ".-=LKJ-+*", Bidi.LTR),
47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*03*/  new ContextCase("a", ".-=JKL-+*", "b", ".-=LKJ-+*", Bidi.LTR),
48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*04*/  new ContextCase("D", ".-=JKL-+*", "", "LKJ=-.-+*", Bidi.LTR),
49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*05*/  new ContextCase("", ".-=JKL-+*", " D", ".-=*+-LKJ", Bidi.LTR),
50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*06*/  new ContextCase("", ".-=JKL-+*", " 2", ".-=*+-LKJ", Bidi.LTR),
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*07*/  new ContextCase("", ".-=JKL-+*", " 7", ".-=*+-LKJ", Bidi.LTR),
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*08*/  new ContextCase(" G 1", ".-=JKL-+*", " H", "*+-LKJ=-.", Bidi.LTR),
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*09*/  new ContextCase("7", ".-=JKL-+*", " H", ".-=*+-LKJ", Bidi.LTR),
54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*10*/  new ContextCase("", ".-=abc-+*", "", "*+-abc=-.", Bidi.RTL),
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*11*/  new ContextCase(" ", ".-=abc-+*", " ", "*+-abc=-.", Bidi.RTL),
56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*12*/  new ContextCase("D", ".-=abc-+*", "G", "*+-abc=-.", Bidi.RTL),
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*13*/  new ContextCase("x", ".-=abc-+*", "", "*+-.-=abc", Bidi.RTL),
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*14*/  new ContextCase("", ".-=abc-+*", " y", "abc-+*=-.", Bidi.RTL),
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*15*/  new ContextCase("", ".-=abc-+*", " 2", "abc-+*=-.", Bidi.RTL),
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*16*/  new ContextCase(" x 1", ".-=abc-+*", " 2", ".-=abc-+*", Bidi.RTL),
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*17*/  new ContextCase(" x 7", ".-=abc-+*", " 8", "*+-.-=abc", Bidi.RTL),
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*18*/  new ContextCase("x|", ".-=abc-+*", " 8", "*+-abc=-.", Bidi.RTL),
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*19*/  new ContextCase("G|y", ".-=abc-+*", " 8", "*+-.-=abc", Bidi.RTL),
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*20*/  new ContextCase("", ".-=", "", ".-=", Bidi.LEVEL_DEFAULT_LTR),
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*21*/  new ContextCase("D", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR),
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*22*/  new ContextCase("G", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR),
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*23*/  new ContextCase("xG", ".-=", "", ".-=", Bidi.LEVEL_DEFAULT_LTR),
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*24*/  new ContextCase("x|G", ".-=", "", "=-.", Bidi.LEVEL_DEFAULT_LTR),
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /*25*/  new ContextCase("x|G", ".-=|-+*", "", "=-.|-+*", Bidi.LEVEL_DEFAULT_LTR),
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    };
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private final int CONTEXT_COUNT = contextData.length;
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
73f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void testContext()
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    {
76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String prologue, epilogue, src, dest;
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Bidi bidi = new Bidi();
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int tc;
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        ContextCase cc;
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("\nEntering TestContext\n");
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bidi.orderParagraphsLTR(true);
84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (tc = 0; tc < CONTEXT_COUNT; tc++) {
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            cc = contextData[tc];
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            prologue = pseudoToU16(cc.prologue);
88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            epilogue = pseudoToU16(cc.epilogue);
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            /* in the call below, prologue and epilogue are swapped to show
90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin               that the next call will override this call */
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.setContext(epilogue, prologue);
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.setContext(prologue, epilogue);
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            src = pseudoToU16(cc.source);
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.setPara(src, cc.paraLevel, null);
95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            dest = bidi.writeReordered(Bidi.DO_MIRRORING);
96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            dest = u16ToPseudo(dest);
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            assertEquals("\nActual and expected output mismatch on case "+tc+"." +
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                         "\nPrologue:           " + cc.prologue +
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                         "\nInput:              " + cc.source +
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                         "\nEpilogue:           " + cc.epilogue +
101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                         "\nParagraph level:    " + Byte.toString(bidi.getParaLevel()) + "\n",
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                         cc.expected, dest);
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("\nExiting TestContext\n");
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
108