/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.model.ext.linkgroups.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Iterator; import org.eclipse.skalli.commons.Link; import org.eclipse.skalli.model.ext.linkgroups.LinkGroup; import org.eclipse.skalli.model.ext.linkgroups.LinkGroupsProjectExt; import org.eclipse.skalli.services.rest.RestReader; import org.eclipse.skalli.services.rest.RestWriter; import org.eclipse.skalli.testutil.AssertUtils; import org.eclipse.skalli.testutil.RestWriterTestBase; import org.junit.Test; @SuppressWarnings("nls") public class LinkGroupsConverterTest extends RestWriterTestBase { private static final String INITIAL_LINKGRP_EXTENSION_XML = "<linkGroups/>"; private static final String LINKGRP_EXTENSION_XML = "<linkGroups><linkGroups>" + "<linkGroup caption=\"group1\">" + "<link ref=\"urlA\">a</link>" + "<link ref=\"urlB\">b</link>" + "</linkGroup>" + "<linkGroup caption=\"group2\">" + "<link ref=\"urlX\">x</link>" + "</linkGroup>" + "</linkGroups></linkGroups>"; private static final String INITIAL_LINKGRP_EXTENSION_JSON = "{}"; private static final String LINKGRP_EXTENSION_JSON = "{\"items\":[" + "{\"caption\":\"group1\"," + "\"links\":[" + "{\"ref\":\"urlA\",\"value\":\"a\"}," + "{\"ref\":\"urlB\",\"value\":\"b\"}" + "]}," + "{\"caption\":\"group2\"," + "\"links\":[" + "{\"ref\":\"urlX\",\"value\":\"x\"}" + "]}]}"; private static final String LINKGRP_EXTENSION_UNKNOWN_ATTR_JSON = "{\"items\":[" + "{\"ignore\":true}," + "{\"caption\":\"group1\",\"ignore\":true," + "\"links\":[" + "{\"ref\":\"urlB\",\"value\":\"b\"}," + "{\"ref\":\"urlA\",\"value\":\"a\"},{\"whatever\":4711}" + "]}," + "{\"unknown\":\"yes\"}," + "{\"caption\":\"group2\"," + "\"links\":[" + "{\"ref\":\"urlX\",\"value\":\"x\"}" + "]}]}"; @Test public void testMarshalBlankExtensionXML() throws Exception { LinkGroupsProjectExt links = new LinkGroupsProjectExt(); RestWriter restWriter = getRestWriterXML(); marshalLinkGroupsExtension(links, restWriter); assertEqualsXML(INITIAL_LINKGRP_EXTENSION_XML); } @Test public void testMarshalExtensionXML() throws Exception { LinkGroupsProjectExt links = newLinkGroups(); RestWriter restWriter = getRestWriterXML(); marshalLinkGroupsExtension(links, restWriter); assertEqualsXML(LINKGRP_EXTENSION_XML); } @Test public void testMarshalBlankExtensionJSON() throws Exception { LinkGroupsProjectExt links = new LinkGroupsProjectExt(); RestWriter restWriter = getRestWriterJSON(); marshalLinkGroupsExtension(links, restWriter); assertEqualsJSON(INITIAL_LINKGRP_EXTENSION_JSON); } @Test public void testMarshalExtensionJSON() throws Exception { LinkGroupsProjectExt links = newLinkGroups(); RestWriter restWriter = getRestWriterJSON(); marshalLinkGroupsExtension(links, restWriter); assertEqualsJSON(LINKGRP_EXTENSION_JSON); } @Test public void testUnmarshallInitialJSON() throws Exception { RestReader restReader = getRestReaderJSON(INITIAL_LINKGRP_EXTENSION_JSON); LinkGroupsProjectExt linkGrp = unmarshalLinkGroupsExtension(restReader); assertTrue(linkGrp.getLinkGroups().isEmpty()); } @Test public void testUnmarshallJSON() throws Exception { RestReader restReader = getRestReaderJSON(LINKGRP_EXTENSION_JSON); LinkGroupsProjectExt linkGrp = unmarshalLinkGroupsExtension(restReader); assertEquals(2, linkGrp.getLinkGroups().size()); Iterator<LinkGroup> it = linkGrp.getLinkGroups().iterator(); assertLinkGroup(it.next(), "group1", new Link("urlA","a"), new Link("urlB","b")); assertLinkGroup(it.next(), "group2", new Link("urlX","x")); } @Test public void testUnmarshallIgnoreUnknownAttributesJSON() throws Exception { RestReader restReader = getRestReaderJSON(LINKGRP_EXTENSION_UNKNOWN_ATTR_JSON); LinkGroupsProjectExt linkGrp = unmarshalLinkGroupsExtension(restReader); assertEquals(2, linkGrp.getLinkGroups().size()); Iterator<LinkGroup> it = linkGrp.getLinkGroups().iterator(); assertLinkGroup(it.next(), "group1", new Link("urlB","b"), new Link("urlA","a")); assertLinkGroup(it.next(), "group2", new Link("urlX","x")); } private void assertLinkGroup(LinkGroup grp, String caption, Link...links) { assertEquals(caption, grp.getCaption()); AssertUtils.assertEquals("getItems()", grp.getItems(), links); } private LinkGroupsProjectExt newLinkGroups() { LinkGroupsProjectExt links = new LinkGroupsProjectExt(); links.addLinkGroup(new LinkGroup("group1", Arrays.asList( new Link("urlA", "a"), new Link("urlB", "b")))); links.addLinkGroup(new LinkGroup("group2", Arrays.asList( new Link("urlX", "x")))); return links; } private void marshalLinkGroupsExtension(LinkGroupsProjectExt links, RestWriter restWriter) throws Exception { LinkGroupsConverter converter = new LinkGroupsConverter(); restWriter.object("linkGroups"); converter.marshal(links, restWriter); restWriter.end(); restWriter.flush(); } private LinkGroupsProjectExt unmarshalLinkGroupsExtension(RestReader restReader) throws Exception { LinkGroupsConverter converter = new LinkGroupsConverter(); restReader.object(); LinkGroupsProjectExt linkGrp = converter.unmarshal(restReader); restReader.end(); return linkGrp; } }