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