blob: 7508b44c033708ef14f5e3eecacfa36a892fdbf0 [file] [log] [blame]
/**
*******************************************************************************
* Copyright (C) 1999-2005, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test.lang;
import com.ibm.icu.lang.UScript;
import com.ibm.icu.lang.UScriptRun;
import com.ibm.icu.dev.test.TestFmwk;
public class TestUScriptRun extends TestFmwk
{
public TestUScriptRun()
{
// nothing
}
public static void main(String[] args) throws Exception {
new TestUScriptRun().run(args);
}
private static final class RunTestData
{
String runText;
int runScript;
public RunTestData(String theText, int theScriptCode)
{
runText = theText;
runScript = theScriptCode;
}
}
private static final RunTestData[][] testData = {
{
new RunTestData("\u0020\u0946\u0939\u093F\u0928\u094D\u0926\u0940\u0020", UScript.DEVANAGARI),
new RunTestData("\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020", UScript.ARABIC),
new RunTestData("\u0420\u0443\u0441\u0441\u043A\u0438\u0439\u0020", UScript.CYRILLIC),
new RunTestData("English (", UScript.LATIN),
new RunTestData("\u0E44\u0E17\u0E22", UScript.THAI),
new RunTestData(") ", UScript.LATIN),
new RunTestData("\u6F22\u5B75", UScript.HAN),
new RunTestData("\u3068\u3072\u3089\u304C\u306A\u3068", UScript.HIRAGANA),
new RunTestData("\u30AB\u30BF\u30AB\u30CA", UScript.KATAKANA),
new RunTestData("\uD801\uDC00\uD801\uDC01\uD801\uDC02\uD801\uDC03", UScript.DESERET),
},
{
new RunTestData("((((((((((abc))))))))))", UScript.LATIN)
}
};
private static final String padding = "This string is used for padding...";
private void CheckScriptRuns(UScriptRun scriptRun, int[] runStarts, RunTestData[] testData)
{
int run, runStart, runLimit;
int runScript;
/* iterate over all the runs */
run = 0;
while (scriptRun.next()) {
runStart = scriptRun.getScriptStart();
runLimit = scriptRun.getScriptLimit();
runScript = scriptRun.getScriptCode();
if (runStart != runStarts[run]) {
errln("Incorrect start offset for run " + run + ": expected " + runStarts[run] + ", got " + runStart);
}
if (runLimit != runStarts[run + 1]) {
errln("Incorrect limit offset for run " + run + ": expected " + runStarts[run + 1] + ", got " + runLimit);
}
if (runScript != testData[run].runScript) {
errln("Incorrect script for run " + run + ": expected \"" + UScript.getName(testData[run].runScript) + "\", got \"" + UScript.getName(runScript) + "\"");
}
run += 1;
/* stop when we've seen all the runs we expect to see */
if (run >= testData.length) {
break;
}
}
/* Complain if we didn't see then number of runs we expected */
if (run != testData.length) {
errln("Incorrect number of runs: expected " + testData.length + ", got " + run);
}
}
public void TestContstruction()
{
UScriptRun scriptRun = null;
char[] nullChars = null, dummyChars = {'d', 'u', 'm', 'm', 'y'};
String nullString = null, dummyString = new String(dummyChars);
try {
scriptRun = new UScriptRun(nullString, 0, 100);
errln("new UScriptRun(nullString, 0, 100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(nullString, 100, 0);
errln("new UScriptRun(nullString, 100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(nullString, 0, -100);
errln("new UScriptRun(nullString, 0, -100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(nullString, -100, 0);
errln("new UScriptRun(nullString, -100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(nullChars, 0, 100);
errln("new UScriptRun(nullChars, 0, 100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(nullChars, 100, 0);
errln("new UScriptRun(nullChars, 100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(nullChars, 0, -100);
errln("new UScriptRun(nullChars, 0, -100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(nullChars, -100, 0);
errln("new UScriptRun(nullChars, -100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(dummyString, 0, 6);
errln("new UScriptRun(dummyString, 0, 6) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(dummyString, 6, 0);
errln("new UScriptRun(dummy, 6, 0) did not produce an IllegalArgumentException!");
}catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(dummyString, 0, -100);
errln("new UScriptRun(dummyString, 0, -100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(dummyString, -100, 0);
errln("new UScriptRun(dummy, -100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(dummyChars, 0, 6);
errln("new UScriptRun(dummyChars, 0, 6) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(dummyChars, 6, 0);
errln("new UScriptRun(dummyChars, 6, 0) did not produce an IllegalArgumentException!");
}catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(dummyChars, 0, -100);
errln("new UScriptRun(dummyChars, 0, -100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
try {
scriptRun = new UScriptRun(dummyChars, -100, 0);
errln("new UScriptRun(dummy, -100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: UScriptRun failed as expected");
}
if(scriptRun!=null){
errln("Did not get the expected Exception");
}
}
public void TestReset()
{
UScriptRun scriptRun = null;
char[] dummy = {'d', 'u', 'm', 'm', 'y'};
try {
scriptRun = new UScriptRun();
} catch (IllegalArgumentException iae) {
errln("new UScriptRun() produced an IllegalArgumentException!");
}
try {
scriptRun.reset(0, 100);
errln("scriptRun.reset(0, 100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(100, 0);
errln("scriptRun.reset(100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(0, -100);
errln("scriptRun.reset(0, -100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(-100, 0);
errln("scriptRun.reset(-100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(dummy, 0, 6);
errln("scriptRun.reset(dummy, 0, 6) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(dummy, 6, 0);
errln("scriptRun.reset(dummy, 6, 0) did not produce an IllegalArgumentException!");
}catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(dummy, 0, -100);
errln("scriptRun.reset(dummy, 0, -100) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(dummy, -100, 0);
errln("scriptRun.reset(dummy, -100, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(dummy, 0, dummy.length);
} catch (IllegalArgumentException iae) {
errln("scriptRun.reset(dummy, 0, dummy.length) produced an IllegalArgumentException!");
}
try {
scriptRun.reset(0, 6);
errln("scriptRun.reset(0, 6) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
try {
scriptRun.reset(6, 0);
errln("scriptRun.reset(6, 0) did not produce an IllegalArgumentException!");
} catch (IllegalArgumentException iae) {
logln("PASS: scriptRun.reset failed as expected");
}
}
public void TestRuns()
{
for (int i = 0; i < testData.length; i += 1) {
RunTestData[] test = testData[i];
int stringLimit = 0;
int[] runStarts = new int[test.length + 1];
String testString = "";
UScriptRun scriptRun = null;
/*
* Fill in the test string and the runStarts array.
*/
for (int run = 0; run < test.length; run += 1) {
runStarts[run] = stringLimit;
stringLimit += test[run].runText.length();
testString += test[run].runText;
}
/* The limit of the last run */
runStarts[test.length] = stringLimit;
try {
scriptRun = new UScriptRun(testString);
CheckScriptRuns(scriptRun, runStarts, test);
} catch (IllegalArgumentException iae) {
errln("new UScriptRun(testString) produced an IllegalArgumentException!");
}
try {
scriptRun.reset();
CheckScriptRuns(scriptRun, runStarts, test);
} catch (IllegalArgumentException iae) {
errln("scriptRun.reset() on a valid UScriptRun produced an IllegalArgumentException!");
}
try {
scriptRun = new UScriptRun(testString.toCharArray());
CheckScriptRuns(scriptRun, runStarts, test);
} catch (IllegalArgumentException iae) {
errln("new UScriptRun(testString.toCharArray()) produced an IllegalArgumentException!");
}
try {
scriptRun.reset();
CheckScriptRuns(scriptRun, runStarts, test);
} catch (IllegalArgumentException iae) {
errln("scriptRun.reset() on a valid UScriptRun produced an IllegalArgumentException!");
}
try {
scriptRun = new UScriptRun();
if (scriptRun.next()) {
errln("scriptRun.next() on an empty UScriptRun returned true!");
}
} catch (IllegalArgumentException iae) {
errln("new UScriptRun() produced an IllegalArgumentException!");
}
try {
scriptRun.reset(testString, 0, testString.length());
CheckScriptRuns(scriptRun, runStarts, test);
} catch (IllegalArgumentException iae) {
errln("scriptRun.reset(testString, 0, testString.length) produced an IllegalArgumentException!");
}
try {
scriptRun.reset(testString.toCharArray(), 0, testString.length());
CheckScriptRuns(scriptRun, runStarts, test);
} catch (IllegalArgumentException iae) {
errln("scriptRun.reset(testString.toCharArray(), 0, testString.length) produced an IllegalArgumentException!");
}
String paddedTestString = padding + testString + padding;
int startOffset = padding.length();
int count = testString.length();
for (int run = 0; run < runStarts.length; run += 1) {
runStarts[run] += startOffset;
}
try {
scriptRun.reset(paddedTestString, startOffset, count);
CheckScriptRuns(scriptRun, runStarts, test);
} catch (IllegalArgumentException iae) {
errln("scriptRun.reset(paddedTestString, startOffset, count) produced an IllegalArgumentException!");
}
try {
scriptRun.reset(paddedTestString.toCharArray(), startOffset, count);
CheckScriptRuns(scriptRun, runStarts, test);
} catch (IllegalArgumentException iae) {
errln("scriptRun.reset(paddedTestString.toCharArray(), startOffset, count) produced an IllegalArgumentException!");
}
}
}
}