3 **********************************************************************
4 * Copyright (c) 2003-2009, International Business Machines
5 * Corporation and others. All Rights Reserved.
6 **********************************************************************
8 * Created: March 8 2003
10 **********************************************************************
12 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};
119 //#if defined(FOUNDATION10) || defined(J2SE13)
120 //## com.ibm.icu.impl.ByteBuffer buffer = com.ibm.icu.impl.ByteBuffer.wrap(ba);
122 java.nio.ByteBuffer buffer = java.nio.ByteBuffer.wrap(ba);
124 ByteArrayWrapper x = new ByteArrayWrapper(buffer);
126 ByteArrayWrapper y = new ByteArrayWrapper(ba, 3);
127 ByteArrayWrapper z = new ByteArrayWrapper(bb, 3);
130 if (!y.toString().equals("00 01 02")){
131 errln("FAIL: test toString : Failed!");
135 if (!x.equals(y) || !x.equals(z))
136 errln("FAIL: test (operator ==): Failed!");
137 if (x.hashCode()!=y.hashCode())
138 errln("FAIL: identical objects have different hash codes.");
141 y = new ByteArrayWrapper(bb, 4);
143 errln("FAIL: test (operator !=): Failed!");
145 // test sign of unequal comparison
146 if ((x.compareTo(y) > 0) != (y.compareTo(x) < 0)) {
147 errln("FAIL: comparisons not opposite sign");
151 private int compareLongUnsigned(int x, int y)
153 long x1 = x & 0xFFFFFFFFl;
154 long y1 = y & 0xFFFFFFFFl;
163 public void TestUnicodeSet(){
164 String[] array = new String[]{"a", "b", "c", "{de}"};
165 List list = Arrays.asList(array);
166 Set aset = new HashSet(list);
167 logln(" *** The source set's size is: " + aset.size());
169 UnicodeSet set = new UnicodeSet();
172 logln(" *** After addAll, the UnicodeSet size is: " + set.size());
173 //The size should also read 4, but 0 is seen instead
177 public void TestAssert(){
180 errln("FAIL: Assert.assrt(false)");
182 catch (IllegalStateException e) {
183 if (e.getMessage().equals("assert failed")) {
184 logln("Assert.assrt(false) works");
187 errln("FAIL: Assert.assrt(false) returned " + e.getMessage());
191 Assert.assrt("Assert message", false);
192 errln("FAIL: Assert.assrt(false)");
194 catch (IllegalStateException e) {
195 if (e.getMessage().equals("assert 'Assert message' failed")) {
196 logln("Assert.assrt(false) works");
199 errln("FAIL: Assert.assrt(false) returned " + e.getMessage());
203 Assert.fail("Assert message");
204 errln("FAIL: Assert.fail");
206 catch (IllegalStateException e) {
207 if (e.getMessage().equals("failure 'Assert message'")) {
208 logln("Assert.fail works");
211 errln("FAIL: Assert.fail returned " + e.getMessage());
215 Assert.fail(new InvalidFormatException());
216 errln("FAIL: Assert.fail with an exception");
218 catch (IllegalStateException e) {
219 logln("Assert.fail works");
223 public void TestCaseInsensitiveString() {
224 CaseInsensitiveString str1 = new CaseInsensitiveString("ThIs is A tEst");
225 CaseInsensitiveString str2 = new CaseInsensitiveString("This IS a test");
226 if (!str1.equals(str2)
227 || !str1.toString().equals(str1.getString())
228 || str1.toString().equals(str2.toString()))
230 errln("FAIL: str1("+str1+") != str2("+str2+")");