12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others. 22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert****************************************************************************** 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Copyright (C) 2007-2010, International Business Machines Corporation and * 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* others. All Rights Reserved. * 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert****************************************************************************** 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/ 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// Copyright 2006 Google Inc. All Rights Reserved. 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.duration; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.StringReader; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.StringWriter; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 172d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport org.junit.Test; 18fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertimport org.junit.runner.RunWith; 19fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertimport org.junit.runners.JUnit4; 202d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.duration.impl.XMLRecordReader; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.duration.impl.XMLRecordWriter; 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert@RunWith(JUnit4.class) 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class DataReadWriteTest extends TestFmwk { 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // strip line ends and trailing spaces 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private String normalize(String str) { 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer sb = new StringBuffer(); 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean inLine = true; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < str.length(); ++i) { 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char c = str.charAt(i); 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (inLine && c == ' ') { 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (c == '\n') { 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert inLine = true; 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert inLine = false; 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert sb.append("" + c); 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return sb.toString(); 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 462d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testOpenClose() { 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, xrw.open("Test")); 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, xrw.close()); 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, "<Test></Test>", normalize(str)); 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, xrr.open("Test")); 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, xrr.close()); 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 622d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testBool() { 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.bool("x", true); 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.bool("y", false); 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, "<x>true</x><y>false</y>", normalize(str)); 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, xrr.bool("x")); 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse(null, xrr.bool("y")); 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 782d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testBoolArray() { 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean[][] datas = { 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {}, 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { true }, 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { true, false }, 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { true, false, true }, 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 86fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] targets = { 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList></testList>", 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>true</test></testList>", 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>true</test><test>false</test></testList>", 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>true</test><test>false</test>" + 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<test>true</test></testList>", 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int j = 0; j < datas.length; ++j) { 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean[] data = datas[j]; 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String target = targets[j]; 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.boolArray("test", data); 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j, target, normalize(str)); 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean[] out = xrr.boolArray("test"); 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("" + j, out); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j, data.length, out.length); 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < data.length; ++i) { 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j + "/" + i, data[i], out[i]); 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1182d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testCharacter() { 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.character("x", 'a'); 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.character("y", 'b'); 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, "<x>a</x><y>b</y>", normalize(str)); 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, 'a', xrr.character("x")); 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, 'b', xrr.character("y")); 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1342d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testCharacterArray() { 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[][] datas = { 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {}, 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 'a' }, 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 'a', 'b' }, 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 'a', 'b', 'c' }, 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] targets = { 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList></testList>", 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>a</test></testList>", 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>a</test><test>b</test></testList>", 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>a</test><test>b</test>" + 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<test>c</test></testList>", 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int j = 0; j < datas.length; ++j) { 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] data = datas[j]; 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String target = targets[j]; 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.characterArray("test", data); 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j, target, normalize(str)); 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] out = xrr.characterArray("test"); 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("" + j, out); 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j, data.length, out.length); 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < data.length; ++i) { 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j + "/" + i, data[i], out[i]); 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1742d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testNamedIndex() { 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] names = { "zero", "one" }; 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.namedIndex("x", names, 0); 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.namedIndex("y", names, 1); 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, "<x>zero</x><y>one</y>", normalize(str)); 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, 0, xrr.namedIndex("x", names)); 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, 1, xrr.namedIndex("y", names)); 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1922d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testNamedIndexArray() { 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] names = { "zero", "one" }; 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[][] datas = { 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {}, 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0 }, 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1, 0 }, 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0, 1, 0 }, 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] targets = { 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList></testList>", 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>zero</test></testList>", 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>one</test><test>zero</test></testList>", 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>zero</test><test>one</test>" + 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<test>zero</test></testList>", 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int j = 0; j < datas.length; ++j) { 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] data = datas[j]; 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String target = targets[j]; 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.namedIndexArray("test", names, data); 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j, target, normalize(str)); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] out = xrr.namedIndexArray("test", names); 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("" + j, out); 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j, data.length, out.length); 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < data.length; ++i) { 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j + "/" + i, data[i], out[i]); 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2332d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testString() { 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s = " This is <a> &&\t test. "; 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s1 = " This is <a> && test. "; 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String t = " This is <a> && test. "; 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.string("x", s); 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("\n'" + normalize(str) + "' = \n'<x>" + t + "</x>", "<x>" 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + t + "</x>", normalize(str)); 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String res = xrr.string("x"); 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("\n'" + res + "' == \n'" + s1 + "'", s1, res); 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2532d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testStringArray() { 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s1 = ""; 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s2 = " "; 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s3 = "This is a test"; 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s4 = " It is\n only a test\t "; 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s4x = " It is only a test "; 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 261fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert String[][] datas = { 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {}, 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s1 }, 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s2, s1 }, 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s3, s2, s1 }, 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s3, null, s1, null }, 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s4, s1, s3, s2 } 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] targets = { 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList></testList>", 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>" + s1 + "</test></testList>", 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>" + s2 + "</test><test>" + s1 + "</test></testList>", 274fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert "<testList><test>" + s3 + "</test><test>" + s2 + 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "</test><test>" + s1 + "</test></testList>", 276fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert "<testList><test>" + s3 + "</test><test>Null</test><test>" + s1 + 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "</test><test>Null</test></testList>", 278fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert "<testList><test>" + s4x + "</test><test>" + s1 + 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "</test><test>" + s3 + "</test><test>" + s2 + "</test></testList>", 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int j = 0; j < datas.length; ++j) { 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] data = datas[j]; 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String target = targets[j]; 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.stringArray("test", data); 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j + " '" + str + "'", target, normalize(str)); 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] out = xrr.stringArray("test"); 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotNull("" + j, out); 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j, data.length, out.length); 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < data.length; ++i) { 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String standin = data[i]; 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (s4.equals(standin)) { 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert standin = s4x; 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("" + j + "/" + i + " '" + out[i] + "'", standin, 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out[i]); 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3102d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testStringTable() { 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s1 = ""; 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s2 = " "; 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s3 = "This is a test"; 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s4 = "It is only a test"; 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 317fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert String[][] table = { 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {}, 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s1 }, 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s2, s1 }, 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s3, s2, s1 }, 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert null, 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { s4, s1, s3, s2 } 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String target = "<testTable>" + 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList></testList>" + 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test></test></testList>" + 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test> </test><test></test></testList>" + 330fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert "<testList><test>This is a test</test><test> </test>" + 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<test></test></testList>" + 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList>Null</testList>" + 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<testList><test>It is only a test</test><test></test>" + 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<test>This is a test</test><test> </test></testList>" + 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "</testTable>"; 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.stringTable("test", table); 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("'" + str + "'", target, normalize(str)); 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3452d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testOmittedFields() { 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringWriter sw = new StringWriter(); 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordWriter xrw = new XMLRecordWriter(sw); 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.open("omit"); 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.bool("x", true); 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.bool("y", false); 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.close(); 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert xrw.flush(); 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = sw.toString(); 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringReader sr = new StringReader(str); 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert XMLRecordReader xrr = new XMLRecordReader(sr); 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, xrr.open("omit")); 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, xrr.bool("x")); 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, '\uffff', xrr.character("z")); 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertFalse(null, xrr.bool("y")); 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, xrr.close()); 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 365