Implemented tests for the handling of an object
authorKai Moritz <kai@juplo.de>
Wed, 22 Jun 2016 18:16:26 +0000 (20:16 +0200)
committerKai Moritz <kai@juplo.de>
Wed, 22 Jun 2016 18:24:12 +0000 (20:24 +0200)
src/test/java/de/juplo/jackson/SimpleMapperTest.java
src/test/resources/object/1.json [new file with mode: 0644]
src/test/resources/object/2.json [new file with mode: 0644]

index 474cafc..873139e 100644 (file)
@@ -5,6 +5,8 @@ import com.fasterxml.jackson.core.JsonParser;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -564,6 +566,165 @@ public class SimpleMapperTest
     checkPartnerPageData(list.get(3));
   }
 
+
+  @Test
+  public void testConvertObjectToArraySpliterator() throws Exception
+  {
+    try
+    {
+      SimpleMapper.getArraySpliterator(get("/object/1.json"));
+      fail("it must not be possible, to get an array-spliterator for an object");
+    }
+    catch(IllegalArgumentException e)
+    {
+      LOG.info(e.getMessage());
+    }
+
+    try
+    {
+      SimpleMapper.getArraySpliterator(get("/object/2.json"));
+      fail("it must not be possible, to get an array-spliterator for an object");
+    }
+    catch(IllegalArgumentException e)
+    {
+      LOG.info(e.getMessage());
+    }
+  }
+
+  @Test
+  public void testConvertObjectToList() throws Exception
+  {
+    try
+    {
+      SimpleMapper.convertArray(get("/object/1.json"));
+      fail("it must not be possible, to get a list for an object");
+    }
+    catch(IllegalArgumentException e)
+    {
+      LOG.info(e.getMessage());
+    }
+
+    try
+    {
+      SimpleMapper.convertArray(get("/object/2.json"));
+      fail("it must not be possible, to get a list for an object");
+    }
+    catch(IllegalArgumentException e)
+    {
+      LOG.info(e.getMessage());
+    }
+  }
+
+  @Test
+  public void testConvertObjectToObjectSpliterator() throws Exception
+  {
+    Spliterator<Entry<String, Object>> spliterator;
+
+    spliterator = SimpleMapper.getObjectSpliterator(get("/object/1.json"));
+    checkObjectSpliterator(spliterator);
+    spliterator = SimpleMapper.getObjectSpliterator(get("/object/2.json"));
+    checkObjectSpliterator(spliterator);
+  }
+
+  void checkObjectSpliterator(Spliterator<Entry<String, Object>> spliterator)
+      throws
+        Exception
+  {
+    assertNotNull(spliterator);
+
+    final LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+    for (int i = 0; i < 4; i++)
+      assertTrue(
+          "The created splitter should have a " + (i+1) + ". entry",
+          spliterator.tryAdvance((Entry<String, Object> e) -> {
+            map.put(e.getKey(), e.getValue());
+          }));
+
+    assertFalse(
+        "The created splitter should have no more entries",
+        spliterator.tryAdvance((Object t) ->
+        {
+          fail("The consumer should not have been called");
+        }));
+
+    checkVariables(map);
+  }
+
+  @Test
+  public void testConvertObjectToMap() throws Exception
+  {
+    Map<String, Object> map;
+
+    map = SimpleMapper.convertObject(get("/object/1.json"));
+    assertNotNull(map);
+    assertEquals(4, map.size());
+    checkVariables(map);
+    map = SimpleMapper.convertObject(get("/object/2.json"));
+    assertNotNull(map);
+    assertEquals(4, map.size());
+    checkVariables(map);
+  }
+
+  @Test
+  public void testConvertObject() throws Exception
+  {
+    Object object;
+    Map<String, Object> map;
+
+    object = SimpleMapper.convert(get("/object/1.json"));
+    assertNotNull(object);
+    assertTrue("the returned object should be a map", object instanceof Map);
+    map = (Map<String, Object>)object;
+    assertEquals(4, map.size());
+    checkVariables(map);
+    object = SimpleMapper.convert(get("/object/2.json"));
+    assertNotNull(object);
+    assertTrue("the returned object should be a map", object instanceof Map);
+    map = (Map<String, Object>)object;
+    assertEquals(4, map.size());
+    checkVariables(map);
+  }
+
+  void checkVariables(Map<String, Object> map)
+  {
+    Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();
+    Entry<String, Object> entry;
+
+    assertTrue("The map should have a first element", iterator.hasNext());
+    entry = iterator.next();
+    assertEquals("bootstrap", entry.getKey());
+    assertEquals("bootstrap.min.css", entry.getValue());
+
+    assertTrue("The map should have a second element", iterator.hasNext());
+    entry = iterator.next();
+    assertEquals("pages", entry.getKey());
+    assertTrue(
+        "The pages-variable should be of type List",
+        entry.getValue() instanceof List
+        );
+    assertEquals(4, ((List)entry.getValue()).size());
+    checkPartnerPageData(((List)entry.getValue()).get(3));
+
+    assertTrue("The map should have a third element", iterator.hasNext());
+    entry = iterator.next();
+    assertEquals("footer", entry.getKey());
+    assertTrue(
+        "The footer-variable should be of type List",
+        entry.getValue() instanceof List
+        );
+    assertEquals(3, ((List)entry.getValue()).size());
+
+    assertTrue("The map should have a third element", iterator.hasNext());
+    entry = iterator.next();
+    assertEquals("sponsorship", entry.getKey());
+    assertTrue(
+        "The sponsorship-variable should be of type List",
+        entry.getValue() instanceof List
+        );
+    assertEquals(3, ((List)entry.getValue()).size());
+  }
+
+
   void checkPartnerPageData(Object page)
   {
     assertTrue("The page-data should be of type Map", page instanceof Map);
diff --git a/src/test/resources/object/1.json b/src/test/resources/object/1.json
new file mode 100644 (file)
index 0000000..dcaa3f4
--- /dev/null
@@ -0,0 +1,170 @@
+       
+  
+ {  
+  "bootstrap":
+  "bootstrap.min.css", 
+  "pages": [
+
+    {
+      "uri": "/leistungen.html",
+      "name": "Leistungen",
+      "title": "Überblick über alle Vorteile unserer Veranstaltungskalender-Lösung",
+      "children":               {
+        "/leistungen.html": {
+          "name": "Unser Produkt",
+          "title": "Überblick über alle Vorteile unserer Veranstaltungskalender-Lösung"
+        },
+        "/leistungen/durchdacht--durchdachte-und-erprobte-benutzeroberfläche.html": {
+          "name": "Durchdacht",
+          "title": "Lernen Sie, warum unser Produkt ein Magnet für Ihre Benutzer ist"
+        },
+        "/leistungen/optimiert--umfassende-und-effektive-seo-strategie.html": {
+          "name": "Optimiert",
+          "title": "Lernen Sie, wie unser Produkt neue Benutzer auf Ihre Website aufmerksam macht"
+        },
+        "/leistungen/flexibel--kosten-kontrollieren-und-risiken-minimieren.html": {
+          "name": "Flexibel",
+          "title": "Lernen Sie, wie Sie Ihre Website flexibel managen können und dabei die Kosten und Risiken stets unter Kontrolle haben"
+        },
+        "/leistungen/zukunftssicher-anpassungsfähig-rückwärtskompatibel-ausbaufähig.html": {
+          "name": "Zukunftssicher",
+          "title": "Lernen Sie, wie Sie Ihre Website mit Hilfe unseres Produkts Zukunftssicher, Anpassungsfähig, Rückwärtskompatibel und Ausbaufähig machen können"
+        },
+        "/leistungen/einfach--kinderleichte-integration-in-ihre-website-und-ihren-workflow.html": {
+          "name": "Einfach",
+          "title": "Lernen Sie, wie Sie mit unserem Produkt modernste Technologie im Handumdrehen in Ihre Website und Ihren Wrkflow integrieren können"
+        }
+      }
+    }
+
+,
+
+
+    {
+      "uri": "/referenzen.html",
+      "name": 
+
+       "Referenzen",
+      "title": "Übersicht über unsere Referenzen",
+      "children": {
+        "/referenzen.html": {
+          "name": "Übersicht",
+          "title": "Übersicht über unsere Referenzen"
+        },
+        "/referenzen/coolibri.html": {
+          "name": "coolibri.de",
+          "title": "Wir haben zusammen mit und im Auftrag der coolibri GmbH den erfolgreichen Online-Veranstaltungskalender coolibri.de entwickelt"
+        },
+        "/referenzen/leitmarktwettbewerb-createmedia-nrw.html": {
+          "name": "CreateMedia.NRW",
+          "title": "yourSHOUTER ist einer der Gewinner des Leitmarktwettbewerbs CreateMedia.NRW",
+          "icon": "efre"
+        }
+      }
+    },
+    {
+      "uri": "/projekte.html",
+      "name": "Projekte",
+      "title": "Übersicht über geplante, aktuelle und abgeschlossene Projekte",
+      "children": {
+        "/projekte.html": {
+          "name": "Übersicht",
+          "title": "Übersicht über geplante, aktuelle und abgeschlossene Projekte"
+        },
+        "/projekte/ihr-veranstaltungskalender-aus-der-cloud.html": {
+          "name": "Kalender 3.0",
+          "title": "Wier entwickeln und betreiben eine moderne Veranstaltungskalender-Oberfläche, die Sie als Cloud-Ansendung im Handumdrehen in Ihre Website integrieren können"
+        },
+        "/projekte/crowdgestützte-veranstaltungs-suchmaschine.html": {
+          "name": "Veranstaltungs-Suchmaschine",
+          "title": "Wir entwickeln eine vertikale Suchmaschine für Veranstaltungs- und Locationdaten auf Basis einer deutschlandweiten, themenübergreifenden, mit Hilfe von crowdgestütztem maschinellen Lernen aufgebauten Datenbank"
+        },
+        "/projekte/hibernate4-maven-plugin.html": {
+          "name": "Hibernate Maven Plugin",
+          "title": "Wier haben ein Maven-Plugin entwickelnt, mit dem sich die Generierung von Datenbank-Schemata aus Hibernate-Mappings steuern und automatisieren lässt"
+        }
+      }
+       
+
+    },
+    {
+      "uri": "/partner.html",
+      "name": "Partner",
+      "title": "Unsere Partner, Unterstützer und Förderer",
+      "children": {
+        "/partner.html": {
+          "name": "Übersicht",
+          "title": "Unsere Partner, Unterstützer und Förderer"
+        },
+        "/partner/coolibri.html": {
+          "name": "coolibri",
+          "title": "Wir entwickeln zusammen mit der coolibri GmbH eine optimale, cloud-basierte Oberfläche für Veranstaltungskalender"
+        },
+        "/partner/rce.html": {
+          "name": "RCE",
+          "title": "Wir arbeiten zusammen mit der RCE Medien GmbH an der Vereinfachung der Erfassung und Verbreitung Ihrer Veranstaltungsdaten"
+        },
+        "/partner/juplo.html": {
+          "name": "juplo",
+          "title": "Wir sind Unterstützer der Nerd-Plattform juplo.de"
+        },
+        "/partner/mweimh-nrw.html": {
+          "name": "MWEIMH.NRW",
+          "title": "yourSHOUTER wurde von dem Ministerium für Wirtschaft, Energie, Industire, Mittelstand und Handwerk des Landes Nordhrein-Westfalen zur Förderung ausgewählt",
+          "icon": "nrw"
+        },
+        "/partner/efre--europäischer-fonds-für-regionale-entwicklung.html": {
+          "name": "EFRE.NRW",
+          "title": "yourSHOUTER erhält eine Förderung aus den Mitteln des Europäischen Fonds für Regionale Entwicklung (EFRE) - Zielbereich Investitionen in Wachstum und Beschäftigung",
+          "icon": "eu"
+        }
+      }
+    }
+  ],
+  "footer": [
+    {
+      "uri": "/kontakt.html",
+      "name": "Kontakt",
+      "title": "Alle Möglichkeiten mit uns Kontakt aufzunehmen auf einen Blick"
+    },
+    {
+      "uri": "/impressum.html",
+      "name": "Impressum",
+      "title": "Alle nach der Anbieterkennzeichnungspflicht gesetztlich geforderten Angaben auf einen Blick"
+    },
+    {
+      "uri": "/datenschutz.html",
+      "name": "Datenschutz",
+      "title": "Informationen zu von uns erhobenen Daten und unserem Umgang damit"
+    }
+  ],
+
+  "sponsorship":
+
+ [
+
+
+    {
+      "uri": "/referenzen/leitmarktwettbewerb-createmedia-nrw.html",
+      "name": "CreateMedia.NRW",
+      "title": "yourSHOUTER ist einer der Gewinner des Leitmarktwettbewerbs CreateMedia.NRW",
+      "icon": "efre"
+    },
+    {
+      "uri": "/partner/mweimh-nrw.html",
+      "name": "MWEIMH.NRW",
+      "title": "yourSHOUTER wurde von dem Ministerium für Wirtschaft, Energie, Industire, Mittelstand und Handwerk des Landes Nordhrein-Westfalen zur Förderung ausgewählt",
+      "icon": "nrw"
+    },
+    {
+      "uri": "/partner/efre--europäischer-fonds-für-regionale-entwicklung.html",
+      "name": "EFRE.NRW",
+      "title": "yourSHOUTER erhält eine Förderung aus den Mitteln des Europäischen Fonds für Regionale Entwicklung (EFRE) - Zielbereich Investitionen in Wachstum und Beschäftigung",
+      "icon": "eu"
+    }
+  ]
+       }  
+
+  
+       
diff --git a/src/test/resources/object/2.json b/src/test/resources/object/2.json
new file mode 100644 (file)
index 0000000..11f0395
--- /dev/null
@@ -0,0 +1 @@
+{"bootstrap":"bootstrap.min.css","pages":[{"uri":"/leistungen.html","name":"Leistungen","title":"Überblick über alle Vorteile unserer Veranstaltungskalender-Lösung","children":{"/leistungen.html":{"name":"Unser Produkt","title":"Überblick über alle Vorteile unserer Veranstaltungskalender-Lösung"},"/leistungen/durchdacht--durchdachte-und-erprobte-benutzeroberfläche.html":{"name":"Durchdacht","title":"Lernen Sie,warum unser Produkt ein Magnet für Ihre Benutzer ist"},"/leistungen/optimiert--umfassende-und-effektive-seo-strategie.html":{"name":"Optimiert","title":"Lernen Sie,wie unser Produkt neue Benutzer auf Ihre Website aufmerksam macht"},"/leistungen/flexibel--kosten-kontrollieren-und-risiken-minimieren.html":{"name":"Flexibel","title":"Lernen Sie,wie Sie Ihre Website flexibel managen können und dabei die Kosten und Risiken stets unter Kontrolle haben"},"/leistungen/zukunftssicher-anpassungsfähig-rückwärtskompatibel-ausbaufähig.html":{"name":"Zukunftssicher","title":"Lernen Sie,wie Sie Ihre Website mit Hilfe unseres Produkts Zukunftssicher,Anpassungsfähig,Rückwärtskompatibel und Ausbaufähig machen können"},"/leistungen/einfach--kinderleichte-integration-in-ihre-website-und-ihren-workflow.html":{"name":"Einfach","title":"Lernen Sie,wie Sie mit unserem Produkt modernste Technologie im Handumdrehen in Ihre Website und Ihren Wrkflow integrieren können"}}},{"uri":"/referenzen.html","name":"Referenzen","title":"Übersicht über unsere Referenzen","children":{"/referenzen.html":{"name":"Übersicht","title":"Übersicht über unsere Referenzen"},"/referenzen/coolibri.html":{"name":"coolibri.de","title":"Wir haben zusammen mit und im Auftrag der coolibri GmbH den erfolgreichen Online-Veranstaltungskalender coolibri.de entwickelt"},"/referenzen/leitmarktwettbewerb-createmedia-nrw.html":{"name":"CreateMedia.NRW","title":"yourSHOUTER ist einer der Gewinner des Leitmarktwettbewerbs CreateMedia.NRW","icon":"efre"}}},{"uri":"/projekte.html","name":"Projekte","title":"Übersicht über geplante,aktuelle und abgeschlossene Projekte","children":{"/projekte.html":{"name":"Übersicht","title":"Übersicht über geplante,aktuelle und abgeschlossene Projekte"},"/projekte/ihr-veranstaltungskalender-aus-der-cloud.html":{"name":"Kalender 3.0","title":"Wier entwickeln und betreiben eine moderne Veranstaltungskalender-Oberfläche,die Sie als Cloud-Ansendung im Handumdrehen in Ihre Website integrieren können"},"/projekte/crowdgestützte-veranstaltungs-suchmaschine.html":{"name":"Veranstaltungs-Suchmaschine","title":"Wir entwickeln eine vertikale Suchmaschine für Veranstaltungs- und Locationdaten auf Basis einer deutschlandweiten,themenübergreifenden,mit Hilfe von crowdgestütztem maschinellen Lernen aufgebauten Datenbank"},"/projekte/hibernate4-maven-plugin.html":{"name":"Hibernate Maven Plugin","title":"Wier haben ein Maven-Plugin entwickelnt,mit dem sich die Generierung von Datenbank-Schemata aus Hibernate-Mappings steuern und automatisieren lässt"}}},{"uri":"/partner.html","name":"Partner","title":"Unsere Partner,Unterstützer und Förderer","children":{"/partner.html":{"name":"Übersicht","title":"Unsere Partner,Unterstützer und Förderer"},"/partner/coolibri.html":{"name":"coolibri","title":"Wir entwickeln zusammen mit der coolibri GmbH eine optimale,cloud-basierte Oberfläche für Veranstaltungskalender"},"/partner/rce.html":{"name":"RCE","title":"Wir arbeiten zusammen mit der RCE Medien GmbH an der Vereinfachung der Erfassung und Verbreitung Ihrer Veranstaltungsdaten"},"/partner/juplo.html":{"name":"juplo","title":"Wir sind Unterstützer der Nerd-Plattform juplo.de"},"/partner/mweimh-nrw.html":{"name":"MWEIMH.NRW","title":"yourSHOUTER wurde von dem Ministerium für Wirtschaft,Energie,Industire,Mittelstand und Handwerk des Landes Nordhrein-Westfalen zur Förderung ausgewählt","icon":"nrw"},"/partner/efre--europäischer-fonds-für-regionale-entwicklung.html":{"name":"EFRE.NRW","title":"yourSHOUTER erhält eine Förderung aus den Mitteln des Europäischen Fonds für Regionale Entwicklung (EFRE) - Zielbereich Investitionen in Wachstum und Beschäftigung","icon":"eu"}}}],"footer":[{"uri":"/kontakt.html","name":"Kontakt","title":"Alle Möglichkeiten mit uns Kontakt aufzunehmen auf einen Blick"},{"uri":"/impressum.html","name":"Impressum","title":"Alle nach der Anbieterkennzeichnungspflicht gesetztlich geforderten Angaben auf einen Blick"},{"uri":"/datenschutz.html","name":"Datenschutz","title":"Informationen zu von uns erhobenen Daten und unserem Umgang damit"}],"sponsorship":[{"uri":"/referenzen/leitmarktwettbewerb-createmedia-nrw.html","name":"CreateMedia.NRW","title":"yourSHOUTER ist einer der Gewinner des Leitmarktwettbewerbs CreateMedia.NRW","icon":"efre"},{"uri":"/partner/mweimh-nrw.html","name":"MWEIMH.NRW","title":"yourSHOUTER wurde von dem Ministerium für Wirtschaft,Energie,Industire,Mittelstand und Handwerk des Landes Nordhrein-Westfalen zur Förderung ausgewählt","icon":"nrw"},{"uri":"/partner/efre--europäischer-fonds-für-regionale-entwicklung.html","name":"EFRE.NRW","title":"yourSHOUTER erhält eine Förderung aus den Mitteln des Europäischen Fonds für Regionale Entwicklung (EFRE) - Zielbereich Investitionen in Wachstum und Beschäftigung","icon":"eu"}]}