blob: ca86f281c7345cb9f7a42f4e47a18476008cd79c [file] [log] [blame]
/*
******************************************************************************
* Copyright (C) 2007-2010, International Business Machines Corporation and *
* others. All Rights Reserved. *
******************************************************************************
*/
// Copyright 2006 Google Inc. All Rights Reserved.
package com.ibm.icu.dev.test.duration;
import java.io.StringReader;
import java.io.StringWriter;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.impl.duration.impl.XMLRecordReader;
import com.ibm.icu.impl.duration.impl.XMLRecordWriter;
public class DataReadWriteTest extends TestFmwk {
/**
* Invoke the tests.
*/
public static void main(String[] args) {
new DataReadWriteTest().run(args);
}
// strip line ends and trailing spaces
private String normalize(String str) {
StringBuffer sb = new StringBuffer();
boolean inLine = true;
for (int i = 0; i < str.length(); ++i) {
char c = str.charAt(i);
if (inLine && c == ' ') {
continue;
}
if (c == '\n') {
inLine = true;
continue;
}
inLine = false;
sb.append("" + c);
}
return sb.toString();
}
public void testOpenClose() {
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
assertTrue(null, xrw.open("Test"));
assertTrue(null, xrw.close());
xrw.flush();
String str = sw.toString();
assertEquals(null, "<Test></Test>", normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
assertTrue(null, xrr.open("Test"));
assertTrue(null, xrr.close());
}
public void testBool() {
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
xrw.bool("x", true);
xrw.bool("y", false);
xrw.flush();
String str = sw.toString();
assertEquals(null, "<x>true</x><y>false</y>", normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
assertTrue(null, xrr.bool("x"));
assertFalse(null, xrr.bool("y"));
}
public void testBoolArray() {
boolean[][] datas = {
{},
{ true },
{ true, false },
{ true, false, true },
};
String[] targets = {
"<testList></testList>",
"<testList><test>true</test></testList>",
"<testList><test>true</test><test>false</test></testList>",
"<testList><test>true</test><test>false</test>" +
"<test>true</test></testList>",
};
for (int j = 0; j < datas.length; ++j) {
boolean[] data = datas[j];
String target = targets[j];
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
xrw.boolArray("test", data);
xrw.flush();
String str = sw.toString();
assertEquals("" + j, target, normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
boolean[] out = xrr.boolArray("test");
assertNotNull("" + j, out);
assertEquals("" + j, data.length, out.length);
for (int i = 0; i < data.length; ++i) {
assertEquals("" + j + "/" + i, data[i], out[i]);
}
}
}
public void testCharacter() {
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
xrw.character("x", 'a');
xrw.character("y", 'b');
xrw.flush();
String str = sw.toString();
assertEquals(null, "<x>a</x><y>b</y>", normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
assertEquals(null, 'a', xrr.character("x"));
assertEquals(null, 'b', xrr.character("y"));
}
public void testCharacterArray() {
char[][] datas = {
{},
{ 'a' },
{ 'a', 'b' },
{ 'a', 'b', 'c' },
};
String[] targets = {
"<testList></testList>",
"<testList><test>a</test></testList>",
"<testList><test>a</test><test>b</test></testList>",
"<testList><test>a</test><test>b</test>" +
"<test>c</test></testList>",
};
for (int j = 0; j < datas.length; ++j) {
char[] data = datas[j];
String target = targets[j];
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
xrw.characterArray("test", data);
xrw.flush();
String str = sw.toString();
assertEquals("" + j, target, normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
char[] out = xrr.characterArray("test");
assertNotNull("" + j, out);
assertEquals("" + j, data.length, out.length);
for (int i = 0; i < data.length; ++i) {
assertEquals("" + j + "/" + i, data[i], out[i]);
}
}
}
public void testNamedIndex() {
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
String[] names = { "zero", "one" };
xrw.namedIndex("x", names, 0);
xrw.namedIndex("y", names, 1);
xrw.flush();
String str = sw.toString();
assertEquals(null, "<x>zero</x><y>one</y>", normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
assertEquals(null, 0, xrr.namedIndex("x", names));
assertEquals(null, 1, xrr.namedIndex("y", names));
}
public void testNamedIndexArray() {
String[] names = { "zero", "one" };
byte[][] datas = {
{},
{ 0 },
{ 1, 0 },
{ 0, 1, 0 },
};
String[] targets = {
"<testList></testList>",
"<testList><test>zero</test></testList>",
"<testList><test>one</test><test>zero</test></testList>",
"<testList><test>zero</test><test>one</test>" +
"<test>zero</test></testList>",
};
for (int j = 0; j < datas.length; ++j) {
byte[] data = datas[j];
String target = targets[j];
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
xrw.namedIndexArray("test", names, data);
xrw.flush();
String str = sw.toString();
assertEquals("" + j, target, normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
byte[] out = xrr.namedIndexArray("test", names);
assertNotNull("" + j, out);
assertEquals("" + j, data.length, out.length);
for (int i = 0; i < data.length; ++i) {
assertEquals("" + j + "/" + i, data[i], out[i]);
}
}
}
public void testString() {
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
String s = " This is <a> &&\t test. ";
String s1 = " This is <a> && test. ";
String t = " This is &lt;a> &amp;&amp; test. ";
xrw.string("x", s);
xrw.flush();
String str = sw.toString();
assertEquals("\n'" + normalize(str) + "' = \n'<x>" + t + "</x>", "<x>"
+ t + "</x>", normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
String res = xrr.string("x");
assertEquals("\n'" + res + "' == \n'" + s1 + "'", s1, res);
}
public void testStringArray() {
String s1 = "";
String s2 = " ";
String s3 = "This is a test";
String s4 = " It is\n only a test\t ";
String s4x = " It is only a test ";
String[][] datas = {
{},
{ s1 },
{ s2, s1 },
{ s3, s2, s1 },
{ s3, null, s1, null },
{ s4, s1, s3, s2 }
};
String[] targets = {
"<testList></testList>",
"<testList><test>" + s1 + "</test></testList>",
"<testList><test>" + s2 + "</test><test>" + s1 + "</test></testList>",
"<testList><test>" + s3 + "</test><test>" + s2 +
"</test><test>" + s1 + "</test></testList>",
"<testList><test>" + s3 + "</test><test>Null</test><test>" + s1 +
"</test><test>Null</test></testList>",
"<testList><test>" + s4x + "</test><test>" + s1 +
"</test><test>" + s3 + "</test><test>" + s2 + "</test></testList>",
};
for (int j = 0; j < datas.length; ++j) {
String[] data = datas[j];
String target = targets[j];
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
xrw.stringArray("test", data);
xrw.flush();
String str = sw.toString();
assertEquals("" + j + " '" + str + "'", target, normalize(str));
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
String[] out = xrr.stringArray("test");
assertNotNull("" + j, out);
assertEquals("" + j, data.length, out.length);
for (int i = 0; i < data.length; ++i) {
String standin = data[i];
if (s4.equals(standin)) {
standin = s4x;
}
assertEquals("" + j + "/" + i + " '" + out[i] + "'", standin,
out[i]);
}
}
}
public void testStringTable() {
String s1 = "";
String s2 = " ";
String s3 = "This is a test";
String s4 = "It is only a test";
String[][] table = {
{},
{ s1 },
{ s2, s1 },
{ s3, s2, s1 },
null,
{ s4, s1, s3, s2 }
};
String target = "<testTable>" +
"<testList></testList>" +
"<testList><test></test></testList>" +
"<testList><test> </test><test></test></testList>" +
"<testList><test>This is a test</test><test> </test>" +
"<test></test></testList>" +
"<testList>Null</testList>" +
"<testList><test>It is only a test</test><test></test>" +
"<test>This is a test</test><test> </test></testList>" +
"</testTable>";
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
xrw.stringTable("test", table);
xrw.flush();
String str = sw.toString();
assertEquals("'" + str + "'", target, normalize(str));
}
public void testOmittedFields() {
StringWriter sw = new StringWriter();
XMLRecordWriter xrw = new XMLRecordWriter(sw);
xrw.open("omit");
xrw.bool("x", true);
xrw.bool("y", false);
xrw.close();
xrw.flush();
String str = sw.toString();
StringReader sr = new StringReader(str);
XMLRecordReader xrr = new XMLRecordReader(sr);
assertTrue(null, xrr.open("omit"));
assertTrue(null, xrr.bool("x"));
assertEquals(null, '\uffff', xrr.character("z"));
assertFalse(null, xrr.bool("y"));
assertTrue(null, xrr.close());
}
}