2
**********************************************************************
3
* Copyright (c) 2003-2009, International Business Machines
4
* Corporation and others. All Rights Reserved.
5
**********************************************************************
7
* Created: March 8 2003
9
**********************************************************************
11
package com.ibm.icu.dev.test.util;
13
import java.util.Arrays;
14
import java.util.HashSet;
15
import java.util.List;
18
import com.ibm.icu.dev.test.TestFmwk;
19
import com.ibm.icu.impl.Assert;
20
import com.ibm.icu.impl.InvalidFormatException;
21
import com.ibm.icu.impl.Utility;
22
import com.ibm.icu.text.UnicodeSet;
23
import com.ibm.icu.util.ByteArrayWrapper;
24
import com.ibm.icu.util.CaseInsensitiveString;
28
* @summary Test of internal Utility class
30
public class UtilityTest extends TestFmwk {
32
public static void main(String[] args) throws Exception {
33
new UtilityTest().run(args);
36
public void TestUnescape() {
38
"Sch\\u00f6nes Auto: \\u20ac 11240.\\fPrivates Zeichen: \\U00102345\\e\\cC\\n \\x1b\\x{263a}";
41
"Sch\u00F6nes Auto: \u20AC 11240.\u000CPrivates Zeichen: \uDBC8\uDF45\u001B\u0003\012 \u001B\u263A";
43
String result = Utility.unescape(input);
44
if (!result.equals(expect)) {
45
errln("FAIL: Utility.unescape() returned " + result + ", exp. " + expect);
49
public void TestFormat()
52
"the quick brown fox jumps over the lazy dog",
53
// result of this conversion will exceed the original length and
54
// cause a newline to be inserted
55
"testing space , quotations \"",
56
"testing weird supplementary characters \ud800\udc00",
57
"testing control characters \u0001 and line breaking!! \n are we done yet?"
60
" \"the quick brown fox jumps over the lazy dog\"",
61
" \"testing space , quotations \\042\"",
62
" \"testing weird supplementary characters \\uD800\\uDC00\"",
63
" \"testing control characters \\001 and line breaking!! \\n are we done ye\"+"
64
+ Utility.LINE_SEPARATOR + " \"t?\""
67
"\"the quick brown fox jumps over the lazy dog\"",
68
"\"testing space , quotations \\042\"",
69
"\"testing weird supplementary characters \\uD800\\uDC00\"",
70
"\"testing control characters \\001 and line breaking!! \\n are we done yet?\""
73
for (int i = 0; i < data.length; i ++) {
74
assertEquals("formatForSource(\"" + data[i] + "\")",
75
result[i], Utility.formatForSource(data[i]));
77
for (int i = 0; i < data.length; i ++) {
78
assertEquals("format1ForSource(\"" + data[i] + "\")",
79
result1[i], Utility.format1ForSource(data[i]));
83
public void TestHighBit()
85
int data[] = {-1, -1276, 0, 0xFFFF, 0x1234};
86
byte result[] = {-1, -1, -1, 15, 12};
87
for (int i = 0; i < data.length; i ++) {
88
if (Utility.highBit(data[i]) != result[i]) {
89
errln("Fail: Highest bit of \\u"
90
+ Integer.toHexString(data[i]) + " should be "
96
public void TestCompareUnsigned()
98
int data[] = {0, 1, 0x8fffffff, -1, Integer.MAX_VALUE,
99
Integer.MIN_VALUE, 2342423, -2342423};
100
for (int i = 0; i < data.length; i ++) {
101
for (int j = 0; j < data.length; j ++) {
102
if (Utility.compareUnsigned(data[i], data[j])
103
!= compareLongUnsigned(data[i], data[j])) {
104
errln("Fail: Unsigned comparison failed with " + data[i]
105
+ " " + data[i + 1]);
111
// This test indends to test the utility class ByteArrayWrapper
112
// Seems that the class is somewhat incomplete, for example
113
// - getHashCode(Object) is weird
114
// - PatternMatch feature(search part of array within the whole one) lacks
115
public void TestByteArrayWrapper()
117
byte[] ba = {0x00, 0x01, 0x02};
118
byte[] bb = {0x00, 0x01, 0x02, -1};
120
java.nio.ByteBuffer buffer = java.nio.ByteBuffer.wrap(ba);
121
ByteArrayWrapper x = new ByteArrayWrapper(buffer);
123
ByteArrayWrapper y = new ByteArrayWrapper(ba, 3);
124
ByteArrayWrapper z = new ByteArrayWrapper(bb, 3);
127
if (!y.toString().equals("00 01 02")){
128
errln("FAIL: test toString : Failed!");
132
if (!x.equals(y) || !x.equals(z))
133
errln("FAIL: test (operator ==): Failed!");
134
if (x.hashCode()!=y.hashCode())
135
errln("FAIL: identical objects have different hash codes.");
138
y = new ByteArrayWrapper(bb, 4);
140
errln("FAIL: test (operator !=): Failed!");
142
// test sign of unequal comparison
143
if ((x.compareTo(y) > 0) != (y.compareTo(x) < 0)) {
144
errln("FAIL: comparisons not opposite sign");
148
private int compareLongUnsigned(int x, int y)
150
long x1 = x & 0xFFFFFFFFl;
151
long y1 = y & 0xFFFFFFFFl;
160
public void TestUnicodeSet(){
161
String[] array = new String[]{"a", "b", "c", "{de}"};
162
List list = Arrays.asList(array);
163
Set aset = new HashSet(list);
164
logln(" *** The source set's size is: " + aset.size());
166
UnicodeSet set = new UnicodeSet();
169
logln(" *** After addAll, the UnicodeSet size is: " + set.size());
170
//The size should also read 4, but 0 is seen instead
174
public void TestAssert(){
177
errln("FAIL: Assert.assrt(false)");
179
catch (IllegalStateException e) {
180
if (e.getMessage().equals("assert failed")) {
181
logln("Assert.assrt(false) works");
184
errln("FAIL: Assert.assrt(false) returned " + e.getMessage());
188
Assert.assrt("Assert message", false);
189
errln("FAIL: Assert.assrt(false)");
191
catch (IllegalStateException e) {
192
if (e.getMessage().equals("assert 'Assert message' failed")) {
193
logln("Assert.assrt(false) works");
196
errln("FAIL: Assert.assrt(false) returned " + e.getMessage());
200
Assert.fail("Assert message");
201
errln("FAIL: Assert.fail");
203
catch (IllegalStateException e) {
204
if (e.getMessage().equals("failure 'Assert message'")) {
205
logln("Assert.fail works");
208
errln("FAIL: Assert.fail returned " + e.getMessage());
212
Assert.fail(new InvalidFormatException());
213
errln("FAIL: Assert.fail with an exception");
215
catch (IllegalStateException e) {
216
logln("Assert.fail works");
220
public void TestCaseInsensitiveString() {
221
CaseInsensitiveString str1 = new CaseInsensitiveString("ThIs is A tEst");
222
CaseInsensitiveString str2 = new CaseInsensitiveString("This IS a test");
223
if (!str1.equals(str2)
224
|| !str1.toString().equals(str1.getString())
225
|| str1.toString().equals(str2.toString()))
227
errln("FAIL: str1("+str1+") != str2("+str2+")");