1 package be
.nikiroo
.utils
.test_code
;
5 import be
.nikiroo
.utils
.serial
.Exporter
;
6 import be
.nikiroo
.utils
.serial
.Importer
;
7 import be
.nikiroo
.utils
.test
.TestCase
;
8 import be
.nikiroo
.utils
.test
.TestLauncher
;
10 class SerialTest
extends TestLauncher
{
12 * Required for Import/Export of objects.
18 public SerialTest(String
[] args
) {
19 super("Serial test", args
);
21 addTest(new TestCase("Simple class Import/Export") {
23 public void test() throws Exception
{
24 Data data
= new Data(42);
25 String encoded
= new Exporter().append(data
).toString(false,
27 Object redata
= new Importer().read(encoded
).getValue();
28 String reencoded
= new Exporter().append(redata
).toString(
31 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
32 reencoded
.replaceAll("@[0-9]*", "@REF"));
36 addTest(new TestCase() {
37 @SuppressWarnings("unused")
38 private TestCase me
= setName("Anonymous inner class");
41 public void test() throws Exception
{
42 Data data
= new Data() {
43 @SuppressWarnings("unused")
47 String encoded
= new Exporter().append(data
).toString(false,
49 Object redata
= new Importer().read(encoded
).getValue();
50 String reencoded
= new Exporter().append(redata
).toString(
53 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
54 reencoded
.replaceAll("@[0-9]*", "@REF"));
58 addTest(new TestCase() {
59 @SuppressWarnings("unused")
60 private TestCase me
= setName("Array of anonymous inner classes");
63 public void test() throws Exception
{
64 Data
[] data
= new Data
[] { new Data() {
65 @SuppressWarnings("unused")
69 String encoded
= new Exporter().append(data
).toString(false,
71 Object redata
= new Importer().read(encoded
).getValue();
72 String reencoded
= new Exporter().append(redata
).toString(
75 // Comparing the 2 strings won't be useful, because the @REFs
76 // will be ZIP-encoded; so we parse and re-encode the object
77 encoded
= new Exporter().append(data
[0]).toString(false, false);
79 reencoded
= new Exporter().append(((Data
[]) redata
)[0])
80 .toString(false, false);
81 } catch (Exception e
) {
82 fail("Cannot cast the returned data into its original object",
86 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
87 reencoded
.replaceAll("@[0-9]*", "@REF"));
91 addTest(new TestCase("URL Import/Export") {
93 public void test() throws Exception
{
94 URL data
= new URL("https://fanfan.be/");
95 String encoded
= new Exporter().append(data
).toString(false,
97 Object redata
= new Importer().read(encoded
).getValue();
98 String reencoded
= new Exporter().append(redata
).toString(
101 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
102 reencoded
.replaceAll("@[0-9]*", "@REF"));
106 addTest(new TestCase("URL-String Import/Export") {
108 public void test() throws Exception
{
109 String data
= new URL("https://fanfan.be/").toString();
110 String encoded
= new Exporter().append(data
).toString(false,
112 Object redata
= new Importer().read(encoded
).getValue();
113 String reencoded
= new Exporter().append(redata
).toString(
116 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
117 reencoded
.replaceAll("@[0-9]*", "@REF"));
118 assertEquals(data
, redata
);
122 addTest(new TestCase("URL/URL-String arrays Import/Export") {
124 public void test() throws Exception
{
125 final String url
= "https://fanfan.be/";
127 Object
[] data
= new Object
[] { new URL(url
), url
};
128 String encoded
= new Exporter().append(data
).toString(false,
130 Object redata
= new Importer().read(encoded
).getValue();
131 String reencoded
= new Exporter().append(redata
).toString(
134 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
135 reencoded
.replaceAll("@[0-9]*", "@REF"));
136 assertEquals(data
[0], ((Object
[]) redata
)[0]);
137 assertEquals(data
[1], ((Object
[]) redata
)[1]);
141 addTest(new TestCase("Import/Export with nested objects") {
143 public void test() throws Exception
{
144 Data data
= new DataObject(new Data(21));
145 String encoded
= new Exporter().append(data
).toString(false,
147 Object redata
= new Importer().read(encoded
).getValue();
148 String reencoded
= new Exporter().append(redata
).toString(
151 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
152 reencoded
.replaceAll("@[0-9]*", "@REF"));
156 addTest(new TestCase("Import/Export with nested objects forming a loop") {
158 public void test() throws Exception
{
159 DataLoop data
= new DataLoop("looping");
160 data
.next
= new DataLoop("level 2");
161 data
.next
.next
= data
;
163 String encoded
= new Exporter().append(data
).toString(false,
165 Object redata
= new Importer().read(encoded
).getValue();
166 String reencoded
= new Exporter().append(redata
).toString(
169 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
170 reencoded
.replaceAll("@[0-9]*", "@REF"));
174 addTest(new TestCase("Array in Object Import/Export") {
176 public void test() throws Exception
{
177 Object data
= new DataArray();// new String[] { "un", "deux" };
178 String encoded
= new Exporter().append(data
).toString(false,
180 Object redata
= new Importer().read(encoded
).getValue();
181 String reencoded
= new Exporter().append(redata
).toString(
184 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
185 reencoded
.replaceAll("@[0-9]*", "@REF"));
189 addTest(new TestCase("Array Import/Export") {
191 public void test() throws Exception
{
192 Object data
= new String
[] { "un", "deux" };
193 String encoded
= new Exporter().append(data
).toString(false,
195 Object redata
= new Importer().read(encoded
).getValue();
196 String reencoded
= new Exporter().append(redata
).toString(
199 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
200 reencoded
.replaceAll("@[0-9]*", "@REF"));
204 addTest(new TestCase("Enum Import/Export") {
206 public void test() throws Exception
{
207 Object data
= EnumToSend
.FANFAN
;
208 String encoded
= new Exporter().append(data
).toString(false,
210 Object redata
= new Importer().read(encoded
).getValue();
211 String reencoded
= new Exporter().append(redata
).toString(
214 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
215 reencoded
.replaceAll("@[0-9]*", "@REF"));
219 addTest(new TestCase("B64 and ZIP String test") {
221 public void test() throws Exception
{
222 Object data
= "Fanfan la tulipe";
223 String encoded
= new Exporter().append(data
).toString(true,
225 String redata
= (String
) new Importer().read(encoded
)
228 assertEquals("Items not identical after B64", data
, redata
);
230 encoded
= new Exporter().append(data
).toString(true, true);
231 redata
= (String
) new Importer().read(encoded
).getValue();
233 assertEquals("Items not identical after ZIP", data
, redata
);
237 addTest(new TestCase("B64 and ZIP Data test") {
239 public void test() throws Exception
{
240 Object data
= new Data(55);
241 String encoded
= new Exporter().append(data
).toString(true,
243 Data redata
= (Data
) new Importer().read(encoded
).getValue();
245 assertEquals("Items not identical after B64", data
, redata
);
247 encoded
= new Exporter().append(data
).toString(true, true);
248 redata
= (Data
) new Importer().read(encoded
).getValue();
250 assertEquals("Items not identical after ZIP", data
, redata
);
254 addTest(new TestCase("B64 and ZIP 70000 chars test") {
256 public void test() throws Exception
{
257 StringBuilder builder
= new StringBuilder();
258 for (int i
= 0; i
< 7000; i
++) {
259 builder
.append("0123456789");
262 Object data
= builder
.toString();
263 String encoded
= new Exporter().append(data
).toString(true,
265 String redata
= (String
) new Importer().read(encoded
)
268 assertEquals("Items not identical after B64", data
, redata
);
270 encoded
= new Exporter().append(data
).toString(true, true);
271 redata
= (String
) new Importer().read(encoded
).getValue();
273 assertEquals("Items not identical after ZIP", data
, redata
);
279 public String
[] data
= new String
[] { "un", "deux" };
288 public Data(int value
) {
293 public boolean equals(Object obj
) {
294 if (obj
instanceof Data
) {
295 Data other
= (Data
) obj
;
296 return other
.value
== this.value
;
303 public int hashCode() {
304 return new Integer(value
).hashCode();
308 @SuppressWarnings("unused")
309 class DataObject
extends Data
{
312 @SuppressWarnings("synthetic-access")
313 private DataObject() {
316 @SuppressWarnings("synthetic-access")
317 public DataObject(Data data
) {
322 @SuppressWarnings("unused")
323 class DataLoop
extends Data
{
324 public DataLoop next
;
325 private String value
;
327 @SuppressWarnings("synthetic-access")
331 @SuppressWarnings("synthetic-access")
332 public DataLoop(String value
) {