blob: f6b4f352b086e73cdc57af54695063da4ab01cda [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2007-2013, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*/
package com.ibm.icu.dev.test.bidi;
import com.ibm.icu.text.Bidi;
import com.ibm.icu.text.BidiClassifier;
/**
* Regression test for Bidi class override.
*
* @author Lina Kemmel, Matitiahu Allouche
*/
public class TestClassOverride extends BidiTest {
private static final int DEF = TestData.DEF;
private static final int L = TestData.L;
private static final int R = TestData.R;
private static final int AL = TestData.AL;
private static final int AN = TestData.AN;
private static final int EN = TestData.EN;
private static final int LRE = TestData.LRE;
private static final int RLE = TestData.RLE;
private static final int LRO = TestData.LRO;
private static final int RLO = TestData.RLO;
private static final int PDF = TestData.PDF;
private static final int NSM = TestData.NSM;
private static final int B = TestData.B;
private static final int S = TestData.S;
private static final int BN = TestData.BN;
private static final int[] customClasses = {
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //00-07
DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //08-0F
DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //10-17
DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //18-1F
DEF, DEF, DEF, DEF, DEF, DEF, R, DEF, //20-27
DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //28-2F
EN, EN, EN, EN, EN, EN, AN, AN, //30-37
AN, AN, DEF, DEF, DEF, DEF, DEF, DEF, //38-3F
L, AL, AL, AL, AL, AL, AL, R, //40-47
R, R, R, R, R, R, R, R, //48-4F
R, R, R, R, R, R, R, R, //50-57
R, R, R, LRE, DEF, RLE, PDF, S, //58-5F
NSM, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //60-67
DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //68-6F
DEF, DEF, DEF, DEF, DEF, DEF, DEF, DEF, //70-77
DEF, DEF, DEF, LRO, B, RLO, BN, DEF //78-7F
};
static final int nEntries = customClasses.length;
static final String textIn = "JIH.>12->a \u05d0\u05d1 6 ABC78";
static final String textOut = "12<.HIJ->a 78CBA 6 \u05d1\u05d0";
protected static class CustomClassifier extends BidiClassifier {
public CustomClassifier(Object context) {
super(context);
}
public int classify(int c) {
// some (meaningless) action - just for testing purposes
return (this.context != null ? ((Integer)context).intValue()
: c >= nEntries ? super.classify(c)
: customClasses[c]);
}
}
private void verifyClassifier(Bidi bidi) {
BidiClassifier actualClassifier = bidi.getCustomClassifier();
if (this.classifier == null) {
if (actualClassifier != null) {
errln("Bidi classifier is not yet set, but reported as not null");
}
} else {
Class<?> expectedClass = this.classifier.getClass();
assertTrue("null Bidi classifier", actualClassifier != null);
if (actualClassifier == null) {
return;
}
if (expectedClass.isInstance(actualClassifier)) {
Object context = classifier.getContext();
if (context == null) {
if (actualClassifier.getContext() != null) {
errln("Unexpected context, should be null");
}
} else {
assertEquals("Unexpected classifier context", context,
actualClassifier.getContext());
assertEquals("Unexpected context's content",
((Integer)context).intValue(),
bidi.getCustomizedClass('a'));
}
} else {
errln("Bidi object reports classifier is an instance of " +
actualClassifier.getClass().getName() +
",\nwhile the expected classifier should be an " +
"instance of " + expectedClass);
}
}
}
CustomClassifier classifier = null;
public void testClassOverride()
{
Bidi bidi;
logln("\nEntering TestClassOverride\n");
bidi = new Bidi();
verifyClassifier(bidi);
classifier = new CustomClassifier(new Integer(TestData.R));
bidi.setCustomClassifier(classifier);
verifyClassifier(bidi);
classifier.setContext(null);
verifyClassifier(bidi);
bidi.setPara(textIn, Bidi.LTR, null);
String out = bidi.writeReordered(Bidi.DO_MIRRORING);
assertEquals("Actual and expected output mismatch", textOut, out);
logln("\nExiting TestClassOverride\n");
}
public static void main(String[] args) {
try {
new TestClassOverride().run(args);
}
catch (Exception e) {
System.out.println(e);
}
}
}