]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/tests/core/src/com/ibm/icu/dev/test/compression/DecompressionTest.java
Upgrade ICU4J.
[Dictionary.git] / jars / icu4j-52_1 / main / tests / core / src / com / ibm / icu / dev / test / compression / DecompressionTest.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 1996-2010, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7 package com.ibm.icu.dev.test.compression;
8
9 import com.ibm.icu.dev.test.TestFmwk;
10 import com.ibm.icu.text.UnicodeDecompressor;
11
12 public class DecompressionTest extends TestFmwk {
13     public static void main(String[] args) throws Exception {
14         new DecompressionTest().run(args);
15     }
16
17     /** Print out a segment of a character array, if in verbose mode */
18     private void log(char [] chars, int start, int count) {
19         log("|");
20         for(int i = start; i < start + count; ++i) {
21             log(String.valueOf(chars[i]));
22         }
23         log("|");
24     }
25
26     /** Print out a segment of a character array, followed by a newline */
27     private void logln(char [] chars, int start, int count)
28     {
29         log(chars, start, count);
30         logln("");
31     }
32
33     /** Decompress the two segments */
34     private String decompressTest(byte [] segment1, byte [] segment2) {
35         StringBuffer s = new StringBuffer();
36         UnicodeDecompressor myDecompressor = new UnicodeDecompressor();
37
38         int [] bytesRead = new int[1];
39         char [] charBuffer = new char [2*(segment1.length + segment2.length)];
40         int count1 = 0, count2 = 0;
41
42         count1 = myDecompressor.decompress(segment1, 0, segment1.length,
43                                            bytesRead,
44                                            charBuffer, 0, charBuffer.length);
45         
46         logln("Segment 1 (" + segment1.length + " bytes) " +
47                 "decompressed into " + count1  + " chars");
48         logln("Bytes consumed: " + bytesRead[0]);
49
50         logln("Got chars: ");
51         logln(charBuffer, 0, count1);
52         s.append(charBuffer, 0, count1);
53
54         count2 = myDecompressor.decompress(segment2, 0, segment2.length,
55                                            bytesRead,
56                                            charBuffer, count1, 
57                                            charBuffer.length);
58         
59         logln("Segment 2 (" + segment2.length + " bytes) " +
60                 "decompressed into " + count2  + " chars");
61         logln("Bytes consumed: " + bytesRead[0]);
62
63         logln("Got chars: ");
64         logln(charBuffer, count1, count2);
65         
66         s.append(charBuffer, count1, count2);
67
68         logln("Result: ");
69         logln(charBuffer, 0, count1 + count2);
70         logln("====================");
71
72         return s.toString();
73     }
74
75
76     public void TestDecompression() throws Exception {
77         String result;
78
79         // compressed segment breaking on a define window sequence
80         /*                   B     o     o     t     h     SD1  */
81         byte [] segment1 = { 0x42, 0x6f, 0x6f, 0x74, 0x68, 0x19 };
82
83         // continuation
84         /*                   IDX   ,           S     .          */
85         byte [] segment2 = { 0x01, 0x2c, 0x20, 0x53, 0x2e };
86         
87         result = decompressTest(segment1, segment2);
88         if(! result.equals("Booth, S.")) {
89             errln("Decompression test failed");
90             return;
91         }
92
93         // compressed segment breaking on a quote unicode sequence
94         /*                   B     o     o     t     SQU        */
95         byte [] segment3 = { 0x42, 0x6f, 0x6f, 0x74, 0x0e, 0x00 };
96
97         // continuation
98         /*                   h     ,           S     .          */
99         byte [] segment4 = { 0x68, 0x2c, 0x20, 0x53, 0x2e };
100
101         result = decompressTest(segment3, segment4);
102         if(! result.equals("Booth, S.")) {
103             errln("Decompression test failed");
104             return;
105         }
106
107
108         // compressed segment breaking on a quote unicode sequence
109         /*                   SCU   UQU                         */
110         byte [] segment5 = { 0x0f, (byte)0xf0, 0x00 };
111
112         // continuation
113         /*                   B                                 */
114         byte [] segment6 = { 0x42 };
115
116         result = decompressTest(segment5, segment6);
117         if(! result.equals("B")) {
118             errln("Decompression test failed");
119             return;
120         }
121     }
122     
123     /* Testing the method
124      *      public int decompress(*** 
125      */
126     public void TestDecompress(){
127         char[] charBufferBlank = {};
128         char[] charBuffer1 = {'a'};
129         char[] charValid = {'d','u','m','m','y'};
130         
131         // Test when "if(charBuffer.length < 2 || (charBufferLimit - charBufferStart) < 2)" is true
132         //      The following tests when "charBuffer.length < 2"
133         UnicodeDecompressor ud = new UnicodeDecompressor();
134         try{
135             ud.decompress(null, 0, 0, null, null, 4, 0);
136             errln("UnicodeDecompressor.decompress was suppose to return an exception.");
137         } catch(Exception e){}
138         
139         try{
140             ud.decompress(null, 0, 0, null, charBufferBlank, 4, 0);
141             errln("UnicodeDecompressor.decompress was suppose to return an exception.");
142         } catch(Exception e){}
143         
144         try{
145             ud.decompress(null, 0, 0, null, charBuffer1, 4, 0);
146             errln("UnicodeDecompressor.decompress was suppose to return an exception.");
147         } catch(Exception e){}
148         
149         //      The following tests when "(charBufferLimit - charBufferStart) < 2"
150         try{
151             ud.decompress(null, 0, 0, null, charValid, 0, 0);
152             errln("UnicodeDecompressor.decompress was suppose to return an exception.");
153         } catch(Exception e){}
154         
155         try{
156             ud.decompress(null, 0, 0, null, charValid, 1, 0);
157             errln("UnicodeDecompressor.decompress was suppose to return an exception.");
158         } catch(Exception e){}
159         
160         try{
161             ud.decompress(null, 0, 0, null, charValid, 1, 1);
162             errln("UnicodeDecompressor.decompress was suppose to return an exception.");
163         } catch(Exception e){}
164         
165         try{
166             ud.decompress(null, 0, 0, null, charValid, 0, 1);
167             errln("UnicodeDecompressor.decompress was suppose to return an exception.");
168         } catch(Exception e){}
169         
170         try{
171             ud = new UnicodeDecompressor();
172             byte[] b = {
173                     (byte) 0x80, (byte) 0x81, (byte) 0x82, (byte) 0x83, (byte) 0x84, 
174                     (byte) 0x85, (byte) 0x86, (byte) 0x87, (byte) 0x88, (byte) 0x89,
175                     (byte) 0x8A, (byte) 0x8B, (byte) 0x8C, (byte) 0x8D, (byte) 0x8E,
176                     (byte) 0x8F, (byte) 0x90, (byte) 0x91, (byte) 0x92, (byte) 0x93,
177                     (byte) 0x94, (byte) 0x95, (byte) 0x96, (byte) 0x97, (byte) 0x98,
178                     (byte) 0x99, (byte) 0x9A, (byte) 0x9B, (byte) 0x9C, (byte) 0x9D,
179                     (byte) 0x9E, (byte) 0x9F, (byte) 0xA0, (byte) 0xA1, (byte) 0xA2,
180                     (byte) 0xA3, (byte) 0xA4, (byte) 0xA5, (byte) 0xA6, (byte) 0xA7,
181                     (byte) 0xA8, (byte) 0xA9, (byte) 0xAA, (byte) 0xAB, (byte) 0xAC,
182                     (byte) 0xAD, (byte) 0xAE, (byte) 0xAF, (byte) 0xB0, (byte) 0xB1,
183                     (byte) 0xB2, (byte) 0xB3, (byte) 0xB4, (byte) 0xB5, (byte) 0xB6,
184                     (byte) 0xB7, (byte) 0xB8, (byte) 0xB9, (byte) 0xBA, (byte) 0xBB,
185                     (byte) 0xBC, (byte) 0xBD, (byte) 0xBE, (byte) 0xBF, (byte) 0xC0,
186                     (byte) 0xC1, (byte) 0xC2, (byte) 0xC3, (byte) 0xC4, (byte) 0xC5,
187                     (byte) 0xC6, (byte) 0xC7, (byte) 0xC8, (byte) 0xC9, (byte) 0xCA,
188                     (byte) 0xCB, (byte) 0xCC, (byte) 0xCD, (byte) 0xCE, (byte) 0xCF,
189                     (byte) 0xD0, (byte) 0xD1, (byte) 0xD2, (byte) 0xD3, (byte) 0xD4,
190                     (byte) 0xD5, (byte) 0xD6, (byte) 0xD7, (byte) 0xD8, (byte) 0xD9,
191                     (byte) 0xDA, (byte) 0xDB, (byte) 0xDC, (byte) 0xDD, (byte) 0xDE,
192                     (byte) 0xDF, (byte) 0xE0, (byte) 0xE1, (byte) 0xE2, (byte) 0xE3,
193                     (byte) 0xE4, (byte) 0xE5, (byte) 0xE6, (byte) 0xE7, (byte) 0xE8,
194                     (byte) 0xE9, (byte) 0xEA, (byte) 0xEB, (byte) 0xEC, (byte) 0xED,
195                     (byte) 0xEE, (byte) 0xEF, (byte) 0xF0, (byte) 0xF1, (byte) 0xF2,
196                     (byte) 0xF3, (byte) 0xF4, (byte) 0xF5, (byte) 0xF6, (byte) 0xF7,
197                     (byte) 0xF8, (byte) 0xF9, (byte) 0xFA, (byte) 0xFB, (byte) 0xFC,
198                     (byte) 0xFD, (byte) 0xFE, (byte) 0xFF,
199                     (byte) 0x00, (byte) 0x09, (byte) 0x0A, (byte) 0x0D,
200                     (byte) 0x20, (byte) 0x21, (byte) 0x22, (byte) 0x23, (byte) 0x24,
201                     (byte) 0x25, (byte) 0x26, (byte) 0x27, (byte) 0x28, (byte) 0x29,
202                     (byte) 0x2A, (byte) 0x2B, (byte) 0x2C, (byte) 0x2D, (byte) 0x2E,
203                     (byte) 0x2F, (byte) 0x30, (byte) 0x31, (byte) 0x32, (byte) 0x33,
204                     (byte) 0x34, (byte) 0x35, (byte) 0x36, (byte) 0x37, (byte) 0x38,
205                     (byte) 0x39, (byte) 0x3A, (byte) 0x3B, (byte) 0x3C, (byte) 0x3D,
206                     (byte) 0x3E, (byte) 0x3F, (byte) 0x40, (byte) 0x41, (byte) 0x42,
207                     (byte) 0x43, (byte) 0x44, (byte) 0x45, (byte) 0x46, (byte) 0x47,
208                     (byte) 0x48, (byte) 0x49, (byte) 0x4A, (byte) 0x4B, (byte) 0x4C,
209                     (byte) 0x4D, (byte) 0x4E, (byte) 0x4F, (byte) 0x50, (byte) 0x51,
210                     (byte) 0x52, (byte) 0x53, (byte) 0x54, (byte) 0x55, (byte) 0x56,
211                     (byte) 0x57, (byte) 0x58, (byte) 0x59, (byte) 0x5A, (byte) 0x5B,
212                     (byte) 0x5C, (byte) 0x5D, (byte) 0x5E, (byte) 0x5F, (byte) 0x60,
213                     (byte) 0x61, (byte) 0x62, (byte) 0x63, (byte) 0x64, (byte) 0x65,
214                     (byte) 0x66, (byte) 0x67, (byte) 0x68, (byte) 0x69, (byte) 0x6A,
215                     (byte) 0x6B, (byte) 0x6C, (byte) 0x6D, (byte) 0x6E, (byte) 0x6F,
216                     (byte) 0x70, (byte) 0x71, (byte) 0x72, (byte) 0x73, (byte) 0x74,
217                     (byte) 0x75, (byte) 0x76, (byte) 0x77, (byte) 0x78, (byte) 0x79,
218                     (byte) 0x7A, (byte) 0x7B, (byte) 0x7C, (byte) 0x7D, (byte) 0x7E,
219                     (byte) 0x7F,
220                     (byte) UnicodeDecompressor.SQUOTEU,
221                     (byte) UnicodeDecompressor.SCHANGEU, 
222                     (byte) UnicodeDecompressor.SQUOTE0, (byte) UnicodeDecompressor.SQUOTE1, (byte) UnicodeDecompressor.SQUOTE2, (byte) UnicodeDecompressor.SQUOTE3,
223                     (byte) UnicodeDecompressor.SQUOTE4, (byte) UnicodeDecompressor.SQUOTE5, (byte) UnicodeDecompressor.SQUOTE6, (byte) UnicodeDecompressor.SQUOTE7,
224                     (byte) UnicodeDecompressor.SCHANGE0, (byte) UnicodeDecompressor.SCHANGE1, (byte) UnicodeDecompressor.SCHANGE2, (byte) UnicodeDecompressor.SCHANGE3,
225                     (byte) UnicodeDecompressor.SCHANGE4, (byte) UnicodeDecompressor.SCHANGE5, (byte) UnicodeDecompressor.SCHANGE6, (byte) UnicodeDecompressor.SCHANGE7,
226                     (byte) UnicodeDecompressor.SDEFINE0, (byte) UnicodeDecompressor.SDEFINE1, (byte) UnicodeDecompressor.SDEFINE2, (byte) UnicodeDecompressor.SDEFINE3,
227                     (byte) UnicodeDecompressor.SDEFINE4, (byte) UnicodeDecompressor.SDEFINE5, (byte) UnicodeDecompressor.SDEFINE6, (byte) UnicodeDecompressor.SDEFINE7,
228                     (byte) UnicodeDecompressor.SDEFINEX, (byte) UnicodeDecompressor.SRESERVED,
229                     };
230             char[] c = new char[b.length];
231             ud.decompress(b, 0, b.length, null, c, 0, c.length);
232         } catch(Exception e){
233             errln("UnicodeDecompressor.decompress() was not suppose to return an exception.");
234         }
235     }
236
237 }