DataReadWriteTest.java revision 7935b1839a081ed19ae0d33029ad3c09632a2caa
17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Copyright (C) 2007-2010, International Business Machines Corporation and   *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* others. All Rights Reserved.                                               *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// Copyright 2006 Google Inc.  All Rights Reserved.
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.duration;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.StringReader;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.StringWriter;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.duration.impl.XMLRecordReader;
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.duration.impl.XMLRecordWriter;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class DataReadWriteTest extends TestFmwk {
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Invoke the tests.
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String[] args) {
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new DataReadWriteTest().run(args);
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // strip line ends and trailing spaces
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private String normalize(String str) {
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringBuffer sb = new StringBuffer();
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean inLine = true;
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int i = 0; i < str.length(); ++i) {
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            char c = str.charAt(i);
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (inLine && c == ' ') {
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                continue;
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (c == '\n') {
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                inLine = true;
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                continue;
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            inLine = false;
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sb.append("" + c);
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return sb.toString();
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
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
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testBool() {
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringWriter sw = new StringWriter();
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordWriter xrw = new XMLRecordWriter(sw);
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.bool("x", true);
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.bool("y", false);
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.flush();
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String str = sw.toString();
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals(null, "<x>true</x><y>false</y>", normalize(str));
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringReader sr = new StringReader(str);
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordReader xrr = new XMLRecordReader(sr);
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertTrue(null, xrr.bool("x"));
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertFalse(null, xrr.bool("y"));
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testBoolArray() {
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean[][] datas = {
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            {},
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { true },
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { true, false },
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { true, false, true },
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] targets = {
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList></testList>",
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>true</test></testList>",
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>true</test><test>false</test></testList>",
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>true</test><test>false</test>" +
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<test>true</test></testList>",
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int j = 0; j < datas.length; ++j) {
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            boolean[] data = datas[j];
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String target = targets[j];
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            StringWriter sw = new StringWriter();
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            XMLRecordWriter xrw = new XMLRecordWriter(sw);
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            xrw.boolArray("test", data);
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            xrw.flush();
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String str = sw.toString();
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertEquals("" + j, target, normalize(str));
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            StringReader sr = new StringReader(str);
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            XMLRecordReader xrr = new XMLRecordReader(sr);
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            boolean[] out = xrr.boolArray("test");
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertNotNull("" + j, out);
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertEquals("" + j, data.length, out.length);
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int i = 0; i < data.length; ++i) {
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                assertEquals("" + j + "/" + i, data[i], out[i]);
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testCharacter() {
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringWriter sw = new StringWriter();
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordWriter xrw = new XMLRecordWriter(sw);
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.character("x", 'a');
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.character("y", 'b');
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.flush();
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String str = sw.toString();
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals(null, "<x>a</x><y>b</y>", normalize(str));
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringReader sr = new StringReader(str);
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordReader xrr = new XMLRecordReader(sr);
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals(null, 'a', xrr.character("x"));
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals(null, 'b', xrr.character("y"));
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testCharacterArray() {
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        char[][] datas = {
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            {},
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { 'a' },
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { 'a', 'b' },
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { 'a', 'b', 'c' },
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] targets = {
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList></testList>",
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>a</test></testList>",
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>a</test><test>b</test></testList>",
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>a</test><test>b</test>" +
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<test>c</test></testList>",
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int j = 0; j < datas.length; ++j) {
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            char[] data = datas[j];
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String target = targets[j];
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            StringWriter sw = new StringWriter();
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            XMLRecordWriter xrw = new XMLRecordWriter(sw);
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            xrw.characterArray("test", data);
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            xrw.flush();
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String str = sw.toString();
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertEquals("" + j, target, normalize(str));
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            StringReader sr = new StringReader(str);
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            XMLRecordReader xrr = new XMLRecordReader(sr);
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            char[] out = xrr.characterArray("test");
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertNotNull("" + j, out);
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertEquals("" + j, data.length, out.length);
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int i = 0; i < data.length; ++i) {
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                assertEquals("" + j + "/" + i, data[i], out[i]);
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testNamedIndex() {
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringWriter sw = new StringWriter();
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordWriter xrw = new XMLRecordWriter(sw);
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] names = { "zero", "one" };
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.namedIndex("x", names, 0);
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.namedIndex("y", names, 1);
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.flush();
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String str = sw.toString();
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals(null, "<x>zero</x><y>one</y>", normalize(str));
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringReader sr = new StringReader(str);
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordReader xrr = new XMLRecordReader(sr);
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals(null, 0, xrr.namedIndex("x", names));
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals(null, 1, xrr.namedIndex("y", names));
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testNamedIndexArray() {
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] names = { "zero", "one" };
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        byte[][] datas = {
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            {},
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { 0 },
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { 1, 0 },
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { 0, 1, 0 },
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] targets = {
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList></testList>",
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>zero</test></testList>",
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>one</test><test>zero</test></testList>",
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>zero</test><test>one</test>" +
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<test>zero</test></testList>",
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int j = 0; j < datas.length; ++j) {
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            byte[] data = datas[j];
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String target = targets[j];
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            StringWriter sw = new StringWriter();
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            XMLRecordWriter xrw = new XMLRecordWriter(sw);
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            xrw.namedIndexArray("test", names, data);
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            xrw.flush();
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String str = sw.toString();
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertEquals("" + j, target, normalize(str));
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            StringReader sr = new StringReader(str);
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            XMLRecordReader xrr = new XMLRecordReader(sr);
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            byte[] out = xrr.namedIndexArray("test", names);
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertNotNull("" + j, out);
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertEquals("" + j, data.length, out.length);
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int i = 0; i < data.length; ++i) {
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                assertEquals("" + j + "/" + i, data[i], out[i]);
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testString() {
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringWriter sw = new StringWriter();
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordWriter xrw = new XMLRecordWriter(sw);
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s = " This is <a> &&\t test. ";
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s1 = " This is <a> && test. ";
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String t = " This is &lt;a> &amp;&amp; test. ";
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.string("x", s);
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.flush();
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String str = sw.toString();
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("\n'" + normalize(str) + "' = \n'<x>" + t + "</x>", "<x>"
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + t + "</x>", normalize(str));
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringReader sr = new StringReader(str);
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordReader xrr = new XMLRecordReader(sr);
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String res = xrr.string("x");
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("\n'" + res + "' == \n'" + s1 + "'", s1, res);
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testStringArray() {
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s1 = "";
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s2 = " ";
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s3 = "This is a test";
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s4 = "  It is\n   only  a test\t  ";
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s4x = " It is only a test ";
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[][] datas = {
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            {},
2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s1 },
2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s2, s1 },
2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s3, s2, s1 },
2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s3, null, s1, null },
2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s4, s1, s3, s2 }
2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] targets = {
2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList></testList>",
2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>" + s1 + "</test></testList>",
2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>" + s2 + "</test><test>" + s1 + "</test></testList>",
2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>" + s3 + "</test><test>" + s2 +
2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "</test><test>" + s1 + "</test></testList>",
2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>" + s3 + "</test><test>Null</test><test>" + s1 +
2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "</test><test>Null</test></testList>",
2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>" + s4x + "</test><test>" + s1 +
2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "</test><test>" + s3 + "</test><test>" + s2 + "</test></testList>",
2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int j = 0; j < datas.length; ++j) {
2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String[] data = datas[j];
2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String target = targets[j];
2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            StringWriter sw = new StringWriter();
2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            XMLRecordWriter xrw = new XMLRecordWriter(sw);
2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            xrw.stringArray("test", data);
2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            xrw.flush();
2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String str = sw.toString();
2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertEquals("" + j + " '" + str + "'", target, normalize(str));
2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            StringReader sr = new StringReader(str);
2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            XMLRecordReader xrr = new XMLRecordReader(sr);
2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String[] out = xrr.stringArray("test");
2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertNotNull("" + j, out);
2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            assertEquals("" + j, data.length, out.length);
2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int i = 0; i < data.length; ++i) {
2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                String standin = data[i];
2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (s4.equals(standin)) {
2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    standin = s4x;
2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                assertEquals("" + j + "/" + i + " '" + out[i] + "'", standin,
2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        out[i]);
2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testStringTable() {
3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s1 = "";
3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s2 = " ";
3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s3 = "This is a test";
3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s4 = "It is only a test";
3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[][] table = {
3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            {},
3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s1 },
3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s2, s1 },
3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s3, s2, s1 },
3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            null,
3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            { s4, s1, s3, s2 }
3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String target = "<testTable>" +
3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList></testList>" +
3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test></test></testList>" +
3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test> </test><test></test></testList>" +
3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>This is a test</test><test> </test>" +
3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "<test></test></testList>" +
3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList>Null</testList>" +
3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "<testList><test>It is only a test</test><test></test>" +
3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "<test>This is a test</test><test> </test></testList>" +
3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "</testTable>";
3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringWriter sw = new StringWriter();
3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordWriter xrw = new XMLRecordWriter(sw);
3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.stringTable("test", table);
3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.flush();
3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String str = sw.toString();
3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("'" + str + "'", target, normalize(str));
3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void testOmittedFields() {
3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringWriter sw = new StringWriter();
3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordWriter xrw = new XMLRecordWriter(sw);
3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.open("omit");
3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.bool("x", true);
3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.bool("y", false);
3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.close();
3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        xrw.flush();
3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String str = sw.toString();
3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringReader sr = new StringReader(str);
3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        XMLRecordReader xrr = new XMLRecordReader(sr);
3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertTrue(null, xrr.open("omit"));
3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertTrue(null, xrr.bool("x"));
3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals(null, '\uffff', xrr.character("z"));
3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertFalse(null, xrr.bool("y"));
3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertTrue(null, xrr.close());
3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
355