1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.httppart;
18
19 import static java.lang.String.*;
20 import static org.apache.juneau.TestUtils.*;
21 import static org.apache.juneau.commons.utils.CollectionUtils.*;
22 import static org.apache.juneau.commons.utils.StringUtils.*;
23 import static org.apache.juneau.httppart.HttpPartSchema.*;
24 import static org.junit.jupiter.api.Assertions.*;
25
26 import java.util.*;
27
28 import org.apache.juneau.*;
29 import org.apache.juneau.collections.*;
30 import org.apache.juneau.commons.time.*;
31 import org.apache.juneau.oapi.*;
32 import org.apache.juneau.serializer.*;
33 import org.junit.jupiter.api.*;
34
35 class OpenApiPartSerializer_Test extends TestBase {
36
37 static OpenApiSerializerSession s = OpenApiSerializer.DEFAULT.getSession();
38
39 private static String serialize(HttpPartSchema schema, Object o) throws SchemaValidationException, SerializeException {
40 return s.serialize(null, schema, o);
41 }
42
43
44
45
46
47 @Test void a01_outputValidations_nullOutput() throws Exception {
48 assertEquals("null", serialize(T_NONE, null));
49 assertEquals("null", serialize(tNone().required(false).build(), null));
50 assertThrowsWithMessage(SchemaValidationException.class, "Required value not provided.", ()->serialize(tNone().required().build(), null));
51 assertThrowsWithMessage(SchemaValidationException.class, "Required value not provided.", ()->serialize(tNone().required(true).build(), null));
52 }
53
54 @Test void a02_outputValidations_emptyOutput() throws Exception {
55 assertEquals("", serialize(tNone().allowEmptyValue().build(), ""));
56 assertEquals("", serialize(tNone().allowEmptyValue().build(), ""));
57 assertThrowsWithMessage(SchemaValidationException.class, "Empty value not allowed.", ()->serialize(tNone().allowEmptyValue(false).build(), ""));
58 assertThrowsWithMessage(SchemaValidationException.class, "Empty value not allowed.", ()->serialize(tNone().allowEmptyValue(false).build(), ""));
59 assertEquals(" ", serialize(tNone().allowEmptyValue(false).build(), " "));
60 }
61
62 @Test void a03_outputValidations_pattern() throws Exception {
63 var ps = tNone().pattern("x.*").allowEmptyValue().build();
64 assertEquals("x", serialize(ps, "x"));
65 assertEquals("xx", serialize(ps, "xx"));
66 assertEquals("null", serialize(ps, null));
67
68 assertThrowsWithMessage(SchemaValidationException.class, "Value does not match expected pattern. Must match pattern: x.*", ()->serialize(ps, "y"));
69 assertThrowsWithMessage(SchemaValidationException.class, "Value does not match expected pattern. Must match pattern: x.*", ()->serialize(ps, ""));
70
71
72 assertEquals("x", serialize(tNone().pattern("").allowEmptyValue().build(), "x"));
73 assertEquals("x", serialize(tNone().pattern(null).allowEmptyValue().build(), "x"));
74 }
75
76 @Test void a04_outputValidations_enum() throws Exception {
77 var ps = tNone().enum_("foo").allowEmptyValue().build();
78
79 assertEquals("foo", serialize(ps, "foo"));
80 assertEquals("null", serialize(ps, null));
81
82 assertThrowsWithMessage(SchemaValidationException.class, "Value does not match one of the expected values. Must be one of the following: foo", ()->serialize(ps, "bar"));
83 assertThrowsWithMessage(SchemaValidationException.class, "Value does not match one of the expected values. Must be one of the following: foo", ()->serialize(ps, ""));
84
85 assertEquals("foo", serialize(tNone().enum_((Set<String>)null).build(), "foo"));
86 assertEquals("foo", serialize(tNone().enum_((Set<String>)null).allowEmptyValue().build(), "foo"));
87 assertEquals("foo", serialize(tNone().enum_("foo","foo").build(), "foo"));
88 }
89
90 @Test void a05_outputValidations_minMaxLength() throws Exception {
91 var ps = tNone().minLength(1L).maxLength(2L).allowEmptyValue().build();
92
93 assertEquals("null", serialize(ps, null));
94 assertEquals("1", serialize(ps, "1"));
95 assertEquals("12", serialize(ps, "12"));
96
97 assertThrowsWithMessage(SchemaValidationException.class, "Minimum length of value not met.", ()->serialize(ps, ""));
98 assertThrowsWithMessage(SchemaValidationException.class, "Maximum length of value exceeded.", ()->serialize(ps, "123"));
99 }
100
101
102
103
104
105 public static class C1 {
106 private byte[] f;
107 public C1(byte[] f) {
108 this.f = f;
109 }
110 public byte[] toByteArray() {
111 return f;
112 }
113 }
114
115 public static class C2 {
116 private String f;
117 public C2(String s) {
118 f = s;
119 }
120 @Override
121 public String toString() {
122 return f;
123 }
124 }
125
126 public static class C3 {
127 private String[] f;
128 public C3(String...in) {
129 f = in;
130 }
131 public String[] toStringArray() {
132 return f;
133 }
134 }
135
136 @Test void c01_stringType_simple() throws Exception {
137 var ps = T_STRING;
138 assertEquals("foo", serialize(ps, "foo"));
139 }
140
141 @Test void c02_stringType_default() throws Exception {
142 var ps = tString().default_("x").build();
143 assertEquals("foo", serialize(ps, "foo"));
144 assertEquals("x", serialize(ps, null));
145 }
146
147 @Test void c03_stringType_byteFormat() throws Exception {
148 var ps = T_BYTE;
149 var foob = "foo".getBytes();
150 var expected = base64Encode(foob);
151 assertEquals(expected, serialize(ps, foob));
152 assertEquals(expected, serialize(ps, new C1(foob)));
153 assertEquals("null", serialize(ps, new C1(null)));
154 assertEquals("null", serialize(ps, null));
155 }
156
157 @Test void c04_stringType_binaryFormat() throws Exception {
158 var ps = T_BINARY;
159 var foob = "foo".getBytes();
160 var expected = toHex(foob);
161 assertEquals(expected, serialize(ps, foob));
162 assertEquals(expected, serialize(ps, new C1(foob)));
163 assertEquals("null", serialize(ps, new C1(null)));
164 assertEquals("null", serialize(ps, null));
165 }
166
167 @Test void c05_stringType_binarySpacedFormat() throws Exception {
168 var ps = T_BINARY_SPACED;
169 var foob = "foo".getBytes();
170 var expected = toSpacedHex(foob);
171 assertEquals(expected, serialize(ps, foob));
172 assertEquals(expected, serialize(ps, new C1(foob)));
173 assertEquals("null", serialize(ps, new C1(null)));
174 assertEquals("null", serialize(ps, null));
175 }
176
177 @Test void c06_stringType_dateFormat() throws Exception {
178 var ps = T_DATE;
179 var in = opt("2012-12-21").filter(x1 -> ! isBlank(x1)).map(x -> GranularZonedDateTime.of("2012-12-21").getZonedDateTime()).map(GregorianCalendar::from).orElse(null);
180 assertTrue(serialize(ps, in).contains("2012"));
181 assertEquals("null", serialize(ps, null));
182 }
183
184 @Test void c07_stringType_dateTimeFormat() throws Exception {
185 var ps = T_DATETIME;
186 var in = opt("2012-12-21T12:34:56.789").filter(x1 -> ! isBlank(x1)).map(x -> GranularZonedDateTime.of("2012-12-21T12:34:56.789").getZonedDateTime()).map(GregorianCalendar::from).orElse(null);
187 assertTrue(serialize(ps, in).contains("2012"));
188 assertEquals("null", serialize(ps, null));
189 }
190
191 @Test void c08_stringType_uonFormat() throws Exception {
192 var ps = T_UON;
193 assertEquals("foo", serialize(ps, "foo"));
194 assertEquals("~'foo~'", serialize(ps, "'foo'"));
195 assertEquals("foo", serialize(ps, new C2("foo")));
196 assertEquals("null", serialize(ps, new C2(null)));
197 assertEquals("'null'", serialize(ps, new C2("null")));
198 assertEquals("null", serialize(ps, null));
199
200 }
201
202 @Test void c09_stringType_noneFormat() throws Exception {
203
204 var ps = T_STRING;
205 assertEquals("foo", serialize(ps, "foo"));
206 assertEquals("'foo'", serialize(ps, "'foo'"));
207 assertEquals("foo", serialize(ps, new C2("foo")));
208 assertEquals("null", serialize(ps, new C2(null)));
209 assertEquals("null", serialize(ps, new C2("null")));
210 assertEquals("null", serialize(ps, null));
211 }
212
213 @Test void c10_stringType_noneFormat_2d() throws Exception {
214 var ps = tArray(tString()).build();
215 assertEquals("foo,bar,null", serialize(ps, a("foo","bar",null)));
216 assertEquals("foo,bar,null", serialize(ps, l("foo","bar",null)));
217 assertEquals("foo,bar,null", serialize(ps, ao("foo","bar",null)));
218 assertEquals("foo,bar,null", serialize(ps, l((Object)"foo",(Object)"bar",null)));
219 assertEquals("foo,bar,null,null", serialize(ps, a(new C2("foo"),new C2("bar"),new C2(null),null)));
220 assertEquals("foo,bar,null,null", serialize(ps, l(new C2("foo"),new C2("bar"),new C2(null),null)));
221 assertEquals("foo,bar,null", serialize(ps, new C3("foo","bar",null)));
222 }
223
224 @Test void c11_stringType_noneFormat_3d() throws Exception {
225 var ps = tArrayPipes(tArray(tString())).build();
226 assertEquals("foo,bar|baz,null|null", serialize(ps, a2(a("foo","bar"),a("baz",null),null)));
227 assertEquals("foo,bar|baz,null|null", serialize(ps, l(a("foo","bar"), a("baz",null),null)));
228 assertEquals("foo,bar|baz,null|null", serialize(ps, l(l("foo","bar"),l("baz",null),null)));
229 assertEquals("foo,bar|baz,null|null", serialize(ps, a2(ao("foo","bar"),ao("baz",null),null)));
230 assertEquals("foo,bar|baz,null|null", serialize(ps, l(ao("foo","bar"), a("baz",null),null)));
231 assertEquals("foo,bar|baz,null|null", serialize(ps, l(l((Object)"foo",(Object)"bar"),l((Object)"baz",null),null)));
232 assertEquals("foo,bar|baz,null,null|null", serialize(ps, a(a(new C2("foo"),new C2("bar")),a(new C2("baz"),new C2(null),null),null)));
233 assertEquals("foo,bar|baz,null,null|null", serialize(ps, l(a(new C2("foo"),new C2("bar")), a(new C2("baz"),new C2(null),null),null)));
234 assertEquals("foo,bar|baz,null,null|null", serialize(ps, l(l(new C2("foo"),new C2("bar")),l(new C2("baz"),new C2(null),null),null)));
235 assertEquals("foo,bar|baz,null|null|null", serialize(ps, a(new C3("foo","bar"),new C3("baz",null),new C3((String)null),null)));
236 assertEquals("foo,bar|baz,null|null|null", serialize(ps, l(new C3("foo","bar"),new C3("baz",null),new C3((String)null),null)));
237 }
238
239 @Test void c12_stringType_uonKeywords_plain() throws Exception {
240 var ps = T_STRING;
241
242 assertEquals("true", serialize(ps, "true"));
243 assertEquals("false", serialize(ps, "false"));
244 assertEquals("null", serialize(ps, "null"));
245 assertEquals("null", serialize(ps, null));
246 assertEquals("123", serialize(ps, "123"));
247 assertEquals("1.23", serialize(ps, "1.23"));
248 }
249
250 @Test void c13_stringType_uonKeywords_uon() throws Exception {
251 var ps = T_UON;
252
253 assertEquals("'true'", serialize(ps, "true"));
254 assertEquals("'false'", serialize(ps, "false"));
255 assertEquals("'null'", serialize(ps, "null"));
256 assertEquals("null", serialize(ps, null));
257 assertEquals("'123'", serialize(ps, "123"));
258 assertEquals("'1.23'", serialize(ps, "1.23"));
259 }
260
261
262
263
264
265 public static class D {
266 private String f;
267 public D(String in) {
268 this.f = in;
269 }
270 @Override
271 public String toString() {
272 return f;
273 }
274 }
275
276 @Test void d01_arrayType_collectionFormatCsv() throws Exception {
277 var ps = T_ARRAY_CSV;
278 assertEquals("foo,bar,null", serialize(ps, a("foo","bar",null)));
279 assertEquals("foo,bar,null", serialize(ps, ao("foo","bar",null)));
280 assertEquals("foo,bar,null,null", serialize(ps, a(new D("foo"),new D("bar"),new D(null),null)));
281 assertEquals("foo,bar,null", serialize(ps, l("foo","bar",null)));
282 assertEquals("foo,bar,null", serialize(ps, l("foo","bar",null)));
283 assertEquals("foo,bar,null,null", serialize(ps, l(new D("foo"),new D("bar"),new D(null),null)));
284 assertEquals("foo,bar,null", serialize(ps, JsonList.of("foo","bar",null)));
285
286 assertEquals("foo\\,bar,null", serialize(ps, a("foo,bar",null)));
287 }
288
289 @Test void d02_arrayType_collectionFormatPipes() throws Exception {
290 var ps = T_ARRAY_PIPES;
291 assertEquals("foo|bar|null", serialize(ps, a("foo","bar",null)));
292 assertEquals("foo|bar|null", serialize(ps, ao("foo","bar",null)));
293 assertEquals("foo|bar|null|null", serialize(ps, a(new D("foo"),new D("bar"),new D(null),null)));
294 assertEquals("foo|bar|null", serialize(ps, l("foo","bar",null)));
295 assertEquals("foo|bar|null", serialize(ps, l("foo","bar",null)));
296 assertEquals("foo|bar|null|null", serialize(ps, l(new D("foo"),new D("bar"),new D(null),null)));
297 assertEquals("foo|bar|null", serialize(ps, JsonList.of("foo","bar",null)));
298 }
299
300 @Test void d03_arrayType_collectionFormatSsv() throws Exception {
301 var ps = T_ARRAY_SSV;
302 assertEquals("foo bar null", serialize(ps, a("foo","bar",null)));
303 assertEquals("foo bar null", serialize(ps, ao("foo","bar",null)));
304 assertEquals("foo bar null null", serialize(ps, a(new D("foo"),new D("bar"),new D(null),null)));
305 assertEquals("foo bar null", serialize(ps, l("foo","bar",null)));
306 assertEquals("foo bar null", serialize(ps, l("foo","bar",null)));
307 assertEquals("foo bar null null", serialize(ps, l(new D("foo"),new D("bar"),new D(null),null)));
308 assertEquals("foo bar null", serialize(ps, JsonList.of("foo","bar",null)));
309 }
310
311 @Test void d04_arrayType_collectionFormatTsv() throws Exception {
312 var ps = T_ARRAY_TSV;
313 assertEquals("foo\tbar\tnull", serialize(ps, a("foo","bar",null)));
314 assertEquals("foo\tbar\tnull", serialize(ps, ao("foo","bar",null)));
315 assertEquals("foo\tbar\tnull\tnull", serialize(ps, a(new D("foo"),new D("bar"),new D(null),null)));
316 assertEquals("foo\tbar\tnull", serialize(ps, l("foo","bar",null)));
317 assertEquals("foo\tbar\tnull", serialize(ps, l("foo","bar",null)));
318 assertEquals("foo\tbar\tnull\tnull", serialize(ps, l(new D("foo"),new D("bar"),new D(null),null)));
319 assertEquals("foo\tbar\tnull", serialize(ps, JsonList.of("foo","bar",null)));
320 }
321
322 @Test void d05_arrayType_collectionFormatUon() throws Exception {
323 var ps = T_ARRAY_UON;
324 assertEquals("@(foo,bar,'null',null)", serialize(ps, a("foo","bar","null",null)));
325 assertEquals("@(foo,bar,'null',null)", serialize(ps, ao("foo","bar","null",null)));
326 assertEquals("@(foo,bar,'null',null)", serialize(ps, a(new D("foo"),new D("bar"),new D("null"),null)));
327 assertEquals("@(foo,bar,'null',null)", serialize(ps, l("foo","bar","null",null)));
328 assertEquals("@(foo,bar,'null',null)", serialize(ps, l("foo","bar","null",null)));
329 assertEquals("@(foo,bar,'null',null)", serialize(ps, l(new D("foo"),new D("bar"),new D("null"),null)));
330 assertEquals("@(foo,bar,'null',null)", serialize(ps, JsonList.of("foo","bar","null",null)));
331 }
332
333 @Test void d06a_arrayType_collectionFormatNone() throws Exception {
334 var ps = T_ARRAY;
335 assertEquals("foo,bar,null", serialize(ps, a("foo","bar",null)));
336 assertEquals("foo,bar,null", serialize(ps, ao("foo","bar",null)));
337 assertEquals("foo,bar,null,null", serialize(ps, a(new D("foo"),new D("bar"),new D(null),null)));
338 assertEquals("foo,bar,null", serialize(ps, l("foo","bar",null)));
339 assertEquals("foo,bar,null", serialize(ps, l("foo","bar",null)));
340 assertEquals("foo,bar,null,null", serialize(ps, l(new D("foo"),new D("bar"),new D(null),null)));
341 assertEquals("foo,bar,null", serialize(ps, JsonList.of("foo","bar",null)));
342 }
343
344 @Test void d07_arrayType_collectionFormatMulti() throws Exception {
345
346 var ps = T_ARRAY_MULTI;
347 assertEquals("foo,bar,null", serialize(ps, a("foo","bar",null)));
348 assertEquals("foo,bar,null", serialize(ps, ao("foo","bar",null)));
349 assertEquals("foo,bar,null,null", serialize(ps, a(new D("foo"),new D("bar"),new D(null),null)));
350 assertEquals("foo,bar,null", serialize(ps, l("foo","bar",null)));
351 assertEquals("foo,bar,null", serialize(ps, l("foo","bar",null)));
352 assertEquals("foo,bar,null,null", serialize(ps, l(new D("foo"),new D("bar"),new D(null),null)));
353 assertEquals("foo,bar,null", serialize(ps, JsonList.of("foo","bar",null)));
354 }
355
356 @Test void d08_arrayType_collectionFormatCsvAndPipes() throws Exception {
357 var ps = tArrayPipes(tArrayCsv()).build();
358 assertEquals("foo,bar|baz,null|null", serialize(ps, a2(a("foo","bar"),a("baz",null),null)));
359 assertEquals("foo,bar|baz,null|null", serialize(ps, a2(ao("foo","bar"),ao("baz",null),null)));
360 assertEquals("foo,bar|baz,null,null|null", serialize(ps, a(a(new D("foo"),new D("bar")),a(new D("baz"),new D(null),null),null)));
361 assertEquals("foo,bar|baz,null|null", serialize(ps, l(l("foo","bar"),l("baz",null),null)));
362 assertEquals("foo,bar|baz,null|null", serialize(ps, l(l("foo","bar"),l("baz",null),null)));
363 assertEquals("foo,bar|baz,null,null|null", serialize(ps, l(l(new D("foo"),new D("bar")),l(new D("baz"),new D(null),null),null)));
364 }
365
366 @Test void d09_arrayType_itemsInteger() throws Exception {
367 var ps = tArrayCsv(tInteger()).build();
368 assertEquals("1,2", serialize(ps, ints(1,2)));
369 assertEquals("1,2,null", serialize(ps, a(1,2,null)));
370 assertEquals("1,2,null", serialize(ps, ao(1,2,null)));
371 assertEquals("1,2,null", serialize(ps, l(1,2,null)));
372 }
373
374 @Test void d10_arrayType_itemsInteger_2d() throws Exception {
375 var ps = tArrayPipes(tArrayCsv(tInteger()).allowEmptyValue()).build();
376 assertEquals("1,2||null", serialize(ps, new int[][]{{1,2},{},null}));
377 assertEquals("1,2,null||null", serialize(ps, a(a(1,2,null),a(),null)));
378 assertEquals("1,2,null||null", serialize(ps, a2(ao(1,2,null),ao(),null)));
379 assertEquals("1,2,null||null", serialize(ps, l(l(1,2,null),l(),null)));
380 }
381
382
383
384
385
386 public static class E1 {
387 private Boolean f;
388 public E1(Boolean in) {
389 this.f = in;
390 }
391 public Boolean toBoolean() {
392 return f;
393 }
394 }
395
396 public static class E2 {
397 private Boolean[] f;
398 public E2(Boolean...in) {
399 this.f = in;
400 }
401 public Boolean[] toBooleanArray() {
402 return f;
403 }
404 }
405
406 @Test void e01_booleanType() throws Exception {
407 var ps = T_BOOLEAN;
408 assertEquals("true", serialize(ps, true));
409 assertEquals("true", serialize(ps, "true"));
410 assertEquals("true", serialize(ps, new E1(true)));
411 assertEquals("false", serialize(ps, false));
412 assertEquals("false", serialize(ps, "false"));
413 assertEquals("false", serialize(ps, new E1(false)));
414 assertEquals("null", serialize(ps, null));
415 assertEquals("null", serialize(ps, "null"));
416 assertEquals("null", serialize(ps, new E1(null)));
417 }
418
419 @Test void e03_booleanType_2d() throws Exception {
420 var ps = tArray(tBoolean()).build();
421 assertEquals("true", serialize(ps, booleans(true)));
422 assertEquals("true,null", serialize(ps, a(true,null)));
423 assertEquals("true,null", serialize(ps, l(true,null)));
424 assertEquals("true,null", serialize(ps, a("true",null)));
425 assertEquals("true,null", serialize(ps, l("true",null)));
426 assertEquals("true,null", serialize(ps, ao(true,null)));
427 assertEquals("true,null", serialize(ps, l(true,null)));
428 assertEquals("true,null,null", serialize(ps, a(new E1(true),new E1(null),null)));
429 assertEquals("true,null,null", serialize(ps, l(new E1(true),new E1(null),null)));
430 assertEquals("true,null", serialize(ps, new E2(true,null)));
431 }
432
433 @Test void e04_booleanType_3d() throws Exception {
434 var ps = tArrayPipes(tArray(tBoolean())).build();
435 assertEquals("true,true|false", serialize(ps, new boolean[][]{{true,true},{false}}));
436 assertEquals("true,true|false", serialize(ps, l(booleans(true,true),booleans(false))));
437 assertEquals("true,true|false,null", serialize(ps, a(a(true,true),a(false,null))));
438 assertEquals("true,true|false,null", serialize(ps, l(a(true,true),a(false,null))));
439 assertEquals("true,true|false,null", serialize(ps, l(l(true,true),l(false,null))));
440 assertEquals("true,true|false,null,null", serialize(ps, l(l("true","true"),l("false","null",null))));
441 assertEquals("true,true|false,null,null", serialize(ps, l(a("true","true"),a("false","null",null))));
442 assertEquals("true,true|false,null", serialize(ps, a2(ao(true,true),ao(false,null))));
443 assertEquals("true,true|false,null", serialize(ps, l(l((Object)true,(Object)true),l((Object)false,null))));
444 assertEquals("true,true|false,null", serialize(ps, l(ao(true,true),ao(false,null))));
445 assertEquals("true,true|false,null", serialize(ps, a(a(new E1(true),new E1(true)),a(new E1(false),new E1(null)))));
446 assertEquals("true,true|false,null", serialize(ps, l(l(new E1(true),new E1(true)), l(new E1(false),new E1(null)))));
447 assertEquals("true,true|false,null", serialize(ps, l(a(new E1(true),new E1(true)),a(new E1(false),new E1(null)))));
448 assertEquals("true,true|false,null", serialize(ps, a(new E2(true,true),new E2(false,null))));
449 assertEquals("true,true|false,null", serialize(ps, l(new E2(true,true),new E2(false,null))));
450 }
451
452
453
454
455
456 public static class F1 {
457 private Integer f;
458 public F1(Integer in) {
459 this.f = in;
460 }
461 public Integer toInteger() {
462 return f;
463 }
464 }
465
466 public static class F2 {
467 private Integer[] f;
468 public F2(Integer...in) {
469 this.f = in;
470 }
471 public Integer[] toIntegerArray() {
472 return f;
473 }
474 }
475
476 public static class F3 {
477 private Long f;
478 public F3(Long in) {
479 this.f = in;
480 }
481 public Long toLong() {
482 return f;
483 }
484 }
485
486 public static class F4 {
487 private Long[] f;
488 public F4(Long...in) {
489 this.f = in;
490 }
491 public Long[] toLongArray() {
492 return f;
493 }
494 }
495
496 @Test void f01_integerType_int32() throws Exception {
497 var ps = T_INT32;
498 assertEquals("1", serialize(ps, 1));
499 assertEquals("1", serialize(ps, Integer.valueOf(1)));
500 assertEquals("1", serialize(ps, (short)1));
501 assertEquals("1", serialize(ps, Short.valueOf((short)1)));
502 assertEquals("1", serialize(ps, 1L));
503 assertEquals("1", serialize(ps, Long.valueOf(1)));
504 assertEquals("1", serialize(ps, "1"));
505 assertEquals("1", serialize(ps, new F1(1)));
506 assertEquals("null", serialize(ps, null));
507 assertEquals("null", serialize(ps, "null"));
508 }
509
510 @Test void f02_integerType_int32_2d() throws Exception {
511 var ps = tArray(tInt32()).build();
512 assertEquals("1,2", serialize(ps, ints(1,2)));
513 assertEquals("1,2,null", serialize(ps, a(1,2,null)));
514 assertEquals("1,2,null", serialize(ps, l(1,2,null)));
515 assertEquals("1,2", serialize(ps, shorts(1,2)));
516 assertEquals("1,2,null", serialize(ps, a((short)1,(short)2,null)));
517 assertEquals("1,2,null", serialize(ps, l(Short.valueOf((short)1),Short.valueOf((short)2),null)));
518 assertEquals("1,2", serialize(ps, longs(1L,2L)));
519 assertEquals("1,2,null", serialize(ps, a(1L,2L,null)));
520 assertEquals("1,2,null", serialize(ps, l(1L,2L,null)));
521 assertEquals("1,2,null,null", serialize(ps, a("1","2","null",null)));
522 assertEquals("1,2,null,null", serialize(ps, l("1","2","null",null)));
523 assertEquals("1,2,null", serialize(ps, ao(1,2,null)));
524 assertEquals("1,2,null", serialize(ps, l(1,2,null)));
525 assertEquals("1,2,null,null", serialize(ps, a(new F1(1),new F1(2),new F1(null),null)));
526 assertEquals("1,2,null,null", serialize(ps, l(new F1(1),new F1(2),new F1(null),null)));
527 assertEquals("1,2,null", serialize(ps, new F2(1,2,null)));
528 }
529
530 @Test void f03_integerType_int32_3d() throws Exception {
531 var ps = tArrayPipes(tArray(tInt32())).build();
532 assertEquals("1,2|3|null", serialize(ps, new int[][]{{1,2},{3},null}));
533 assertEquals("1,2|3|null", serialize(ps, l(ints(1,2),ints(3),null)));
534 assertEquals("1,2|3,null|null", serialize(ps, a(a(1,2),a(3,null),null)));
535 assertEquals("1,2|3,null|null", serialize(ps, l(a(1,2),a(3,null),null)));
536 assertEquals("1,2|3,null|null", serialize(ps, l(l(1,2),l(3,null),null)));
537 assertEquals("1,2|3|null", serialize(ps, new short[][]{{1,2},{3},null}));
538 assertEquals("1,2|3|null", serialize(ps, l(shorts(1,2),shorts(3),null)));
539 assertEquals("1,2|3,null|null", serialize(ps, a(a((short)1,(short)2),a((short)3,null),null)));
540 assertEquals("1,2|3,null|null", serialize(ps, l(a((short)1,(short)2),a((short)3,null),null)));
541 assertEquals("1,2|3,null|null", serialize(ps, l(l(Short.valueOf((short)1),Short.valueOf((short)2)),l(Short.valueOf((short)3),null),null)));
542 assertEquals("1,2|3|null", serialize(ps, new long[][]{{1L,2L},{3L},null}));
543 assertEquals("1,2|3|null", serialize(ps, l(longs(1L,2L),longs(3L),null)));
544 assertEquals("1,2|3,null|null", serialize(ps, a(a(1L,2L),a(3L,null),null)));
545 assertEquals("1,2|3,null|null", serialize(ps, l(a(1L,2L),a(3L,null),null)));
546 assertEquals("1,2|3,null|null", serialize(ps, l(l(Long.valueOf(1),Long.valueOf(2)),l(Long.valueOf(3),null),null)));
547 assertEquals("1,2|3,null,null|null", serialize(ps, a2(a("1","2"),a("3","null",null),null)));
548 assertEquals("1,2|3,null,null|null", serialize(ps, l(a("1","2"),a("3","null",null),null)));
549 assertEquals("1,2|3,null,null|null", serialize(ps, l(l("1","2"),l("3","null",null),null)));
550 assertEquals("1,2|3,null|null", serialize(ps, a2(ao(1,2),ao(3,null),null)));
551 assertEquals("1,2|3,null|null", serialize(ps, l(ao(1,2),ao(3,null),null)));
552 assertEquals("1,2|3,null|null", serialize(ps, l(l(1,2),l(3,null),null)));
553 assertEquals("1,2|3,null,null|null", serialize(ps, a(a(new F1(1),new F1(2)),a(new F1(3),new F1(null),null),null)));
554 assertEquals("1,2|3,null,null|null", serialize(ps, l(a(new F1(1),new F1(2)),a(new F1(3),new F1(null),null),null)));
555 assertEquals("1,2|3,null,null|null", serialize(ps, l(l(new F1(1),new F1(2)),l(new F1(3),new F1(null),null),null)));
556 assertEquals("1,2|3,null|null", serialize(ps, a(new F2(1,2),new F2(3,null),null)));
557 assertEquals("1,2|3,null|null", serialize(ps, l(new F2(1,2),new F2(3,null),null)));
558 }
559
560 @Test void f04_integerType_int64() throws Exception {
561 var ps = T_INT64;
562 assertEquals("1", serialize(ps, 1));
563 assertEquals("1", serialize(ps, Integer.valueOf(1)));
564 assertEquals("1", serialize(ps, (short)1));
565 assertEquals("1", serialize(ps, Short.valueOf((short)1)));
566 assertEquals("1", serialize(ps, 1L));
567 assertEquals("1", serialize(ps, Long.valueOf(1L)));
568 assertEquals("1", serialize(ps, "1"));
569 assertEquals("1", serialize(ps, new F3(1L)));
570 assertEquals("null", serialize(ps, null));
571 assertEquals("null", serialize(ps, "null"));
572 }
573
574 @Test void f05_integerType_int64_2d() throws Exception {
575 var ps = tArray(tInt64()).build();
576 assertEquals("1,2", serialize(ps, ints(1,2)));
577 assertEquals("1,2,null", serialize(ps, a(1,2,null)));
578 assertEquals("1,2,null", serialize(ps, l(1,2,null)));
579 assertEquals("1,2", serialize(ps, shorts(1,2)));
580 assertEquals("1,2,null", serialize(ps, a((short)1,(short)2,null)));
581 assertEquals("1,2,null", serialize(ps, l((short)1,(short)2,null)));
582 assertEquals("1,2", serialize(ps, longs(1L,2L)));
583 assertEquals("1,2,null", serialize(ps, a(1L,2L,null)));
584 assertEquals("1,2,null", serialize(ps, l(1L,2L,null)));
585 assertEquals("1,2,null,null", serialize(ps, a("1","2","null",null)));
586 assertEquals("1,2,null,null", serialize(ps, l("1","2","null",null)));
587 assertEquals("1,2,null", serialize(ps, ao(1,2,null)));
588 assertEquals("1,2,null", serialize(ps, l((Object)1,(Object)2,null)));
589 assertEquals("1,2,null,null", serialize(ps, a(new F3(1L),new F3(2L),new F3(null),null)));
590 assertEquals("1,2,null,null", serialize(ps, l(new F3(1L),new F3(2L),new F3(null),null)));
591 assertEquals("1,2,null", serialize(ps, new F4(1L,2L,null)));
592 }
593
594 @Test void f06_integerType_int64_3d() throws Exception {
595 var ps = tArrayPipes(tArray(tInt64())).build();
596 assertEquals("1,2|3|null", serialize(ps, new int[][]{{1,2},{3},null}));
597 assertEquals("1,2|3|null", serialize(ps, l(ints(1,2),ints(3),null)));
598 assertEquals("1,2|3,null|null", serialize(ps, a(a(1,2),a(3,null),null)));
599 assertEquals("1,2|3,null|null", serialize(ps, l(a(1,2),a(3,null),null)));
600 assertEquals("1,2|3,null|null", serialize(ps, l(l(1,2),l(3,null),null)));
601 assertEquals("1,2|3|null", serialize(ps, new short[][]{{1,2},{3},null}));
602 assertEquals("1,2|3|null", serialize(ps, l(shorts(1,2),shorts(3),null)));
603 assertEquals("1,2|3,null|null", serialize(ps, a(a((short)1,(short)2),a((short)3,null),null)));
604 assertEquals("1,2|3,null|null", serialize(ps, l(a((short)1,(short)2),a((short)3,null),null)));
605 assertEquals("1,2|3,null|null", serialize(ps, l(l((short)1,(short)2),l((short)3,null),null)));
606 assertEquals("1,2|3|null", serialize(ps, new long[][]{{1L,2L},{3L},null}));
607 assertEquals("1,2|3|null", serialize(ps, l(longs(1L,2L),longs(3L),null)));
608 assertEquals("1,2|3,null|null", serialize(ps, a(a(1L,2L),a(3L,null),null)));
609 assertEquals("1,2|3,null|null", serialize(ps, l(a(1L,2L),a(3L,null),null)));
610 assertEquals("1,2|3,null|null", serialize(ps, l(l(1L,2L),l(3L,null),null)));
611 assertEquals("1,2|3,null,null|null", serialize(ps, a2(a("1","2"),a("3","null",null),null)));
612 assertEquals("1,2|3,null,null|null", serialize(ps, l(a("1","2"),a("3","null",null),null)));
613 assertEquals("1,2|3,null,null|null", serialize(ps, l(l("1","2"),l("3","null",null),null)));
614 assertEquals("1,2|3,null|null", serialize(ps, a2(ao(1,2),ao(3,null),null)));
615 assertEquals("1,2|3,null|null", serialize(ps, l(ao(1,2),ao(3,null),null)));
616 assertEquals("1,2|3,null|null", serialize(ps, l(l((Object)1,(Object)2),l((Object)3,null),null)));
617 assertEquals("1,2|3,null,null|null", serialize(ps, a(a(new F3(1L),new F3(2L)),a(new F3(3L),new F3(null),null),null)));
618 assertEquals("1,2|3,null,null|null", serialize(ps, l(a(new F3(1L),new F3(2L)),a(new F3(3L),new F3(null),null),null)));
619 assertEquals("1,2|3,null,null|null", serialize(ps, l(l(new F3(1L),new F3(2L)),l(new F3(3L),new F3(null),null),null)));
620 assertEquals("1,2|3,null|null", serialize(ps, a(new F4(1L,2L),new F4(3L,null),null)));
621 assertEquals("1,2|3,null|null", serialize(ps, l(new F4(1L,2L),new F4(3L,null),null)));
622 }
623
624
625
626
627
628 public static class G1 {
629 private Float f;
630 public G1(Float in) {
631 this.f = in;
632 }
633 public Float toFloat() {
634 return f;
635 }
636 }
637
638 public static class G2 {
639 private Float[] f;
640 public G2(Float...in) {
641 this.f = in;
642 }
643 public Float[] toFloatArray() {
644 return f;
645 }
646 }
647
648 public static class G3 {
649 private Double f;
650 public G3(Double in) {
651 this.f = in;
652 }
653 public Double toDouble() {
654 return f;
655 }
656 }
657
658 public static class G4 {
659 private Double[] f;
660 public G4(Double...in) {
661 this.f = in;
662 }
663 public Double[] toDoubleArray() {
664 return f;
665 }
666 }
667
668 @Test void g01_numberType_float() throws Exception {
669 var ps = T_FLOAT;
670 assertEquals("1.0", serialize(ps, 1f));
671 assertEquals("1.0", serialize(ps, Float.valueOf(1f)));
672 assertEquals("1.0", serialize(ps, 1d));
673 assertEquals("1.0", serialize(ps, Double.valueOf(1d)));
674 assertEquals("1.0", serialize(ps, "1"));
675 assertEquals("1.0", serialize(ps, new G1(1f)));
676 assertEquals("null", serialize(ps, null));
677 assertEquals("null", serialize(ps, "null"));
678 assertEquals("null", serialize(ps, new G1(null)));
679 }
680
681 @Test void g02_numberType_float_2d() throws Exception {
682 var ps = tArray(tFloat()).build();
683 assertEquals("1.0,2.0", serialize(ps, floats(1,2)));
684 assertEquals("1.0,2.0,null", serialize(ps, a(1f,2f,null)));
685 assertEquals("1.0,2.0,null", serialize(ps, l(1f,2f,null)));
686 assertEquals("1.0,2.0", serialize(ps, doubles(1,2)));
687 assertEquals("1.0,2.0,null", serialize(ps, a(1d,2d,null)));
688 assertEquals("1.0,2.0,null", serialize(ps, l(1d,2d,null)));
689 assertEquals("1.0,2.0,null,null", serialize(ps, a("1","2","null",null)));
690 assertEquals("1.0,2.0,null,null", serialize(ps, l("1","2","null",null)));
691 assertEquals("1.0,2.0,null", serialize(ps, ao(1,2,null)));
692 assertEquals("1.0,2.0,null", serialize(ps, l((Object)1,(Object)2,null)));
693 assertEquals("1.0,2.0,null,null", serialize(ps, a(new G1(1f),new G1(2f),new G1(null),null)));
694 assertEquals("1.0,2.0,null,null", serialize(ps, l(new G1(1f),new G1(2f),new G1(null),null)));
695 assertEquals("1.0,2.0,null", serialize(ps, new G2(1f,2f,null)));
696 }
697
698 @Test void g03_numberType_float_3d() throws Exception {
699 var ps = tArrayPipes(tArray(tFloat())).build();
700 assertEquals("1.0,2.0|3.0|null", serialize(ps, a(a(1f,2f),a(3f),null)));
701 assertEquals("1.0,2.0|3.0|null", serialize(ps, l(floats(1,2),floats(3),null)));
702 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, a(a(1f,2f),a(3f,null),null)));
703 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(a(1f,2f),a(3f,null),null)));
704 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(l(1f,2f),l(3f,null),null)));
705 assertEquals("1.0,2.0|3.0|null", serialize(ps, a(a(1d,2d),a(3d),null)));
706 assertEquals("1.0,2.0|3.0|null", serialize(ps, l(doubles(1d,2d),doubles(3d),null)));
707 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, a(a(1d,2d),a(3d,null),null)));
708 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(a(1d,2d),a(3d,null),null)));
709 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(l(1d,2d),l(3d,null),null)));
710 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, a2(a("1","2"),a("3","null",null),null)));
711 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(a("1","2"),a("3","null",null),null)));
712 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(l(1d,2d),l(3f,"null",null),null)));
713 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, a2(ao(1d,2d),ao(3f,"null",null),null)));
714 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(ao(1d,2d),ao(3f,"null",null),null)));
715 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(l(1d,2d),l(3f,"null",null),null)));
716 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, a(a(new G1(1f),new G1(2f)),a(new G1(3f),new G1(null),null),null)));
717 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(a(new G1(1f),new G1(2f)),a(new G1(3f),new G1(null),null),null)));
718 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(l(new G1(1f),new G1(2f)),l(new G1(3f),new G1(null),null),null)));
719 assertEquals("1.0,2.0,null|null", serialize(ps, a(new G2(1f,2f,null),null)));
720 assertEquals("1.0,2.0,null|null", serialize(ps, l(new G2(1f,2f,null),null)));
721 }
722
723 @Test void g04_numberType_double() throws Exception {
724 var ps = T_DOUBLE;
725 assertEquals("1.0", serialize(ps, 1f));
726 assertEquals("1.0", serialize(ps, Float.valueOf(1f)));
727 assertEquals("1.0", serialize(ps, 1d));
728 assertEquals("1.0", serialize(ps, Double.valueOf(1d)));
729 assertEquals("1.0", serialize(ps, "1"));
730 assertEquals("1.0", serialize(ps, new G3(1d)));
731 assertEquals("null", serialize(ps, null));
732 assertEquals("null", serialize(ps, "null"));
733 assertEquals("null", serialize(ps, new G3(null)));
734 }
735
736 @Test void g05_numberType_double_2d() throws Exception {
737 var ps = tArray(tDouble()).build();
738 assertEquals("1.0,2.0", serialize(ps, floats(1,2)));
739 assertEquals("1.0,2.0,null", serialize(ps, a(1f,2f,null)));
740 assertEquals("1.0,2.0,null", serialize(ps, l(1f,2f,null)));
741 assertEquals("1.0,2.0", serialize(ps, doubles(1,2)));
742 assertEquals("1.0,2.0,null", serialize(ps, a(1d,2d,null)));
743 assertEquals("1.0,2.0,null", serialize(ps, l(1d,2d,null)));
744 assertEquals("1.0,2.0,null,null", serialize(ps, a("1","2","null",null)));
745 assertEquals("1.0,2.0,null,null", serialize(ps, l("1","2","null",null)));
746 assertEquals("1.0,2.0,null,null", serialize(ps, ao(1d,2f,"null",null)));
747 assertEquals("1.0,2.0,null,null", serialize(ps, l(1d,2f,"null",null)));
748 assertEquals("1.0,2.0,null,null", serialize(ps, a(new G3(1d),new G3(2d),new G3(null),null)));
749 assertEquals("1.0,2.0,null,null", serialize(ps, l(new G3(1d),new G3(2d),new G3(null),null)));
750 assertEquals("1.0,2.0,null", serialize(ps, new G4(1d,2d,null)));
751 }
752
753 @Test void g06_numberType_double_3d() throws Exception {
754 var ps = tArrayPipes(tArray(tDouble())).build();
755 assertEquals("1.0,2.0|3.0|null", serialize(ps, a(a(1f,2f),a(3f),null)));
756 assertEquals("1.0,2.0|3.0|null", serialize(ps, l(floats(1f,2f),floats(3f),null)));
757 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, a(a(1f,2f),a(3f,null),null)));
758 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(a(1f,2f),a(3f,null),null)));
759 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(l(1f,2f),l(3f,null),null)));
760 assertEquals("1.0,2.0|3.0|null", serialize(ps, a(a(1d,2d),a(3d),null)));
761 assertEquals("1.0,2.0|3.0|null", serialize(ps, l(doubles(1d,2d),doubles(3d),null)));
762 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, a(a(1d,2d),a(3d,null),null)));
763 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(a(1d,2d),a(3d,null),null)));
764 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(l(1d,2d),l(3d,null),null)));
765 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, a2(a("1","2"),a("3","null",null),null)));
766 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(a("1","2"),a("3","null",null),null)));
767 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(l("1","2"),l("3","null",null),null)));
768 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, a2(ao(1d,2d),ao("3","null",null),null)));
769 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(ao(1d,2d),ao("3","null",null),null)));
770 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(l(1d,2f),l(3d,"null",null),null)));
771 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, a(a(new G3(1d),new G3(2d)),a(new G3(3d),new G3(null),null),null)));
772 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(a(new G3(1d),new G3(2d)),a(new G3(3d),new G3(null),null),null)));
773 assertEquals("1.0,2.0|3.0,null,null|null", serialize(ps, l(l(new G3(1d),new G3(2d)),l(new G3(3d),new G3(null),null),null)));
774 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, a(new G4(1d,2d),new G4(3d,null),null)));
775 assertEquals("1.0,2.0|3.0,null|null", serialize(ps, l(new G4(1d,2d),new G4(3d,null),null)));
776 }
777
778
779
780
781
782 public static class H1 {
783 public String f1;
784 public Integer f2;
785 public Boolean f3;
786 public H1(String f1, Integer f2, Boolean f3) {
787 this.f1 = f1;
788 this.f2 = f2;
789 this.f3 = f3;
790 }
791 }
792
793 @Test void h01_objectType() throws Exception {
794 var ps = tObject().allowEmptyValue().build();
795 assertEquals("f1=1,f2=2,f3=true", serialize(ps, new H1("1",2,true)));
796 assertEquals("", serialize(ps, new H1(null,null,null)));
797 assertEquals("f1=1,f2=2,f3=true", serialize(ps, JsonMap.ofJson("{f1:'1',f2:2,f3:true}")));
798 assertEquals("f1=null,f2=null,f3=null", serialize(ps, JsonMap.ofJson("{f1:null,f2:null,f3:null}")));
799 assertEquals("null", serialize(ps, null));
800 }
801
802 @Test void h02_objectType_uon() throws Exception {
803 var ps = T_OBJECT_UON;
804 assertEquals("(f1='1',f2=2,f3=true)", serialize(ps, new H1("1",2,true)));
805 assertEquals("()", serialize(ps, new H1(null,null,null)));
806 assertEquals("(f1='1',f2=2,f3=true)", serialize(ps, JsonMap.ofJson("{f1:'1',f2:2,f3:true}")));
807 assertEquals("(f1=null,f2=null,f3=null)", serialize(ps, JsonMap.ofJson("{f1:null,f2:null,f3:null}")));
808 assertEquals("null", serialize(ps, null));
809 }
810
811 @Test void h03_objectType_2d() throws Exception {
812 var ps = tArray(tObject().allowEmptyValue()).build();
813 assertEquals("f1=1\\,f2=2\\,f3=true,,null", serialize(ps, a(new H1("1",2,true),new H1(null,null,null),null)));
814 assertEquals("f1=1\\,f2=2\\,f3=true,,null", serialize(ps, l(new H1("1",2,true),new H1(null,null,null),null)));
815 assertEquals("f1=1\\,f2=2\\,f3=true,f1=null\\,f2=null\\,f3=null,null", serialize(ps, a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null)));
816 assertEquals("f1=1\\,f2=2\\,f3=true,f1=null\\,f2=null\\,f3=null,null", serialize(ps, l(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null)));
817 assertEquals("f1=1\\,f2=2\\,f3=true,f1=1\\,f2=2\\,f3=true,null", serialize(ps, ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),null)));
818 assertEquals("f1=1\\,f2=2\\,f3=true,f1=1\\,f2=2\\,f3=true,null", serialize(ps, l(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),null)));
819 }
820
821 @Test void h03_objectType_2d_pipes() throws Exception {
822 var ps = tArrayPipes(tObject().allowEmptyValue()).build();
823 assertEquals("f1=1,f2=2,f3=true||null", serialize(ps, a(new H1("1",2,true),new H1(null,null,null),null)));
824 assertEquals("f1=1,f2=2,f3=true||null", serialize(ps, l(new H1("1",2,true),new H1(null,null,null),null)));
825 assertEquals("f1=1,f2=2,f3=true|f1=null,f2=null,f3=null|null", serialize(ps, a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null)));
826 assertEquals("f1=1,f2=2,f3=true|f1=null,f2=null,f3=null|null", serialize(ps, l(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null)));
827 assertEquals("f1=1,f2=2,f3=true|f1=1,f2=2,f3=true|null", serialize(ps, ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),null)));
828 assertEquals("f1=1,f2=2,f3=true|f1=1,f2=2,f3=true|null", serialize(ps, l(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),null)));
829 }
830
831 @Test void h04_objectType_2d_uon() throws Exception {
832 var ps = tArrayUon(tObject()).build();
833 assertEquals("@((f1='1',f2=2,f3=true),(),null)", serialize(ps, a(new H1("1",2,true),new H1(null,null,null),null)));
834 assertEquals("@((f1='1',f2=2,f3=true),(),null)", serialize(ps, l(new H1("1",2,true),new H1(null,null,null),null)));
835 assertEquals("@((f1='1',f2=2,f3=true),(f1=null,f2=null,f3=null),null)", serialize(ps, a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null)));
836 assertEquals("@((f1='1',f2=2,f3=true),(f1=null,f2=null,f3=null),null)", serialize(ps, l(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null)));
837 assertEquals("@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true),null)", serialize(ps, ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),null)));
838 assertEquals("@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true),null)", serialize(ps, l(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),null)));
839 }
840
841 @Test void h03_objectType_3d() throws Exception {
842 var ps = tArray(tArray(tObject().allowEmptyValue())).build();
843 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=x\\\\\\,f2=3\\\\\\,f3=false,\\,null,null", serialize(ps, a(a(new H1("1",2,true),new H1("x",3,false)),a(new H1(null,null,null),null),null)));
844 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=x\\\\\\,f2=3\\\\\\,f3=false,\\,null,null", serialize(ps, l(a(new H1("1",2,true),new H1("x",3,false)),a(new H1(null,null,null),null),null)));
845 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=x\\\\\\,f2=3\\\\\\,f3=false,\\,null,null", serialize(ps, l(l(new H1("1",2,true),new H1("x",3,false)),l(new H1(null,null,null),null),null)));
846 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=x\\\\\\,f2=4\\\\\\,f3=false,f1=null\\\\\\,f2=null\\\\\\,f3=null\\,null,null", serialize(ps, a(a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),a(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
847 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=x\\\\\\,f2=4\\\\\\,f3=false,f1=null\\\\\\,f2=null\\\\\\,f3=null\\,null,null", serialize(ps, l(a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),a(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
848 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=x\\\\\\,f2=4\\\\\\,f3=false,f1=null\\\\\\,f2=null\\\\\\,f3=null\\,null,null", serialize(ps, l(l(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),l(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
849 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=1\\\\\\,f2=2\\\\\\,f3=true,\\,f1=null\\\\\\,f2=null\\\\\\,f3=null\\,null,null", serialize(ps, a2(ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),ao(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
850 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=1\\\\\\,f2=2\\\\\\,f3=true,\\,f1=null\\\\\\,f2=null\\\\\\,f3=null\\,null,null", serialize(ps, l(ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),ao(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
851 assertEquals("f1=1\\\\\\,f2=2\\\\\\,f3=true\\,f1=1\\\\\\,f2=2\\\\\\,f3=true,\\,f1=null\\\\\\,f2=null\\\\\\,f3=null\\,null,null", serialize(ps, l(l(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),l(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
852 }
853
854 @Test void h03_objectType_3d_ssvAndPipes() throws Exception {
855 var ps = tArraySsv(tArrayPipes(tObject().allowEmptyValue())).build();
856 assertEquals("null|null null|null null null", serialize(ps, a2(a(null,null),a(null,null),null,null)));
857
858 assertEquals("f1=1,f2=2,f3=true|f1=x,f2=3,f3=false |null null", serialize(ps, a(a(new H1("1",2,true),new H1("x",3,false)),a(new H1(null,null,null),null),null)));
859 assertEquals("f1=1,f2=2,f3=true|f1=x,f2=3,f3=false |null null", serialize(ps, l(a(new H1("1",2,true),new H1("x",3,false)),a(new H1(null,null,null),null),null)));
860 assertEquals("f1=1,f2=2,f3=true|f1=x,f2=3,f3=false |null null", serialize(ps, l(l(new H1("1",2,true),new H1("x",3,false)),l(new H1(null,null,null),null),null)));
861 assertEquals("f1=1,f2=2,f3=true|f1=x,f2=4,f3=false f1=null,f2=null,f3=null|null null", serialize(ps, a(a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),a(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
862 assertEquals("f1=1,f2=2,f3=true|f1=x,f2=4,f3=false f1=null,f2=null,f3=null|null null", serialize(ps, l(a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),a(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
863 assertEquals("f1=1,f2=2,f3=true|f1=x,f2=4,f3=false f1=null,f2=null,f3=null|null null", serialize(ps, l(l(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),l(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
864 assertEquals("f1=1,f2=2,f3=true|f1=1,f2=2,f3=true |f1=null,f2=null,f3=null|null null", serialize(ps, a2(ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),ao(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
865 assertEquals("f1=1,f2=2,f3=true|f1=1,f2=2,f3=true |f1=null,f2=null,f3=null|null null", serialize(ps, l(ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),ao(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
866 assertEquals("f1=1,f2=2,f3=true|f1=1,f2=2,f3=true |f1=null,f2=null,f3=null|null null", serialize(ps, l(l(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),l(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
867 }
868
869 @Test void h03_objectType_3d_uon() throws Exception {
870 var ps = tArrayUon(tArray(tObject())).build();
871 assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=3,f3=false)),@((),null),null)", serialize(ps, a(a(new H1("1",2,true),new H1("x",3,false)),a(new H1(null,null,null),null),null)));
872 assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=3,f3=false)),@((),null),null)", serialize(ps, l(a(new H1("1",2,true),new H1("x",3,false)),a(new H1(null,null,null),null),null)));
873 assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=3,f3=false)),@((),null),null)", serialize(ps, l(l(new H1("1",2,true),new H1("x",3,false)),l(new H1(null,null,null),null),null)));
874 assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=4,f3=false)),@((f1=null,f2=null,f3=null),null),null)", serialize(ps, a(a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),a(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
875 assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=4,f3=false)),@((f1=null,f2=null,f3=null),null),null)", serialize(ps, l(a(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),a(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
876 assertEquals("@(@((f1='1',f2=2,f3=true),(f1=x,f2=4,f3=false)),@((f1=null,f2=null,f3=null),null),null)", serialize(ps, l(l(JsonMap.ofJson("{f1:'1',f2:2,f3:true}"),JsonMap.ofJson("{f1:'x',f2:4,f3:false}")),l(JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
877 assertEquals("@(@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true)),@((),(f1=null,f2=null,f3=null),null),null)", serialize(ps, a2(ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),ao(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
878 assertEquals("@(@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true)),@((),(f1=null,f2=null,f3=null),null),null)", serialize(ps, l(ao(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),ao(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
879 assertEquals("@(@((f1='1',f2=2,f3=true),(f1='1',f2=2,f3=true)),@((),(f1=null,f2=null,f3=null),null),null)", serialize(ps, l(l(new H1("1",2,true),JsonMap.ofJson("{f1:'1',f2:2,f3:true}")),l(new H1(null,null,null),JsonMap.ofJson("{f1:null,f2:null,f3:null}"),null),null)));
880 }
881
882 public static class H2 {
883 public Object f01, f02, f04, f05, f06, f07, f08, f09, f10, f11, f12, f99;
884 public H2(Object f01, Object f02, Object f04, Object f05, Object f06, Object f07, Object f08, Object f09, Object f10, Object f11, Object f12, Object f99) {
885 this.f01 = f01;
886 this.f02 = f02;
887 this.f04 = f04;
888 this.f05 = f05;
889 this.f06 = f06;
890 this.f07 = f07;
891 this.f08 = f08;
892 this.f09 = f09;
893 this.f10 = f10;
894 this.f11 = f11;
895 this.f12 = f12;
896 this.f99 = f99;
897 }
898 }
899
900 @Test void h04_objectType_simpleProperties() throws Exception {
901 var ps = tObject()
902 .p("f01", tString())
903 .p("f02", tByte())
904 .p("f04", tDateTime())
905 .p("f05", tBinary())
906 .p("f06", tBinarySpaced())
907 .p("f07", tUon())
908 .p("f08", tInteger())
909 .p("f09", tInt64())
910 .p("f10", tNumber())
911 .p("f11", tDouble())
912 .p("f12", tBoolean())
913 .ap(tInteger())
914 .allowEmptyValue()
915 .build();
916
917 var foob = "foo".getBytes();
918
919 assertEquals(
920 "f01=foo,f02=Zm9v,f04=2012-12-21T12:34:56Z,f05=666F6F,f06=66 6F 6F,f07=foo,f08=1,f09=2,f10=1.0,f11=1.0,f12=true,f99=1",
921 serialize(ps, new H2("foo",foob,opt("2012-12-21T12:34:56Z").filter(x1 -> ! isBlank(x1)).map(x -> GranularZonedDateTime.of("2012-12-21T12:34:56Z").getZonedDateTime()).map(GregorianCalendar::from).orElse(null),foob,foob,"foo",1,2,1.0,1.0,true,1))
922 );
923 assertEquals("", serialize(ps, new H2(null,null,null,null,null,null,null,null,null,null,null,null)));
924 assertEquals("null", serialize(ps, null));
925 assertEquals(
926 "f01=foo,f02=Zm9v,f04=2012-12-21T12:34:56Z,f05=666F6F,f06=66 6F 6F,f07=foo,f08=1,f09=2,f10=1.0,f11=1.0,f12=true,f99=1",
927 serialize(ps, JsonMap.of("f01","foo","f02",foob,"f04",opt("2012-12-21T12:34:56Z").filter(x11 -> ! isBlank(x11)).map(x2 -> GranularZonedDateTime.of("2012-12-21T12:34:56Z").getZonedDateTime()).map(GregorianCalendar::from).orElse(null),"f05",foob,"f06",foob,"f07","foo","f08",1,"f09",2,"f10",1.0,"f11",1.0,"f12",true,"f99",1))
928 );
929 }
930
931 @Test void h05_objectType_arrayProperties() throws Exception {
932 var ps = tObjectUon()
933 .p("f01", tArray(tString()))
934 .p("f02", tArray(tByte()))
935 .p("f04", tArray(tDateTime()))
936 .p("f05", tArray(tBinary()))
937 .p("f06", tArray(tBinarySpaced()))
938 .p("f07", tArray(tUon()))
939 .p("f08", tArray(tInteger()))
940 .p("f09", tArray(tInt64()))
941 .p("f10", tArray(tNumber()))
942 .p("f11", tArray(tDouble()))
943 .p("f12", tArray(tBoolean()))
944 .ap(tArray(tInteger()))
945 .build();
946
947 var foob = "foo".getBytes();
948
949 assertEquals(
950 "(f01=@('a,b',null),f02=@(Zm9v,null),f04=@(2012-12-21T12:34:56Z,null),f05=@(666F6F,null),f06=@('66 6F 6F',null),f07=@(a,b,null),f08=@(1,2,null),f09=@(3,4,null),f10=@(1.0,2.0,null),f11=@(3.0,4.0,null),f12=@(true,false,null),f99=@(1,x,null))",
951 serialize(ps, new H2(a("a,b",null),new byte[][]{foob,null},a(opt("2012-12-21T12:34:56Z").filter(x1 -> ! isBlank(x1)).map(x -> GranularZonedDateTime.of("2012-12-21T12:34:56Z").getZonedDateTime()).map(GregorianCalendar::from).orElse(null),null),new byte[][]{foob,null},new byte[][]{foob,null},a("a","b",null),a(1,2,null),a(3,4,null),a(1f,2f,null),a(3f,4f,null),a(true,false,null),a(1,"x",null)))
952 );
953
954 }
955
956
957
958
959 @Test void i01a_noSchemaTests_Integer() throws Exception {
960 for (var v : l(Integer.valueOf(1), Integer.MAX_VALUE, Integer.MIN_VALUE))
961 assertEquals(valueOf(v), serialize((HttpPartSchema)null, v));
962 }
963 @Test void i01b_noSchemaTests_IntegerArray() throws Exception {
964 assertEquals("1,2147483647,-2147483648", serialize((HttpPartSchema)null, a(Integer.valueOf(1), Integer.MAX_VALUE, Integer.MIN_VALUE)));
965 }
966
967 @Test void i02a_noSchemaTests_Short() throws Exception {
968 for (var v : l(Short.valueOf((short)1), Short.MAX_VALUE, Short.MIN_VALUE))
969 assertEquals(valueOf(v), serialize((HttpPartSchema)null, v));
970 }
971
972 @Test void i02b_noSchemaTests_ShortArray() throws Exception {
973 assertEquals("1,32767,-32768,null", serialize((HttpPartSchema)null, a(Short.valueOf((short)1), Short.MAX_VALUE, Short.MIN_VALUE, null)));
974 }
975
976 @Test void i03a_noSchemaTests_Long() throws Exception {
977 for (var v : l(Long.valueOf(1), Long.MAX_VALUE, Long.MIN_VALUE))
978 assertEquals(valueOf(v), serialize((HttpPartSchema)null, v));
979 }
980
981 @Test void i03b_noSchemaTests_LongArray() throws Exception {
982 assertEquals("1,9223372036854775807,-9223372036854775808,null", serialize((HttpPartSchema)null, a(Long.valueOf(1), Long.MAX_VALUE, Long.MIN_VALUE, null)));
983 }
984
985 @Test void i04a_noSchemaTests_Float() throws Exception {
986 for (var v : l(Float.valueOf(1f), Float.MAX_VALUE, Float.MIN_VALUE))
987 assertEquals(valueOf(v), serialize((HttpPartSchema)null, v));
988 }
989
990 @Test void i04b_noSchemaTests_FloatArray() throws Exception {
991 assertEquals("1.0,3.4028235E38,1.4E-45", serialize((HttpPartSchema)null, a(Float.valueOf(1f), Float.MAX_VALUE, Float.MIN_VALUE)));
992 }
993
994 @Test void i05a_noSchemaTests_Double() throws Exception {
995 for (var v : l(Double.valueOf(1d), Double.MAX_VALUE, Double.MIN_VALUE))
996 assertEquals(valueOf(v), serialize((HttpPartSchema)null, v));
997 }
998
999 @Test void i05b_noSchemaTests_DoubleArray() throws Exception {
1000 assertEquals("1.0,1.7976931348623157E308,4.9E-324", serialize((HttpPartSchema)null, a(Double.valueOf(1), Double.MAX_VALUE, Double.MIN_VALUE)));
1001 }
1002
1003 @Test void i06a_noSchemaTests_Boolean() throws Exception {
1004 for (var v : l(Boolean.TRUE, Boolean.FALSE))
1005 assertEquals(valueOf(v), serialize((HttpPartSchema)null, v));
1006 }
1007
1008 @Test void i06b_noSchemaTests_BooleanArray() throws Exception {
1009 assertEquals("true,false,null", serialize((HttpPartSchema)null, a(Boolean.TRUE, Boolean.FALSE, null)));
1010 }
1011
1012 @Test void i07_noSchemaTests_Null() throws Exception {
1013 assertEquals("null", serialize((HttpPartSchema)null, null));
1014 }
1015
1016 @Test void i08a_noSchemaTests_String() throws Exception {
1017 for (var v : l("foo", ""))
1018 assertEquals(v, serialize((HttpPartSchema)null, v));
1019 }
1020 @Test void i08b_noSchemaTests_StringArray() throws Exception {
1021 assertEquals("foo,,null", serialize((HttpPartSchema)null, a("foo", "", null)));
1022 }
1023 }