/******************************************************************************* * 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.commons; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.net.URL; import java.text.MessageFormat; import java.util.Arrays; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @SuppressWarnings("nls") public class HtmlBuilderTest { private static final String DUMMY_COMMENT = "<!-- -->"; private static final String TEST_ICON = "icon"; private static final String TEST_ALT_TEXT = "alt"; private static final String TEST_STYLE = "style"; private static final String TEST_STYLE_CLASS = "styleClass"; private static final String TEST_URL = "http://example.org"; private static final String TEST_LABEL = "label"; private static final String TEST_SEC_LABEL = "alternative-label"; private static final String TEST_TARGET = "target"; private static final String TEST_MAILTO = "homer@example.org"; private static final String TEST_MAILTO_URL_ENCODED = "homer%40example.org"; private static final int TEST_LEVEL = 2; private static final String[] TEST_URLS = new String[]{"url1", "url2", "url3"}; private static final List<String> TEST_URLS_SET = Arrays.asList(TEST_URLS); private static final Link[] TEST_LINKS = new Link[]{ new Link("url1","label1"), new Link("url2","label2"), new Link("url3","label3")}; private static final List<Link> TEST_LINKS_SET = Arrays.asList(TEST_LINKS); private static final String PATTERN_ICON = "<img src=\"{0}\"/>"; private static final String PATTERN_ICON_ALL_PARAMS = "<img src=\"{0}\" alt=\"{1}\" class=\"{2}\" style=\"{3}\"/>"; private static final String PATTERN_ICON_NO_STYLE = "<img src=\"{0}\" alt=\"{1}\" class=\"{2}\"/>"; private static final String PATTERN_ICON_NO_STYLECLASS = "<img src=\"{0}\" alt=\"{1}\" style=\"{2}\"/>"; private static final String PATTERN_ICON_NO_ALT = "<img src=\"{0}\" class=\"{1}\" style=\"{2}\"/>"; private static final String PATTERN_LINK_ALL_PARAMS = "<a href=\"{0}\" target=\"{1}\" class=\"{2}\" style=\"{3}\">{4}</a>"; private static final String PATTERN_LINK_URL_AND_LABEL_ONLY = "<a href=\"{0}\" target=\"{1}\">{2}</a>"; private static final String PATTERN_LINK_URL_LABEL_WITH_STYLECLASS = "<a href=\"{0}\" target=\"{1}\" class=\"{2}\">{3}</a>"; private static final String PATTERN_LINK_NO_STYLE = "<a href=\"{0}\" target=\"{1}\" class=\"{2}\">{3}</a>"; private static final String PATTERN_LINK_NO_STYLE_CLASS = "<a href=\"{0}\" target=\"{1}\" style=\"{2}\">{3}</a>"; private static final String PATTERN_ICONIZED_LINK = "<img src=\"{0}\"/><a href=\"{1}\" target=\"{2}\">{3}</a>"; private static final String PATTERN_LINKS = "<a href=\"{0}\" target=\"{3}\">{5}</a>" + "<a href=\"{1}\" target=\"{3}\" class=\"{4}\">{6}</a>" + "<a href=\"{2}\" target=\"{3}\" class=\"{4}\">{7}</a>"; private static final String PATTERN_ICONIZED_LINKS = "<img src=\"{8}\"/>" + "<a href=\"{0}\" target=\"{3}\">{5}</a>" + "<a href=\"{1}\" target=\"{3}\" class=\"{4}\">{6}</a>" + "<a href=\"{2}\" target=\"{3}\" class=\"{4}\">{7}</a>"; private static final String PATTERN_MAILTO = "<a href=\"mailto:{0}\">{1}</a>"; private static final String PATTERN_MAILTO_WITH_ICON = "<img src=\"{0}\"/><a href=\"mailto:{1}\">{2}</a>"; private static final String PATTERN_HEADER = "<h{0} class=\"{1}\" style=\"{2}\">{3}</h{0}>\n"; private static final String PATTERN_HEADER_NO_STYLES = "<h{0}>{1}</h{0}>\n"; private HtmlBuilder html; @Before public void setup() throws Exception { html = new HtmlBuilder(); } @Test public void testAppendLineBreak() throws Exception { assertEquals("<br/>\n", html.appendLineBreak()); } @Test public void testAppendIcon() throws Exception { assertEquals(MessageFormat.format(PATTERN_ICON, TEST_ICON), html.appendIcon(TEST_ICON)); assertEquals("", html.appendIcon(null)); assertEquals("", html.appendIcon("")); } @Test public void testAppendIconWithAllParams() throws Exception { assertEquals(MessageFormat.format(PATTERN_ICON_ALL_PARAMS, TEST_ICON, TEST_ALT_TEXT, TEST_STYLE_CLASS, TEST_STYLE), html.appendIcon(TEST_ICON, TEST_ALT_TEXT, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_ICON, TEST_ICON), html.appendIcon(TEST_ICON, null, null, null)); assertEquals("", html.appendIcon(null, TEST_ALT_TEXT, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals("", html.appendIcon("", TEST_ALT_TEXT, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_ICON_NO_ALT, TEST_ICON, TEST_STYLE_CLASS, TEST_STYLE), html.appendIcon(TEST_ICON, null, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_ICON_NO_ALT, TEST_ICON, TEST_STYLE_CLASS, TEST_STYLE), html.appendIcon(TEST_ICON, "", TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_ICON_NO_STYLECLASS, TEST_ICON, TEST_ALT_TEXT, TEST_STYLE), html.appendIcon(TEST_ICON, TEST_ALT_TEXT, null, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_ICON_NO_STYLECLASS, TEST_ICON, TEST_ALT_TEXT, TEST_STYLE), html.appendIcon(TEST_ICON, TEST_ALT_TEXT, "", TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_ICON_NO_STYLE, TEST_ICON, TEST_ALT_TEXT, TEST_STYLE_CLASS), html.appendIcon(TEST_ICON, TEST_ALT_TEXT, TEST_STYLE_CLASS, null)); assertEquals(MessageFormat.format(PATTERN_ICON_NO_STYLE, TEST_ICON, TEST_ALT_TEXT, TEST_STYLE_CLASS), html.appendIcon(TEST_ICON, TEST_ALT_TEXT, TEST_STYLE_CLASS, "")); } @Test public void testAppendLink() throws Exception { final URL url = new URL(TEST_URL); assertEquals(MessageFormat.format(PATTERN_LINK_ALL_PARAMS, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_LINK_ALL_PARAMS, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE, TEST_LABEL), html.appendLink(TEST_LABEL, url, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(TEST_LABEL, html.appendLink(TEST_LABEL, (String)null, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(TEST_LABEL, html.appendLink(TEST_LABEL, "", TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_LINK_ALL_PARAMS, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE, TEST_URL), html.appendLink(null, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_LINK_ALL_PARAMS, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE, TEST_URL), html.appendLink("", TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(DUMMY_COMMENT, html.appendLink(null, (String)null, TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(DUMMY_COMMENT, html.appendLink("", "", TEST_TARGET, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_LINK_ALL_PARAMS, TEST_URL, HtmlBuilder.DEFAULT_TARGET, TEST_STYLE_CLASS, TEST_STYLE, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL, null, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_LINK_ALL_PARAMS, TEST_URL, HtmlBuilder.DEFAULT_TARGET, TEST_STYLE_CLASS, TEST_STYLE, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL, "", TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_LINK_NO_STYLE_CLASS, TEST_URL, TEST_TARGET, TEST_STYLE, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL, TEST_TARGET, null, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_LINK_NO_STYLE_CLASS, TEST_URL, TEST_TARGET, TEST_STYLE, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL, TEST_TARGET, "", TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_LINK_NO_STYLE, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, null)); assertEquals(MessageFormat.format(PATTERN_LINK_NO_STYLE, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL, TEST_TARGET, TEST_STYLE_CLASS, "")); // overloaded helpers assertEquals(MessageFormat.format(PATTERN_LINK_URL_AND_LABEL_ONLY, TEST_URL, HtmlBuilder.DEFAULT_TARGET, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL)); assertEquals(MessageFormat.format(PATTERN_LINK_URL_AND_LABEL_ONLY, TEST_URL, HtmlBuilder.DEFAULT_TARGET, TEST_LABEL), html.appendLink(TEST_LABEL, url)); assertEquals(MessageFormat.format(PATTERN_LINK_URL_LABEL_WITH_STYLECLASS, TEST_URL, HtmlBuilder.DEFAULT_TARGET, TEST_STYLE_CLASS, TEST_LABEL), html.appendLink(TEST_LABEL, TEST_URL, TEST_STYLE_CLASS)); assertEquals(MessageFormat.format(PATTERN_LINK_URL_LABEL_WITH_STYLECLASS, TEST_URL, HtmlBuilder.DEFAULT_TARGET, TEST_STYLE_CLASS, TEST_LABEL), html.appendLink(TEST_LABEL, url, TEST_STYLE_CLASS)); } @Test public void testAppendIconizedLink() throws Exception { assertEquals(MessageFormat.format(PATTERN_ICONIZED_LINK, TEST_ICON, TEST_URL, HtmlBuilder.DEFAULT_TARGET, TEST_LABEL), html.appendIconizedLink(TEST_ICON, TEST_LABEL, TEST_URL)); } @Test public void testAppendLinks() throws Exception { assertEquals(MessageFormat.format(PATTERN_LINKS, TEST_URLS[0], TEST_URLS[1], TEST_URLS[2], HtmlBuilder.DEFAULT_TARGET, HtmlBuilder.STYLE_LEFT_MARGIN, TEST_LABEL, TEST_SEC_LABEL, TEST_SEC_LABEL), html.appendLinks(TEST_LABEL, TEST_SEC_LABEL, TEST_URLS_SET)); assertEquals("", html.appendLinks(TEST_LABEL, TEST_SEC_LABEL, null)); assertEquals(MessageFormat.format(PATTERN_LINKS, TEST_URLS[0], TEST_URLS[1], TEST_URLS[2], HtmlBuilder.DEFAULT_TARGET, HtmlBuilder.STYLE_LEFT_MARGIN, TEST_LABEL, TEST_LABEL, TEST_LABEL), html.appendLinks(TEST_LABEL, null, TEST_URLS_SET)); assertEquals(MessageFormat.format(PATTERN_LINKS, TEST_URLS[0], TEST_URLS[1], TEST_URLS[2], HtmlBuilder.DEFAULT_TARGET, HtmlBuilder.STYLE_LEFT_MARGIN, TEST_SEC_LABEL, TEST_SEC_LABEL, TEST_SEC_LABEL), html.appendLinks(null, TEST_SEC_LABEL, TEST_URLS_SET)); assertEquals(MessageFormat.format(PATTERN_LINKS, TEST_URLS[0], TEST_URLS[1], TEST_URLS[2], HtmlBuilder.DEFAULT_TARGET, HtmlBuilder.STYLE_LEFT_MARGIN, TEST_URLS[0], TEST_URLS[1], TEST_URLS[2]), html.appendLinks(null, null, TEST_URLS_SET)); assertEquals(MessageFormat.format(PATTERN_LINKS, TEST_LINKS[0].getUrl(), TEST_LINKS[1].getUrl(), TEST_LINKS[2].getUrl(), HtmlBuilder.DEFAULT_TARGET, HtmlBuilder.STYLE_LEFT_MARGIN, TEST_LINKS[0].getLabel(), TEST_LINKS[1].getLabel(), TEST_LINKS[2].getLabel()), html.appendLinks(TEST_LINKS_SET)); } @Test public void testAppendIconizedLinks() throws Exception { assertEquals(MessageFormat.format(PATTERN_ICONIZED_LINKS, TEST_URLS[0], TEST_URLS[1], TEST_URLS[2], HtmlBuilder.DEFAULT_TARGET, HtmlBuilder.STYLE_LEFT_MARGIN, TEST_LABEL, TEST_SEC_LABEL, TEST_SEC_LABEL, TEST_ICON), html.appendIconizedLinks(TEST_ICON, TEST_LABEL, TEST_SEC_LABEL, TEST_URLS_SET)); } private void assertEquals(String s, HtmlBuilder html) throws Exception { Assert.assertEquals(s, html.toString()); html.clear(); } @Test public void testAppendMailToLink() throws Exception { assertEquals(MessageFormat.format(PATTERN_MAILTO, TEST_MAILTO_URL_ENCODED, TEST_LABEL), html.appendMailToLink(null, TEST_MAILTO, TEST_LABEL)); assertEquals(MessageFormat.format(PATTERN_MAILTO, TEST_MAILTO_URL_ENCODED, TEST_MAILTO), html.appendMailToLink(null, TEST_MAILTO, null)); assertEquals(MessageFormat.format(PATTERN_MAILTO, TEST_MAILTO_URL_ENCODED, TEST_MAILTO), html.appendMailToLink(null, TEST_MAILTO, "")); assertEquals(MessageFormat.format(PATTERN_MAILTO, TEST_MAILTO_URL_ENCODED, "<"), html.appendMailToLink(null, TEST_MAILTO, "<")); assertEquals(MessageFormat.format(PATTERN_MAILTO, TEST_MAILTO_URL_ENCODED, TEST_MAILTO), html.appendMailToLink(null, TEST_MAILTO, null)); assertEquals("", html.appendMailToLink(null, null, null)); assertEquals("", html.appendMailToLink(null, "", null)); assertEquals(MessageFormat.format(PATTERN_MAILTO_WITH_ICON, TEST_ICON, TEST_MAILTO_URL_ENCODED, TEST_LABEL), html.appendMailToLink(TEST_ICON, TEST_MAILTO, TEST_LABEL)); } @Test public void testAppendHeader() throws Exception { assertEquals(MessageFormat.format(PATTERN_HEADER, TEST_LEVEL, TEST_STYLE_CLASS, TEST_STYLE, TEST_LABEL), html.appendHeader(TEST_LABEL, TEST_LEVEL, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_HEADER, 1, TEST_STYLE_CLASS, TEST_STYLE, TEST_LABEL), html.appendHeader(TEST_LABEL, 0, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_HEADER, 6, TEST_STYLE_CLASS, TEST_STYLE, TEST_LABEL), html.appendHeader(TEST_LABEL, Integer.MAX_VALUE, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_HEADER, TEST_LEVEL, TEST_STYLE_CLASS, TEST_STYLE, DUMMY_COMMENT), html.appendHeader(null, TEST_LEVEL, TEST_STYLE_CLASS, TEST_STYLE)); assertEquals(MessageFormat.format(PATTERN_HEADER_NO_STYLES, TEST_LEVEL, TEST_LABEL), html.appendHeader(TEST_LABEL, TEST_LEVEL)); } @Test public void testEndsWith() throws Exception { html.append("xyz"); assertTrue(html.endsWith("xyz")); assertTrue(html.endsWith("yz")); assertTrue(html.endsWith("z")); assertTrue(html.endsWith("")); assertFalse(html.endsWith("abc")); assertFalse(html.endsWith("x")); assertFalse(html.endsWith("y")); assertFalse(html.endsWith("xy")); assertFalse(html.endsWith(null)); html.clear(); assertTrue(html.endsWith("")); } }