]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/bidi/TestClassOverride.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / src / com / ibm / icu / dev / test / bidi / TestClassOverride.java
1 /*\r
2 *******************************************************************************\r
3 *   Copyright (C) 2007, International Business Machines\r
4 *   Corporation and others.  All Rights Reserved.\r
5 *******************************************************************************\r
6 */\r
7 \r
8 package com.ibm.icu.dev.test.bidi;\r
9 \r
10 import com.ibm.icu.text.Bidi;\r
11 import com.ibm.icu.text.BidiClassifier;\r
12 \r
13 /**\r
14  * Regression test for Bidi class override.\r
15  *\r
16  * @author Lina Kemmel, Matitiahu Allouche\r
17  */\r
18 \r
19 public class TestClassOverride extends BidiTest {\r
20 \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
36 \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
55     };\r
56     static final int nEntries = customClasses.length;\r
57 \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
60 \r
61     protected static class CustomClassifier extends BidiClassifier {\r
62 \r
63         public CustomClassifier(Object context) {\r
64           super(context);\r
65         }\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
71         }\r
72     }\r
73 \r
74     private void verifyClassifier(Bidi bidi) {\r
75         BidiClassifier actualClassifier = bidi.getCustomClassifier();\r
76 \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
80             }\r
81         } else {\r
82             Class expectedClass = this.classifier.getClass();\r
83             assertTrue("null Bidi classifier", actualClassifier != null);\r
84             if (actualClassifier == null) {\r
85                 return;\r
86             }\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
92                     }\r
93                 } else {\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
99                 }\r
100             } else {\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
105             }\r
106         }\r
107     }\r
108 \r
109     CustomClassifier classifier = null;\r
110 \r
111     public void testClassOverride()\r
112     {\r
113         Bidi bidi;\r
114 \r
115         logln("\nEntering TestClassOverride\n");\r
116 \r
117         bidi = new Bidi();\r
118         verifyClassifier(bidi);\r
119 \r
120         classifier = new CustomClassifier(new Integer(TestData.R));\r
121         bidi.setCustomClassifier(classifier);\r
122         verifyClassifier(bidi);\r
123 \r
124         classifier.setContext(null);\r
125         verifyClassifier(bidi);\r
126 \r
127         bidi.setPara(textIn, Bidi.LTR, null);\r
128 \r
129         String out = bidi.writeReordered(Bidi.DO_MIRRORING);\r
130         assertEquals("Actual and expected output mismatch", textOut, out);\r
131 \r
132         logln("\nExiting TestClassOverride\n");\r
133     }\r
134 \r
135 \r
136     public static void main(String[] args) {\r
137         try {\r
138             new TestClassOverride().run(args);\r
139         }\r
140         catch (Exception e) {\r
141             System.out.println(e);\r
142         }\r
143     }\r
144 }\r