1 // 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html#License 3 /* 4 ****************************************************************************** 5 * Copyright (C) 2007-2010, International Business Machines Corporation and * 6 * others. All Rights Reserved. * 7 ****************************************************************************** 8 */ 9 10 // Copyright 2006 Google Inc. All Rights Reserved. 11 12 package com.ibm.icu.dev.test.duration; 13 14 import java.io.StringReader; 15 import java.io.StringWriter; 16 17 import org.junit.Test; 18 import org.junit.runner.RunWith; 19 import org.junit.runners.JUnit4; 20 21 import com.ibm.icu.dev.test.TestFmwk; 22 import com.ibm.icu.impl.duration.impl.XMLRecordReader; 23 import com.ibm.icu.impl.duration.impl.XMLRecordWriter; 24 25 @RunWith(JUnit4.class) 26 public class DataReadWriteTest extends TestFmwk { 27 // strip line ends and trailing spaces 28 private String normalize(String str) { 29 StringBuffer sb = new StringBuffer(); 30 boolean inLine = true; 31 for (int i = 0; i < str.length(); ++i) { 32 char c = str.charAt(i); 33 if (inLine && c == ' ') { 34 continue; 35 } 36 if (c == '\n') { 37 inLine = true; 38 continue; 39 } 40 inLine = false; 41 sb.append("" + c); 42 } 43 return sb.toString(); 44 } 45 46 @Test 47 public void testOpenClose() { 48 StringWriter sw = new StringWriter(); 49 XMLRecordWriter xrw = new XMLRecordWriter(sw); 50 assertTrue(null, xrw.open("Test")); 51 assertTrue(null, xrw.close()); 52 xrw.flush(); 53 String str = sw.toString(); 54 assertEquals(null, "<Test></Test>", normalize(str)); 55 56 StringReader sr = new StringReader(str); 57 XMLRecordReader xrr = new XMLRecordReader(sr); 58 assertTrue(null, xrr.open("Test")); 59 assertTrue(null, xrr.close()); 60 } 61 62 @Test 63 public void testBool() { 64 StringWriter sw = new StringWriter(); 65 XMLRecordWriter xrw = new XMLRecordWriter(sw); 66 xrw.bool("x", true); 67 xrw.bool("y", false); 68 xrw.flush(); 69 String str = sw.toString(); 70 assertEquals(null, "<x>true</x><y>false</y>", normalize(str)); 71 72 StringReader sr = new StringReader(str); 73 XMLRecordReader xrr = new XMLRecordReader(sr); 74 assertTrue(null, xrr.bool("x")); 75 assertFalse(null, xrr.bool("y")); 76 } 77 78 @Test 79 public void testBoolArray() { 80 boolean[][] datas = { 81 {}, 82 { true }, 83 { true, false }, 84 { true, false, true }, 85 }; 86 87 String[] targets = { 88 "<testList></testList>", 89 "<testList><test>true</test></testList>", 90 "<testList><test>true</test><test>false</test></testList>", 91 "<testList><test>true</test><test>false</test>" + 92 "<test>true</test></testList>", 93 }; 94 95 for (int j = 0; j < datas.length; ++j) { 96 boolean[] data = datas[j]; 97 String target = targets[j]; 98 99 StringWriter sw = new StringWriter(); 100 XMLRecordWriter xrw = new XMLRecordWriter(sw); 101 xrw.boolArray("test", data); 102 xrw.flush(); 103 String str = sw.toString(); 104 assertEquals("" + j, target, normalize(str)); 105 106 StringReader sr = new StringReader(str); 107 XMLRecordReader xrr = new XMLRecordReader(sr); 108 boolean[] out = xrr.boolArray("test"); 109 110 assertNotNull("" + j, out); 111 assertEquals("" + j, data.length, out.length); 112 for (int i = 0; i < data.length; ++i) { 113 assertEquals("" + j + "/" + i, data[i], out[i]); 114 } 115 } 116 } 117 118 @Test 119 public void testCharacter() { 120 StringWriter sw = new StringWriter(); 121 XMLRecordWriter xrw = new XMLRecordWriter(sw); 122 xrw.character("x", 'a'); 123 xrw.character("y", 'b'); 124 xrw.flush(); 125 String str = sw.toString(); 126 assertEquals(null, "<x>a</x><y>b</y>", normalize(str)); 127 128 StringReader sr = new StringReader(str); 129 XMLRecordReader xrr = new XMLRecordReader(sr); 130 assertEquals(null, 'a', xrr.character("x")); 131 assertEquals(null, 'b', xrr.character("y")); 132 } 133 134 @Test 135 public void testCharacterArray() { 136 char[][] datas = { 137 {}, 138 { 'a' }, 139 { 'a', 'b' }, 140 { 'a', 'b', 'c' }, 141 }; 142 143 String[] targets = { 144 "<testList></testList>", 145 "<testList><test>a</test></testList>", 146 "<testList><test>a</test><test>b</test></testList>", 147 "<testList><test>a</test><test>b</test>" + 148 "<test>c</test></testList>", 149 }; 150 151 for (int j = 0; j < datas.length; ++j) { 152 char[] data = datas[j]; 153 String target = targets[j]; 154 155 StringWriter sw = new StringWriter(); 156 XMLRecordWriter xrw = new XMLRecordWriter(sw); 157 xrw.characterArray("test", data); 158 xrw.flush(); 159 String str = sw.toString(); 160 assertEquals("" + j, target, normalize(str)); 161 162 StringReader sr = new StringReader(str); 163 XMLRecordReader xrr = new XMLRecordReader(sr); 164 char[] out = xrr.characterArray("test"); 165 166 assertNotNull("" + j, out); 167 assertEquals("" + j, data.length, out.length); 168 for (int i = 0; i < data.length; ++i) { 169 assertEquals("" + j + "/" + i, data[i], out[i]); 170 } 171 } 172 } 173 174 @Test 175 public void testNamedIndex() { 176 StringWriter sw = new StringWriter(); 177 XMLRecordWriter xrw = new XMLRecordWriter(sw); 178 String[] names = { "zero", "one" }; 179 180 xrw.namedIndex("x", names, 0); 181 xrw.namedIndex("y", names, 1); 182 xrw.flush(); 183 String str = sw.toString(); 184 assertEquals(null, "<x>zero</x><y>one</y>", normalize(str)); 185 186 StringReader sr = new StringReader(str); 187 XMLRecordReader xrr = new XMLRecordReader(sr); 188 assertEquals(null, 0, xrr.namedIndex("x", names)); 189 assertEquals(null, 1, xrr.namedIndex("y", names)); 190 } 191 192 @Test 193 public void testNamedIndexArray() { 194 String[] names = { "zero", "one" }; 195 byte[][] datas = { 196 {}, 197 { 0 }, 198 { 1, 0 }, 199 { 0, 1, 0 }, 200 }; 201 202 String[] targets = { 203 "<testList></testList>", 204 "<testList><test>zero</test></testList>", 205 "<testList><test>one</test><test>zero</test></testList>", 206 "<testList><test>zero</test><test>one</test>" + 207 "<test>zero</test></testList>", 208 }; 209 210 for (int j = 0; j < datas.length; ++j) { 211 byte[] data = datas[j]; 212 String target = targets[j]; 213 214 StringWriter sw = new StringWriter(); 215 XMLRecordWriter xrw = new XMLRecordWriter(sw); 216 xrw.namedIndexArray("test", names, data); 217 xrw.flush(); 218 String str = sw.toString(); 219 assertEquals("" + j, target, normalize(str)); 220 221 StringReader sr = new StringReader(str); 222 XMLRecordReader xrr = new XMLRecordReader(sr); 223 byte[] out = xrr.namedIndexArray("test", names); 224 225 assertNotNull("" + j, out); 226 assertEquals("" + j, data.length, out.length); 227 for (int i = 0; i < data.length; ++i) { 228 assertEquals("" + j + "/" + i, data[i], out[i]); 229 } 230 } 231 } 232 233 @Test 234 public void testString() { 235 StringWriter sw = new StringWriter(); 236 XMLRecordWriter xrw = new XMLRecordWriter(sw); 237 238 String s = " This is <a> &&\t test. "; 239 String s1 = " This is <a> && test. "; 240 String t = " This is <a> && test. "; 241 xrw.string("x", s); 242 xrw.flush(); 243 String str = sw.toString(); 244 assertEquals("\n'" + normalize(str) + "' = \n'<x>" + t + "</x>", "<x>" 245 + t + "</x>", normalize(str)); 246 247 StringReader sr = new StringReader(str); 248 XMLRecordReader xrr = new XMLRecordReader(sr); 249 String res = xrr.string("x"); 250 assertEquals("\n'" + res + "' == \n'" + s1 + "'", s1, res); 251 } 252 253 @Test 254 public void testStringArray() { 255 String s1 = ""; 256 String s2 = " "; 257 String s3 = "This is a test"; 258 String s4 = " It is\n only a test\t "; 259 String s4x = " It is only a test "; 260 261 String[][] datas = { 262 {}, 263 { s1 }, 264 { s2, s1 }, 265 { s3, s2, s1 }, 266 { s3, null, s1, null }, 267 { s4, s1, s3, s2 } 268 }; 269 270 String[] targets = { 271 "<testList></testList>", 272 "<testList><test>" + s1 + "</test></testList>", 273 "<testList><test>" + s2 + "</test><test>" + s1 + "</test></testList>", 274 "<testList><test>" + s3 + "</test><test>" + s2 + 275 "</test><test>" + s1 + "</test></testList>", 276 "<testList><test>" + s3 + "</test><test>Null</test><test>" + s1 + 277 "</test><test>Null</test></testList>", 278 "<testList><test>" + s4x + "</test><test>" + s1 + 279 "</test><test>" + s3 + "</test><test>" + s2 + "</test></testList>", 280 }; 281 282 for (int j = 0; j < datas.length; ++j) { 283 String[] data = datas[j]; 284 String target = targets[j]; 285 286 StringWriter sw = new StringWriter(); 287 XMLRecordWriter xrw = new XMLRecordWriter(sw); 288 xrw.stringArray("test", data); 289 xrw.flush(); 290 String str = sw.toString(); 291 assertEquals("" + j + " '" + str + "'", target, normalize(str)); 292 293 StringReader sr = new StringReader(str); 294 XMLRecordReader xrr = new XMLRecordReader(sr); 295 String[] out = xrr.stringArray("test"); 296 297 assertNotNull("" + j, out); 298 assertEquals("" + j, data.length, out.length); 299 for (int i = 0; i < data.length; ++i) { 300 String standin = data[i]; 301 if (s4.equals(standin)) { 302 standin = s4x; 303 } 304 assertEquals("" + j + "/" + i + " '" + out[i] + "'", standin, 305 out[i]); 306 } 307 } 308 } 309 310 @Test 311 public void testStringTable() { 312 String s1 = ""; 313 String s2 = " "; 314 String s3 = "This is a test"; 315 String s4 = "It is only a test"; 316 317 String[][] table = { 318 {}, 319 { s1 }, 320 { s2, s1 }, 321 { s3, s2, s1 }, 322 null, 323 { s4, s1, s3, s2 } 324 }; 325 326 String target = "<testTable>" + 327 "<testList></testList>" + 328 "<testList><test></test></testList>" + 329 "<testList><test> </test><test></test></testList>" + 330 "<testList><test>This is a test</test><test> </test>" + 331 "<test></test></testList>" + 332 "<testList>Null</testList>" + 333 "<testList><test>It is only a test</test><test></test>" + 334 "<test>This is a test</test><test> </test></testList>" + 335 "</testTable>"; 336 337 StringWriter sw = new StringWriter(); 338 XMLRecordWriter xrw = new XMLRecordWriter(sw); 339 xrw.stringTable("test", table); 340 xrw.flush(); 341 String str = sw.toString(); 342 assertEquals("'" + str + "'", target, normalize(str)); 343 } 344 345 @Test 346 public void testOmittedFields() { 347 StringWriter sw = new StringWriter(); 348 XMLRecordWriter xrw = new XMLRecordWriter(sw); 349 xrw.open("omit"); 350 xrw.bool("x", true); 351 xrw.bool("y", false); 352 xrw.close(); 353 xrw.flush(); 354 String str = sw.toString(); 355 356 StringReader sr = new StringReader(str); 357 XMLRecordReader xrr = new XMLRecordReader(sr); 358 assertTrue(null, xrr.open("omit")); 359 assertTrue(null, xrr.bool("x")); 360 assertEquals(null, '\uffff', xrr.character("z")); 361 assertFalse(null, xrr.bool("y")); 362 assertTrue(null, xrr.close()); 363 } 364 } 365