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