fix java 6 support
[nikiroo-utils.git] / src / be / nikiroo / utils / test / SerialTest.java
CommitLineData
db31c358
NR
1package be.nikiroo.utils.test;
2
f4053377
NR
3import java.net.URL;
4
db31c358
NR
5import be.nikiroo.utils.serial.Exporter;
6import be.nikiroo.utils.serial.Importer;
7
8class SerialTest extends TestLauncher {
452f38c8
NR
9 /**
10 * Required for Import/Export of objects.
11 */
12 public SerialTest() {
13 this(null);
14 }
15
db31c358
NR
16 public SerialTest(String[] args) {
17 super("Serial test", args);
18
19 addTest(new TestCase("Simple class Import/Export") {
20 @Override
21 public void test() throws Exception {
22 Data data = new Data(42);
3f277541
NR
23 String encoded = new Exporter().append(data).toString(false,
24 false);
db31c358 25 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
26 String reencoded = new Exporter().append(redata).toString(
27 false, false);
72648e75
NR
28
29 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
30 reencoded.replaceAll("@[0-9]*", "@REF"));
31 }
32 });
33
34 addTest(new TestCase() {
edeff2ab 35 @SuppressWarnings("unused")
72648e75
NR
36 private TestCase me = setName("Anonymous inner class");
37
38 @Override
39 public void test() throws Exception {
40 Data data = new Data() {
3f277541 41 @SuppressWarnings("unused")
15c2dc9f 42 int value = 42;
72648e75
NR
43 };
44
3f277541
NR
45 String encoded = new Exporter().append(data).toString(false,
46 false);
72648e75 47 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
48 String reencoded = new Exporter().append(redata).toString(
49 false, false);
db31c358
NR
50
51 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
52 reencoded.replaceAll("@[0-9]*", "@REF"));
53 }
54 });
55
edeff2ab
NR
56 addTest(new TestCase() {
57 @SuppressWarnings("unused")
58 private TestCase me = setName("Array of anonymous inner classes");
59
60 @Override
61 public void test() throws Exception {
62 Data[] data = new Data[] { new Data() {
3f277541 63 @SuppressWarnings("unused")
15c2dc9f 64 int value = 42;
edeff2ab
NR
65 } };
66
3f277541
NR
67 String encoded = new Exporter().append(data).toString(false,
68 false);
edeff2ab 69 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
70 String reencoded = new Exporter().append(redata).toString(
71 false, false);
edeff2ab
NR
72
73 // Comparing the 2 strings won't be useful, because the @REFs
74 // will be ZIP-encoded; so we parse and re-encode the object
3f277541 75 encoded = new Exporter().append(data[0]).toString(false, false);
edeff2ab
NR
76 try {
77 reencoded = new Exporter().append(((Data[]) redata)[0])
3f277541 78 .toString(false, false);
edeff2ab
NR
79 } catch (Exception e) {
80 fail("Cannot cast the returned data into its original object",
81 e);
82 }
83
84 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
85 reencoded.replaceAll("@[0-9]*", "@REF"));
86 }
87 });
88
f4053377
NR
89 addTest(new TestCase("URL Import/Export") {
90 @Override
91 public void test() throws Exception {
92 URL data = new URL("https://fanfan.be/");
3f277541
NR
93 String encoded = new Exporter().append(data).toString(false,
94 false);
f4053377 95 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
96 String reencoded = new Exporter().append(redata).toString(
97 false, false);
f4053377
NR
98
99 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
100 reencoded.replaceAll("@[0-9]*", "@REF"));
101 }
102 });
103
104 addTest(new TestCase("URL-String Import/Export") {
105 @Override
106 public void test() throws Exception {
107 String data = new URL("https://fanfan.be/").toString();
3f277541
NR
108 String encoded = new Exporter().append(data).toString(false,
109 false);
f4053377 110 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
111 String reencoded = new Exporter().append(redata).toString(
112 false, false);
f4053377
NR
113
114 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
115 reencoded.replaceAll("@[0-9]*", "@REF"));
116 assertEquals(data, redata);
117 }
118 });
119
120 addTest(new TestCase("URL/URL-String arrays Import/Export") {
121 @Override
122 public void test() throws Exception {
123 final String url = "https://fanfan.be/";
124
125 Object[] data = new Object[] { new URL(url), url };
3f277541
NR
126 String encoded = new Exporter().append(data).toString(false,
127 false);
f4053377 128 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
129 String reencoded = new Exporter().append(redata).toString(
130 false, false);
f4053377
NR
131
132 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
133 reencoded.replaceAll("@[0-9]*", "@REF"));
134 assertEquals(data[0], ((Object[]) redata)[0]);
135 assertEquals(data[1], ((Object[]) redata)[1]);
136 }
137 });
138
db31c358
NR
139 addTest(new TestCase("Import/Export with nested objects") {
140 @Override
141 public void test() throws Exception {
142 Data data = new DataObject(new Data(21));
3f277541
NR
143 String encoded = new Exporter().append(data).toString(false,
144 false);
db31c358 145 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
146 String reencoded = new Exporter().append(redata).toString(
147 false, false);
db31c358
NR
148
149 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
150 reencoded.replaceAll("@[0-9]*", "@REF"));
151 }
152 });
153
154 addTest(new TestCase("Import/Export with nested objects forming a loop") {
155 @Override
156 public void test() throws Exception {
157 DataLoop data = new DataLoop("looping");
158 data.next = new DataLoop("level 2");
159 data.next.next = data;
160
3f277541
NR
161 String encoded = new Exporter().append(data).toString(false,
162 false);
db31c358 163 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
164 String reencoded = new Exporter().append(redata).toString(
165 false, false);
db31c358
NR
166
167 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
168 reencoded.replaceAll("@[0-9]*", "@REF"));
169 }
170 });
ce0974c4
NR
171
172 addTest(new TestCase("Array in Object Import/Export") {
173 @Override
174 public void test() throws Exception {
175 Object data = new DataArray();// new String[] { "un", "deux" };
3f277541
NR
176 String encoded = new Exporter().append(data).toString(false,
177 false);
ce0974c4 178 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
179 String reencoded = new Exporter().append(redata).toString(
180 false, false);
ce0974c4
NR
181
182 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
183 reencoded.replaceAll("@[0-9]*", "@REF"));
184 }
185 });
186
187 addTest(new TestCase("Array Import/Export") {
188 @Override
189 public void test() throws Exception {
190 Object data = new String[] { "un", "deux" };
3f277541
NR
191 String encoded = new Exporter().append(data).toString(false,
192 false);
ce0974c4 193 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
194 String reencoded = new Exporter().append(redata).toString(
195 false, false);
ce0974c4
NR
196
197 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
198 reencoded.replaceAll("@[0-9]*", "@REF"));
199 }
200 });
e570f7eb
NR
201
202 addTest(new TestCase("Enum Import/Export") {
203 @Override
204 public void test() throws Exception {
205 Object data = EnumToSend.FANFAN;
3f277541
NR
206 String encoded = new Exporter().append(data).toString(false,
207 false);
e570f7eb 208 Object redata = new Importer().read(encoded).getValue();
3f277541
NR
209 String reencoded = new Exporter().append(redata).toString(
210 false, false);
e570f7eb
NR
211
212 assertEquals(encoded.replaceAll("@[0-9]*", "@REF"),
213 reencoded.replaceAll("@[0-9]*", "@REF"));
214 }
215 });
3f277541
NR
216
217 addTest(new TestCase("B64 and ZIP String test") {
218 @Override
219 public void test() throws Exception {
220 Object data = "Fanfan la tulipe";
221 String encoded = new Exporter().append(data).toString(true,
222 false);
223 String redata = (String) new Importer().read(encoded)
224 .getValue();
225
226 assertEquals("Items not identical after B64", data, redata);
227
228 encoded = new Exporter().append(data).toString(true, true);
229 redata = (String) new Importer().read(encoded).getValue();
230
231 assertEquals("Items not identical after ZIP", data, redata);
232 }
233 });
234
235 addTest(new TestCase("B64 and ZIP Data test") {
236 @Override
237 public void test() throws Exception {
238 Object data = new Data(55);
239 String encoded = new Exporter().append(data).toString(true,
240 false);
241 Data redata = (Data) new Importer().read(encoded).getValue();
242
243 assertEquals("Items not identical after B64", data, redata);
244
245 encoded = new Exporter().append(data).toString(true, true);
246 redata = (Data) new Importer().read(encoded).getValue();
247
248 assertEquals("Items not identical after ZIP", data, redata);
249 }
250 });
251
252 addTest(new TestCase("B64 and ZIP 70000 chars test") {
253 @Override
254 public void test() throws Exception {
255 StringBuilder builder = new StringBuilder();
256 for (int i = 0; i < 7000; i++) {
257 builder.append("0123456789");
258 }
259
260 Object data = builder.toString();
261 String encoded = new Exporter().append(data).toString(true,
262 false);
263 String redata = (String) new Importer().read(encoded)
264 .getValue();
265
266 assertEquals("Items not identical after B64", data, redata);
267
268 encoded = new Exporter().append(data).toString(true, true);
269 redata = (String) new Importer().read(encoded).getValue();
270
271 assertEquals("Items not identical after ZIP", data, redata);
272 }
273 });
ce0974c4
NR
274 }
275
276 class DataArray {
277 public String[] data = new String[] { "un", "deux" };
db31c358
NR
278 }
279
db31c358
NR
280 class Data {
281 private int value;
282
283 private Data() {
284 }
285
286 public Data(int value) {
287 this.value = value;
288 }
3f277541
NR
289
290 @Override
291 public boolean equals(Object obj) {
292 if (obj instanceof Data) {
293 Data other = (Data) obj;
294 return other.value == this.value;
295 }
296
297 return false;
298 }
299
300 @Override
301 public int hashCode() {
b6d4ace8 302 return new Integer(value).hashCode();
3f277541 303 }
db31c358
NR
304 }
305
306 @SuppressWarnings("unused")
307 class DataObject extends Data {
308 private Data data;
309
310 @SuppressWarnings("synthetic-access")
311 private DataObject() {
312 }
313
314 @SuppressWarnings("synthetic-access")
315 public DataObject(Data data) {
316 this.data = data;
317 }
318 }
319
320 @SuppressWarnings("unused")
321 class DataLoop extends Data {
322 public DataLoop next;
323 private String value;
324
325 @SuppressWarnings("synthetic-access")
326 private DataLoop() {
327 }
328
329 @SuppressWarnings("synthetic-access")
330 public DataLoop(String value) {
331 this.value = value;
332 }
333 }
e570f7eb
NR
334
335 enum EnumToSend {
336 FANFAN, TULIPE,
337 }
db31c358 338}