1 package be
.nikiroo
.utils
.test
;
5 import be
.nikiroo
.utils
.serial
.Exporter
;
6 import be
.nikiroo
.utils
.serial
.Importer
;
8 class SerialTest
extends TestLauncher
{
10 * Required for Import/Export of objects.
16 public SerialTest(String
[] args
) {
17 super("Serial test", args
);
19 addTest(new TestCase("Simple class Import/Export") {
21 public void test() throws Exception
{
22 Data data
= new Data(42);
23 String encoded
= new Exporter().append(data
).toString(false,
25 Object redata
= new Importer().read(encoded
).getValue();
26 String reencoded
= new Exporter().append(redata
).toString(
29 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
30 reencoded
.replaceAll("@[0-9]*", "@REF"));
34 addTest(new TestCase() {
35 @SuppressWarnings("unused")
36 private TestCase me
= setName("Anonymous inner class");
39 public void test() throws Exception
{
40 Data data
= new Data() {
41 @SuppressWarnings("unused")
45 String encoded
= new Exporter().append(data
).toString(false,
47 Object redata
= new Importer().read(encoded
).getValue();
48 String reencoded
= new Exporter().append(redata
).toString(
51 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
52 reencoded
.replaceAll("@[0-9]*", "@REF"));
56 addTest(new TestCase() {
57 @SuppressWarnings("unused")
58 private TestCase me
= setName("Array of anonymous inner classes");
61 public void test() throws Exception
{
62 Data
[] data
= new Data
[] { new Data() {
63 @SuppressWarnings("unused")
67 String encoded
= new Exporter().append(data
).toString(false,
69 Object redata
= new Importer().read(encoded
).getValue();
70 String reencoded
= new Exporter().append(redata
).toString(
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
75 encoded
= new Exporter().append(data
[0]).toString(false, false);
77 reencoded
= new Exporter().append(((Data
[]) redata
)[0])
78 .toString(false, false);
79 } catch (Exception e
) {
80 fail("Cannot cast the returned data into its original object",
84 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
85 reencoded
.replaceAll("@[0-9]*", "@REF"));
89 addTest(new TestCase("URL Import/Export") {
91 public void test() throws Exception
{
92 URL data
= new URL("https://fanfan.be/");
93 String encoded
= new Exporter().append(data
).toString(false,
95 Object redata
= new Importer().read(encoded
).getValue();
96 String reencoded
= new Exporter().append(redata
).toString(
99 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
100 reencoded
.replaceAll("@[0-9]*", "@REF"));
104 addTest(new TestCase("URL-String Import/Export") {
106 public void test() throws Exception
{
107 String data
= new URL("https://fanfan.be/").toString();
108 String encoded
= new Exporter().append(data
).toString(false,
110 Object redata
= new Importer().read(encoded
).getValue();
111 String reencoded
= new Exporter().append(redata
).toString(
114 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
115 reencoded
.replaceAll("@[0-9]*", "@REF"));
116 assertEquals(data
, redata
);
120 addTest(new TestCase("URL/URL-String arrays Import/Export") {
122 public void test() throws Exception
{
123 final String url
= "https://fanfan.be/";
125 Object
[] data
= new Object
[] { new URL(url
), url
};
126 String encoded
= new Exporter().append(data
).toString(false,
128 Object redata
= new Importer().read(encoded
).getValue();
129 String reencoded
= new Exporter().append(redata
).toString(
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]);
139 addTest(new TestCase("Import/Export with nested objects") {
141 public void test() throws Exception
{
142 Data data
= new DataObject(new Data(21));
143 String encoded
= new Exporter().append(data
).toString(false,
145 Object redata
= new Importer().read(encoded
).getValue();
146 String reencoded
= new Exporter().append(redata
).toString(
149 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
150 reencoded
.replaceAll("@[0-9]*", "@REF"));
154 addTest(new TestCase("Import/Export with nested objects forming a loop") {
156 public void test() throws Exception
{
157 DataLoop data
= new DataLoop("looping");
158 data
.next
= new DataLoop("level 2");
159 data
.next
.next
= data
;
161 String encoded
= new Exporter().append(data
).toString(false,
163 Object redata
= new Importer().read(encoded
).getValue();
164 String reencoded
= new Exporter().append(redata
).toString(
167 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
168 reencoded
.replaceAll("@[0-9]*", "@REF"));
172 addTest(new TestCase("Array in Object Import/Export") {
174 public void test() throws Exception
{
175 Object data
= new DataArray();// new String[] { "un", "deux" };
176 String encoded
= new Exporter().append(data
).toString(false,
178 Object redata
= new Importer().read(encoded
).getValue();
179 String reencoded
= new Exporter().append(redata
).toString(
182 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
183 reencoded
.replaceAll("@[0-9]*", "@REF"));
187 addTest(new TestCase("Array Import/Export") {
189 public void test() throws Exception
{
190 Object data
= new String
[] { "un", "deux" };
191 String encoded
= new Exporter().append(data
).toString(false,
193 Object redata
= new Importer().read(encoded
).getValue();
194 String reencoded
= new Exporter().append(redata
).toString(
197 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
198 reencoded
.replaceAll("@[0-9]*", "@REF"));
202 addTest(new TestCase("Enum Import/Export") {
204 public void test() throws Exception
{
205 Object data
= EnumToSend
.FANFAN
;
206 String encoded
= new Exporter().append(data
).toString(false,
208 Object redata
= new Importer().read(encoded
).getValue();
209 String reencoded
= new Exporter().append(redata
).toString(
212 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
213 reencoded
.replaceAll("@[0-9]*", "@REF"));
217 addTest(new TestCase("B64 and ZIP String test") {
219 public void test() throws Exception
{
220 Object data
= "Fanfan la tulipe";
221 String encoded
= new Exporter().append(data
).toString(true,
223 String redata
= (String
) new Importer().read(encoded
)
226 assertEquals("Items not identical after B64", data
, redata
);
228 encoded
= new Exporter().append(data
).toString(true, true);
229 redata
= (String
) new Importer().read(encoded
).getValue();
231 assertEquals("Items not identical after ZIP", data
, redata
);
235 addTest(new TestCase("B64 and ZIP Data test") {
237 public void test() throws Exception
{
238 Object data
= new Data(55);
239 String encoded
= new Exporter().append(data
).toString(true,
241 Data redata
= (Data
) new Importer().read(encoded
).getValue();
243 assertEquals("Items not identical after B64", data
, redata
);
245 encoded
= new Exporter().append(data
).toString(true, true);
246 redata
= (Data
) new Importer().read(encoded
).getValue();
248 assertEquals("Items not identical after ZIP", data
, redata
);
252 addTest(new TestCase("B64 and ZIP 70000 chars test") {
254 public void test() throws Exception
{
255 StringBuilder builder
= new StringBuilder();
256 for (int i
= 0; i
< 7000; i
++) {
257 builder
.append("0123456789");
260 Object data
= builder
.toString();
261 String encoded
= new Exporter().append(data
).toString(true,
263 String redata
= (String
) new Importer().read(encoded
)
266 assertEquals("Items not identical after B64", data
, redata
);
268 encoded
= new Exporter().append(data
).toString(true, true);
269 redata
= (String
) new Importer().read(encoded
).getValue();
271 assertEquals("Items not identical after ZIP", data
, redata
);
277 public String
[] data
= new String
[] { "un", "deux" };
286 public Data(int value
) {
291 public boolean equals(Object obj
) {
292 if (obj
instanceof Data
) {
293 Data other
= (Data
) obj
;
294 return other
.value
== this.value
;
301 public int hashCode() {
302 return new Integer(value
).hashCode();
306 @SuppressWarnings("unused")
307 class DataObject
extends Data
{
310 @SuppressWarnings("synthetic-access")
311 private DataObject() {
314 @SuppressWarnings("synthetic-access")
315 public DataObject(Data data
) {
320 @SuppressWarnings("unused")
321 class DataLoop
extends Data
{
322 public DataLoop next
;
323 private String value
;
325 @SuppressWarnings("synthetic-access")
329 @SuppressWarnings("synthetic-access")
330 public DataLoop(String value
) {