1 package de.juplo.jackson;
3 import com.fasterxml.jackson.core.JsonFactory;
4 import com.fasterxml.jackson.core.JsonParser;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.util.ArrayList;
8 import java.util.Iterator;
9 import java.util.LinkedHashMap;
10 import java.util.List;
12 import java.util.Map.Entry;
13 import java.util.Spliterator;
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.assertFalse;
16 import static org.junit.Assert.assertNotNull;
17 import static org.junit.Assert.assertNull;
18 import static org.junit.Assert.assertTrue;
19 import static org.junit.Assert.fail;
20 import org.junit.Test;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
35 public class SimpleMapperTest
37 private static final Logger LOG =
38 LoggerFactory.getLogger(SimpleMapperTest.class);
41 private final JsonFactory factory = new JsonFactory();
45 public void testConvertEmptyInputToArraySpliterator() throws Exception
47 Spliterator<Object> spliterator;
49 spliterator = SimpleMapper.getArraySpliterator(get("/empty/1.json"));
50 assertNull(spliterator);
51 spliterator = SimpleMapper.getArraySpliterator(get("/empty/2.json"));
52 assertNull(spliterator);
53 spliterator = SimpleMapper.getArraySpliterator(get("/empty/3.json"));
54 assertNull(spliterator);
55 spliterator = SimpleMapper.getArraySpliterator(get("/empty/4.json"));
56 assertNull(spliterator);
57 spliterator = SimpleMapper.getArraySpliterator(get("/empty/5.json"));
58 assertNull(spliterator);
62 public void testConvertEmptyInputToList() throws Exception
66 list = SimpleMapper.convertArray(get("/empty/1.json"));
68 list = SimpleMapper.convertArray(get("/empty/2.json"));
70 list = SimpleMapper.convertArray(get("/empty/3.json"));
72 list = SimpleMapper.convertArray(get("/empty/4.json"));
74 list = SimpleMapper.convertArray(get("/empty/5.json"));
79 public void testConvertEmptyInputToObjectSpliterator() throws Exception
81 Spliterator<Entry<String, Object>> spliterator;
83 spliterator = SimpleMapper.getObjectSpliterator(get("/empty/1.json"));
84 assertNull(spliterator);
85 spliterator = SimpleMapper.getObjectSpliterator(get("/empty/2.json"));
86 assertNull(spliterator);
87 spliterator = SimpleMapper.getObjectSpliterator(get("/empty/3.json"));
88 assertNull(spliterator);
89 spliterator = SimpleMapper.getObjectSpliterator(get("/empty/4.json"));
90 assertNull(spliterator);
91 spliterator = SimpleMapper.getObjectSpliterator(get("/empty/5.json"));
92 assertNull(spliterator);
96 public void testConvertEmptyInputToMap() throws Exception
98 Map<String, Object> map;
100 map = SimpleMapper.convertObject(get("/empty/1.json"));
102 map = SimpleMapper.convertObject(get("/empty/2.json"));
104 map = SimpleMapper.convertObject(get("/empty/3.json"));
106 map = SimpleMapper.convertObject(get("/empty/4.json"));
108 map = SimpleMapper.convertObject(get("/empty/5.json"));
113 public void testConvertEmptyInput() throws Exception
117 object = SimpleMapper.convert(get("/empty/1.json"));
119 object = SimpleMapper.convert(get("/empty/2.json"));
121 object = SimpleMapper.convert(get("/empty/3.json"));
123 object = SimpleMapper.convert(get("/empty/4.json"));
125 object = SimpleMapper.convert(get("/empty/5.json"));
131 public void testConvertEmptyArrayToArraySpliterator() throws Exception
133 Spliterator<Object> spliterator;
135 spliterator = SimpleMapper.getArraySpliterator(get("/array/empty/1.json"));
137 "The created splitter should have no entries",
138 spliterator.tryAdvance((Object t) ->
140 fail("The consumer should never be called!");
142 spliterator = SimpleMapper.getArraySpliterator(get("/array/empty/2.json"));
144 "The created splitter should have no entries",
145 spliterator.tryAdvance((Object t) ->
147 fail("The consumer should never be called!");
149 spliterator = SimpleMapper.getArraySpliterator(get("/array/empty/3.json"));
151 "The created splitter should have no entries",
152 spliterator.tryAdvance((Object t) ->
154 fail("The consumer should never be called!");
156 spliterator = SimpleMapper.getArraySpliterator(get("/array/empty/4.json"));
158 "The created splitter should have no entries",
159 spliterator.tryAdvance((Object t) ->
161 fail("The consumer should never be called!");
166 public void testConvertEmptyArrayToList() throws Exception
170 list = SimpleMapper.convertArray(get("/array/empty/1.json"));
171 assertEquals(0, list.size());
172 list = SimpleMapper.convertArray(get("/array/empty/2.json"));
173 assertEquals(0, list.size());
174 list = SimpleMapper.convertArray(get("/array/empty/3.json"));
175 assertEquals(0, list.size());
176 list = SimpleMapper.convertArray(get("/array/empty/4.json"));
177 assertEquals(0, list.size());
181 public void testConvertEmptyArrayToObjectSpliterator() throws Exception
185 SimpleMapper.getObjectSpliterator(get("/array/empty/1.json"));
186 fail("it must not be possible, to get an object-spliterator for an array");
188 catch(IllegalArgumentException e)
190 LOG.info(e.getMessage());
195 SimpleMapper.getObjectSpliterator(get("/array/empty/2.json"));
196 fail("it must not be possible, to get an object-spliterator for an array");
198 catch(IllegalArgumentException e)
200 LOG.info(e.getMessage());
205 SimpleMapper.getObjectSpliterator(get("/array/empty/3.json"));
206 fail("it must not be possible, to get an object-spliterator for an array");
208 catch(IllegalArgumentException e)
210 LOG.info(e.getMessage());
215 SimpleMapper.getObjectSpliterator(get("/array/empty/4.json"));
216 fail("it must not be possible, to get an object-spliterator for an array");
218 catch(IllegalArgumentException e)
220 LOG.info(e.getMessage());
225 public void testConvertEmptyArrayToMap() throws Exception
229 SimpleMapper.convertObject(get("/array/empty/1.json"));
230 fail("it must not be possible, to get a map for an array");
232 catch(IllegalArgumentException e)
234 LOG.info(e.getMessage());
239 SimpleMapper.convertObject(get("/array/empty/2.json"));
240 fail("it must not be possible, to get a map for an array");
242 catch(IllegalArgumentException e)
244 LOG.info(e.getMessage());
249 SimpleMapper.convertObject(get("/array/empty/3.json"));
250 fail("it must not be possible, to get a map for an array");
252 catch(IllegalArgumentException e)
254 LOG.info(e.getMessage());
259 SimpleMapper.convertObject(get("/array/empty/4.json"));
260 fail("it must not be possible, to get a map for an array");
262 catch(IllegalArgumentException e)
264 LOG.info(e.getMessage());
269 public void testConvertEmptyArray() throws Exception
273 object = SimpleMapper.convert(get("/array/empty/1.json"));
274 assertNotNull(object);
275 assertTrue("the returned object should be a list", object instanceof List);
276 assertEquals(0, ((List)object).size());
277 object = SimpleMapper.convert(get("/array/empty/2.json"));
278 assertNotNull(object);
279 assertTrue("the returned object should be a list", object instanceof List);
280 assertEquals(0, ((List)object).size());
281 object = SimpleMapper.convert(get("/array/empty/3.json"));
282 assertNotNull(object);
283 assertTrue("the returned object should be a list", object instanceof List);
284 assertEquals(0, ((List)object).size());
285 object = SimpleMapper.convert(get("/array/empty/4.json"));
286 assertNotNull(object);
287 assertTrue("the returned object should be a list", object instanceof List);
288 assertEquals(0, ((List)object).size());
293 public void testConvertEmptyObjectToArraySpliterator() throws Exception
297 SimpleMapper.getArraySpliterator(get("/object/empty/1.json"));
298 fail("it must not be possible, to get an array-spliterator for an object");
300 catch(IllegalArgumentException e)
302 LOG.info(e.getMessage());
307 SimpleMapper.getArraySpliterator(get("/object/empty/2.json"));
308 fail("it must not be possible, to get an array-spliterator for an object");
310 catch(IllegalArgumentException e)
312 LOG.info(e.getMessage());
317 SimpleMapper.getArraySpliterator(get("/object/empty/3.json"));
318 fail("it must not be possible, to get an array-spliterator for an object");
320 catch(IllegalArgumentException e)
322 LOG.info(e.getMessage());
327 SimpleMapper.getArraySpliterator(get("/object/empty/4.json"));
328 fail("it must not be possible, to get an array-spliterator for an object");
330 catch(IllegalArgumentException e)
332 LOG.info(e.getMessage());
337 public void testConvertEmptyObjectToList() throws Exception
341 SimpleMapper.convertArray(get("/object/empty/1.json"));
342 fail("it must not be possible, to get a list for an array");
344 catch(IllegalArgumentException e)
346 LOG.info(e.getMessage());
351 SimpleMapper.convertArray(get("/object/empty/2.json"));
352 fail("it must not be possible, to get a list for an array");
354 catch(IllegalArgumentException e)
356 LOG.info(e.getMessage());
361 SimpleMapper.convertArray(get("/object/empty/3.json"));
362 fail("it must not be possible, to get a list for an array");
364 catch(IllegalArgumentException e)
366 LOG.info(e.getMessage());
371 SimpleMapper.convertArray(get("/object/empty/4.json"));
372 fail("it must not be possible, to get a list for an array");
374 catch(IllegalArgumentException e)
376 LOG.info(e.getMessage());
381 public void testConvertEmptyObjectToObjectSpliterator() throws Exception
383 Spliterator<Entry<String, Object>> spliterator;
385 spliterator = SimpleMapper.getObjectSpliterator(get("/object/empty/1.json"));
387 "The created splitter should have no entries",
388 spliterator.tryAdvance((Entry<String, Object> e) ->
390 fail("The consumer should never be called!");
392 spliterator = SimpleMapper.getObjectSpliterator(get("/object/empty/2.json"));
394 "The created splitter should have no entries",
395 spliterator.tryAdvance((Entry<String, Object> e) ->
397 fail("The consumer should never be called!");
399 spliterator = SimpleMapper.getObjectSpliterator(get("/object/empty/3.json"));
401 "The created splitter should have no entries",
402 spliterator.tryAdvance((Entry<String, Object> e) ->
404 fail("The consumer should never be called!");
406 spliterator = SimpleMapper.getObjectSpliterator(get("/object/empty/4.json"));
408 "The created splitter should have no entries",
409 spliterator.tryAdvance((Entry<String, Object> e) ->
411 fail("The consumer should never be called!");
416 public void testConvertEmptyObjectToMap() throws Exception
418 Map<String, Object> map;
420 map = SimpleMapper.convertObject(get("/object/empty/1.json"));
421 assertEquals(0, map.size());
422 map = SimpleMapper.convertObject(get("/object/empty/2.json"));
423 assertEquals(0, map.size());
424 map = SimpleMapper.convertObject(get("/object/empty/3.json"));
425 assertEquals(0, map.size());
426 map = SimpleMapper.convertObject(get("/object/empty/4.json"));
427 assertEquals(0, map.size());
431 public void testConvertEmptyObject() throws Exception
435 object = SimpleMapper.convert(get("/object/empty/1.json"));
436 assertNotNull(object);
437 assertTrue("the returned object should be a list", object instanceof Map);
438 assertEquals(0, ((Map)object).size());
439 object = SimpleMapper.convert(get("/object/empty/2.json"));
440 assertNotNull(object);
441 assertTrue("the returned object should be a list", object instanceof Map);
442 assertEquals(0, ((Map)object).size());
443 object = SimpleMapper.convert(get("/object/empty/3.json"));
444 assertNotNull(object);
445 assertTrue("the returned object should be a list", object instanceof Map);
446 assertEquals(0, ((Map)object).size());
447 object = SimpleMapper.convert(get("/object/empty/4.json"));
448 assertNotNull(object);
449 assertTrue("the returned object should be a list", object instanceof Map);
450 assertEquals(0, ((Map)object).size());
455 public void testConvertArrayToArraySpliterator() throws Exception
457 Spliterator<Object> spliterator;
459 spliterator = SimpleMapper.getArraySpliterator(get("/array/1.json"));
460 checkArraySpliterator(spliterator);
461 spliterator = SimpleMapper.getArraySpliterator(get("/array/2.json"));
462 checkArraySpliterator(spliterator);
465 void checkArraySpliterator(Spliterator<Object> spliterator) throws Exception
467 assertNotNull(spliterator);
469 final ArrayList<Object> entries = new ArrayList<>(4);
470 for (int i = 0; i < 4; i++)
472 "The created splitter should have a " + (i+1) + ". entry",
473 spliterator.tryAdvance((Object t) -> { entries.add(t); })
477 "The created splitter should have no more entries",
478 spliterator.tryAdvance((Object t) ->
480 fail("The consumer should not have been called");
483 checkPartnerPageData(entries.get(3));
487 public void testConvertArrayToList() throws Exception
491 list = SimpleMapper.convertArray(get("/array/1.json"));
493 assertEquals(4, list.size());
494 checkPartnerPageData(list.get(3));
495 list = SimpleMapper.convertArray(get("/array/2.json"));
497 assertEquals(4, list.size());
498 checkPartnerPageData(list.get(3));
502 public void testConvertArrayToObjectSpliterator() throws Exception
506 SimpleMapper.getObjectSpliterator(get("/array/1.json"));
507 fail("it must not be possible, to get an object-spliterator for an array");
509 catch(IllegalArgumentException e)
511 LOG.info(e.getMessage());
516 SimpleMapper.getObjectSpliterator(get("/array/2.json"));
517 fail("it must not be possible, to get an object-spliterator for an array");
519 catch(IllegalArgumentException e)
521 LOG.info(e.getMessage());
526 public void testConvertArrayToMap() throws Exception
530 SimpleMapper.convertObject(get("/array/1.json"));
531 fail("it must not be possible, to get a map for an array");
533 catch(IllegalArgumentException e)
535 LOG.info(e.getMessage());
540 SimpleMapper.convertObject(get("/array/2.json"));
541 fail("it must not be possible, to get a map for an array");
543 catch(IllegalArgumentException e)
545 LOG.info(e.getMessage());
550 public void testConvertArray() throws Exception
555 object = SimpleMapper.convert(get("/array/1.json"));
556 assertNotNull(object);
557 assertTrue("the returned object should be a list", object instanceof List);
558 list = (List<Object>)object;
559 assertEquals(4, list.size());
560 checkPartnerPageData(list.get(3));
561 object = SimpleMapper.convert(get("/array/2.json"));
562 assertNotNull(object);
563 assertTrue("the returned object should be a list", object instanceof List);
564 list = (List<Object>)object;
565 assertEquals(4, list.size());
566 checkPartnerPageData(list.get(3));
571 public void testConvertObjectToArraySpliterator() throws Exception
575 SimpleMapper.getArraySpliterator(get("/object/1.json"));
576 fail("it must not be possible, to get an array-spliterator for an object");
578 catch(IllegalArgumentException e)
580 LOG.info(e.getMessage());
585 SimpleMapper.getArraySpliterator(get("/object/2.json"));
586 fail("it must not be possible, to get an array-spliterator for an object");
588 catch(IllegalArgumentException e)
590 LOG.info(e.getMessage());
595 public void testConvertObjectToList() throws Exception
599 SimpleMapper.convertArray(get("/object/1.json"));
600 fail("it must not be possible, to get a list for an object");
602 catch(IllegalArgumentException e)
604 LOG.info(e.getMessage());
609 SimpleMapper.convertArray(get("/object/2.json"));
610 fail("it must not be possible, to get a list for an object");
612 catch(IllegalArgumentException e)
614 LOG.info(e.getMessage());
619 public void testConvertObjectToObjectSpliterator() throws Exception
621 Spliterator<Entry<String, Object>> spliterator;
623 spliterator = SimpleMapper.getObjectSpliterator(get("/object/1.json"));
624 checkObjectSpliterator(spliterator);
625 spliterator = SimpleMapper.getObjectSpliterator(get("/object/2.json"));
626 checkObjectSpliterator(spliterator);
629 void checkObjectSpliterator(Spliterator<Entry<String, Object>> spliterator)
633 assertNotNull(spliterator);
635 final LinkedHashMap<String, Object> map = new LinkedHashMap<>();
636 for (int i = 0; i < 4; i++)
638 "The created splitter should have a " + (i+1) + ". entry",
639 spliterator.tryAdvance((Entry<String, Object> e) -> {
640 map.put(e.getKey(), e.getValue());
644 "The created splitter should have no more entries",
645 spliterator.tryAdvance((Object t) ->
647 fail("The consumer should not have been called");
654 public void testConvertObjectToMap() throws Exception
656 Map<String, Object> map;
658 map = SimpleMapper.convertObject(get("/object/1.json"));
660 assertEquals(4, map.size());
662 map = SimpleMapper.convertObject(get("/object/2.json"));
664 assertEquals(4, map.size());
669 public void testConvertObject() throws Exception
672 Map<String, Object> map;
674 object = SimpleMapper.convert(get("/object/1.json"));
675 assertNotNull(object);
676 assertTrue("the returned object should be a map", object instanceof Map);
677 map = (Map<String, Object>)object;
678 assertEquals(4, map.size());
680 object = SimpleMapper.convert(get("/object/2.json"));
681 assertNotNull(object);
682 assertTrue("the returned object should be a map", object instanceof Map);
683 map = (Map<String, Object>)object;
684 assertEquals(4, map.size());
688 void checkVariables(Map<String, Object> map)
690 Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();
691 Entry<String, Object> entry;
693 assertTrue("The map should have a first element", iterator.hasNext());
694 entry = iterator.next();
695 assertEquals("bootstrap", entry.getKey());
696 assertEquals("bootstrap.min.css", entry.getValue());
698 assertTrue("The map should have a second element", iterator.hasNext());
699 entry = iterator.next();
700 assertEquals("pages", entry.getKey());
702 "The pages-variable should be of type List",
703 entry.getValue() instanceof List
705 assertEquals(4, ((List)entry.getValue()).size());
706 checkPartnerPageData(((List)entry.getValue()).get(3));
708 assertTrue("The map should have a third element", iterator.hasNext());
709 entry = iterator.next();
710 assertEquals("footer", entry.getKey());
712 "The footer-variable should be of type List",
713 entry.getValue() instanceof List
715 assertEquals(3, ((List)entry.getValue()).size());
717 assertTrue("The map should have a third element", iterator.hasNext());
718 entry = iterator.next();
719 assertEquals("sponsorship", entry.getKey());
721 "The sponsorship-variable should be of type List",
722 entry.getValue() instanceof List
724 assertEquals(3, ((List)entry.getValue()).size());
728 void checkPartnerPageData(Object page)
730 assertTrue("The page-data should be of type Map", page instanceof Map);
731 Map<String, Object> map = (Map<String, Object>)page;
732 assertEquals(4, map.size());
733 assertEquals("/partner.html", map.get("uri"));
735 "The page-data should have an entry \"children\" of type Map",
736 map.get("children") instanceof Map
738 map = (Map<String, Object>)map.get("children");
739 assertEquals(6, map.size());
741 "The children-map should haven an entry \"/partner/juplo.html\" of type Map",
742 map.get("/partner/juplo.html") instanceof Map
744 map = (Map<String, Object>)map.get("/partner/juplo.html");
745 assertEquals(2, map.size());
747 "Wir sind Unterstützer der Nerd-Plattform juplo.de",
753 private JsonParser get(String resource) throws IOException
755 InputStream is = SimpleMapperTest.class.getResourceAsStream(resource);
756 return factory.createParser(is);