2 *******************************************************************************
\r
3 * Copyright (C) 2007, International Business Machines
\r
4 * Corporation and others. All Rights Reserved.
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.dev.test.bidi;
\r
10 import com.ibm.icu.text.Bidi;
\r
11 import com.ibm.icu.text.BidiClassifier;
\r
14 * Regression test for Bidi class override.
\r
16 * @author Lina Kemmel, Matitiahu Allouche
\r
19 public class TestClassOverride extends BidiTest {
\r
21 private static final int DEF = TestData.DEF;
\r
22 private static final int L = TestData.L;
\r
23 private static final int R = TestData.R;
\r
24 private static final int AL = TestData.AL;
\r
25 private static final int AN = TestData.AN;
\r
26 private static final int EN = TestData.EN;
\r
27 private static final int LRE = TestData.LRE;
\r
28 private static final int RLE = TestData.RLE;
\r
29 private static final int LRO = TestData.LRO;
\r
30 private static final int RLO = TestData.RLO;
\r
31 private static final int PDF = TestData.PDF;
\r
32 private static final int NSM = TestData.NSM;
\r
33 private static final int B = TestData.B;
\r
34 private static final int S = TestData.S;
\r
35 private static final int BN = TestData.BN;
\r
37 private static final int[] customClasses = {
\r
38 /* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
\r
39 DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //00-07
\r
40 DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //08-0F
\r
41 DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //10-17
\r
42 DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //18-1F
\r
43 DEF, DEF, DEF, DEF, DEF, DEF, R, DEF, //20-27
\r
44 DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //28-2F
\r
45 EN, EN, EN, EN, EN, EN, AN, AN, //30-37
\r
46 AN, AN, DEF, DEF, DEF, DEF, DEF, DEF, //38-3F
\r
47 L, AL, AL, AL, AL, AL, AL, R, //40-47
\r
48 R, R, R, R, R, R, R, R, //48-4F
\r
49 R, R, R, R, R, R, R, R, //50-57
\r
50 R, R, R, LRE, DEF, RLE, PDF, S, //58-5F
\r
51 NSM, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //60-67
\r
52 DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //68-6F
\r
53 DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //70-77
\r
54 DEF, DEF, DEF, LRO, B, RLO, BN, DEF //78-7F
\r
56 static final int nEntries = customClasses.length;
\r
58 static final String textIn = "JIH.>12->a \u05d0\u05d1 6 ABC78";
\r
59 static final String textOut = "12<.HIJ->a 78CBA 6 \u05d1\u05d0";
\r
61 protected static class CustomClassifier extends BidiClassifier {
\r
63 public CustomClassifier(Object context) {
\r
66 public int classify(int c) {
\r
67 // some (meaningless) action - just for testing purposes
\r
68 return (this.context != null ? ((Integer)context).intValue()
\r
69 : c >= nEntries ? super.classify(c)
\r
70 : customClasses[c]);
\r
74 private void verifyClassifier(Bidi bidi) {
\r
75 BidiClassifier actualClassifier = bidi.getCustomClassifier();
\r
77 if (this.classifier == null) {
\r
78 if (actualClassifier != null) {
\r
79 errln("Bidi classifier is not yet set, but reported as not null");
\r
82 Class expectedClass = this.classifier.getClass();
\r
83 assertTrue("null Bidi classifier", actualClassifier != null);
\r
84 if (actualClassifier == null) {
\r
87 if (expectedClass.isInstance(actualClassifier)) {
\r
88 Object context = classifier.getContext();
\r
89 if (context == null) {
\r
90 if (actualClassifier.getContext() != null) {
\r
91 errln("Unexpected context, should be null");
\r
94 assertEquals("Unexpected classifier context", context,
\r
95 actualClassifier.getContext());
\r
96 assertEquals("Unexpected context's content",
\r
97 ((Integer)context).intValue(),
\r
98 bidi.getCustomizedClass('a'));
\r
101 errln("Bidi object reports classifier is an instance of " +
\r
102 actualClassifier.getClass().getName() +
\r
103 ",\nwhile the expected classifier should be an " +
\r
104 "instance of " + expectedClass);
\r
109 CustomClassifier classifier = null;
\r
111 public void testClassOverride()
\r
115 logln("\nEntering TestClassOverride\n");
\r
118 verifyClassifier(bidi);
\r
120 classifier = new CustomClassifier(new Integer(TestData.R));
\r
121 bidi.setCustomClassifier(classifier);
\r
122 verifyClassifier(bidi);
\r
124 classifier.setContext(null);
\r
125 verifyClassifier(bidi);
\r
127 bidi.setPara(textIn, Bidi.LTR, null);
\r
129 String out = bidi.writeReordered(Bidi.DO_MIRRORING);
\r
130 assertEquals("Actual and expected output mismatch", textOut, out);
\r
132 logln("\nExiting TestClassOverride\n");
\r
136 public static void main(String[] args) {
\r
138 new TestClassOverride().run(args);
\r
140 catch (Exception e) {
\r
141 System.out.println(e);
\r