From b329dd6001752c05000a6a8f97923a740097bba0 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Wed, 22 Jun 2016 20:16:26 +0200 Subject: [PATCH] Implemented tests for the handling of an object --- .../de/juplo/jackson/SimpleMapperTest.java | 161 +++++++++++++++++ src/test/resources/object/1.json | 170 ++++++++++++++++++ src/test/resources/object/2.json | 1 + 3 files changed, 332 insertions(+) create mode 100644 src/test/resources/object/1.json create mode 100644 src/test/resources/object/2.json diff --git a/src/test/java/de/juplo/jackson/SimpleMapperTest.java b/src/test/java/de/juplo/jackson/SimpleMapperTest.java index 474cafc..873139e 100644 --- a/src/test/java/de/juplo/jackson/SimpleMapperTest.java +++ b/src/test/java/de/juplo/jackson/SimpleMapperTest.java @@ -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> spliterator; + + spliterator = SimpleMapper.getObjectSpliterator(get("/object/1.json")); + checkObjectSpliterator(spliterator); + spliterator = SimpleMapper.getObjectSpliterator(get("/object/2.json")); + checkObjectSpliterator(spliterator); + } + + void checkObjectSpliterator(Spliterator> spliterator) + throws + Exception + { + assertNotNull(spliterator); + + final LinkedHashMap map = new LinkedHashMap<>(); + for (int i = 0; i < 4; i++) + assertTrue( + "The created splitter should have a " + (i+1) + ". entry", + spliterator.tryAdvance((Entry 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 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 map; + + object = SimpleMapper.convert(get("/object/1.json")); + assertNotNull(object); + assertTrue("the returned object should be a map", object instanceof Map); + map = (Map)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)object; + assertEquals(4, map.size()); + checkVariables(map); + } + + void checkVariables(Map map) + { + Iterator> iterator = map.entrySet().iterator(); + Entry 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 index 0000000..dcaa3f4 --- /dev/null +++ b/src/test/resources/object/1.json @@ -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 index 0000000..11f0395 --- /dev/null +++ b/src/test/resources/object/2.json @@ -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"}]} -- 2.20.1