| /******************************************************************************* |
| * Copyright (c) 2010-2015 BSI Business Systems Integration AG. |
| * 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: |
| * BSI Business Systems Integration AG - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.scout.commons.html; |
| |
| import static org.eclipse.scout.commons.html.HTML.bold; |
| import static org.eclipse.scout.commons.html.HTML.div; |
| import static org.eclipse.scout.commons.html.HTML.italic; |
| import static org.eclipse.scout.commons.html.HTML.link; |
| import static org.eclipse.scout.commons.html.HTML.td; |
| import static org.eclipse.scout.commons.html.HTML.tr; |
| import static org.junit.Assert.assertEquals; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.scout.commons.CollectionUtility; |
| import org.junit.Test; |
| |
| /** |
| * Tests for {@link HTML} |
| * |
| * @since 6.0 (backported) |
| */ |
| public class HTMLTest { |
| private static final String HTML_TEXT = "Test Last Name&"; |
| private static final String ESCAPED_HTML_TEXT = "Test Last Name&"; |
| private static final String TEST_URL = "http://SCOUTBLABLA.com\""; |
| |
| private static final String sampleCSS = "p {" + |
| " text-align: center;" + |
| " color: red;" + |
| "}"; |
| |
| @Test |
| public void testHtmlNoBinds() { |
| assertEncodedText("h1", HTML.h1(HTML_TEXT).toHtml()); |
| assertEncodedText("h2", HTML.h2(HTML_TEXT).toHtml()); |
| assertEncodedText("h3", HTML.h3(HTML_TEXT).toHtml()); |
| assertEncodedText("h4", HTML.h4(HTML_TEXT).toHtml()); |
| assertEncodedText("h5", HTML.h5(HTML_TEXT).toHtml()); |
| assertEncodedText("h6", HTML.h6(HTML_TEXT).toHtml()); |
| assertEncodedText("b", bold(HTML_TEXT).toHtml()); |
| assertEncodedText("i", italic(HTML_TEXT).toHtml()); |
| assertEncodedText("td", td(HTML_TEXT).toHtml()); |
| assertEncodedText("div", div(HTML_TEXT).toHtml()); |
| assertEncodedText("p", HTML.p(HTML_TEXT).toHtml()); |
| assertEncodedText("span", HTML.span(HTML_TEXT).toHtml()); |
| assertEncodedText("li", HTML.li(HTML_TEXT).toHtml()); |
| assertEncodedText("head", HTML.head(HTML_TEXT).toHtml()); |
| assertEncodedText("body", HTML.body(HTML_TEXT).toHtml()); |
| } |
| |
| /** |
| * Tests a link with URL and encoded text. |
| */ |
| @Test |
| public void testLinkNoBinds() { |
| String html = HTML.link(TEST_URL, HTML_TEXT).toHtml(); |
| assertEquals("<a href=\"" + TEST_URL.replace("\"", """) + "\">" + escape(HTML_TEXT) + "</a>", html); |
| } |
| |
| /** |
| * Tests an image encoded source. |
| */ |
| @Test |
| public void testImageNoBinds() { |
| String html = HTML.img("logo.png").toHtml(); |
| assertEquals("<img src=\"logo.png\">", html); |
| } |
| |
| @Test |
| public void testNullAttribute() { |
| assertEquals("<a href=\"\"></a>", HTML.link(null, null).toHtml()); |
| assertEquals("<a href=\"\"><a>badlink</a></a>", HTML.link(null, "<a>badlink</a>").toHtml()); |
| } |
| |
| /** |
| * Tests for {@link HTML#br()} |
| */ |
| @Test |
| public void testBr() { |
| IHtmlElement br = HTML.br(); |
| assertEquals("<br>", br.toHtml()); |
| } |
| |
| @Test |
| public void testAddAttribute() { |
| IHtmlElement span = HTML.span("text").addAttribute("name", "value"); |
| assertEquals("<span name=\"value\">text</span>", span.toHtml()); |
| } |
| |
| /** |
| * Test for {@link IHtmlElement#appLink(CharSequence)} |
| */ |
| @Test |
| public void testAppLinkNoBinds() { |
| final IHtmlElement html = HTML.appLink("domain=123&text=456", "Link Text&"); |
| assertEquals("<span class=\"app-link\" data-ref=\"domain=123&text=456\">Link Text&</span>", html.toHtml()); |
| } |
| |
| @Test |
| public void testAppLinkWithQuote() { |
| final IHtmlElement html = HTML.appLink("domain=123\"text=456", "Link Text<a href=\"javascript:window.alert('bad');\">test</a>"); |
| assertEquals("<span class=\"app-link\" data-ref=\"domain=123"text=456\">Link Text<a href="javascript:window.alert('bad');">test</a></span>", html.toHtml()); |
| } |
| |
| @Test |
| public void testBoldAppLink() { |
| final IHtmlElement html = HTML.bold("asdf", HTML.appLink("domain=123&text=456", "Link Text&")); |
| assertEquals("<b>asdf<span class=\"app-link\" data-ref=\"domain=123&text=456\">Link Text&</span></b>", html.toHtml()); |
| } |
| |
| @Test |
| public void testTableNoBinds() { |
| String html = HTML.table(tr(td(HTML_TEXT))).toHtml(); |
| assertEquals("<table><tr><td>" + escape(HTML_TEXT) + "</td></tr></table>", html); |
| } |
| |
| @Test |
| public void testTableAttributesNoBinds() { |
| final IHtmlTable table = HTML.table(tr(td(HTML_TEXT))); |
| assertEquals("<table><tr><td>" + escape(HTML_TEXT) + "</td></tr></table>", table.toHtml()); |
| } |
| |
| @Test |
| public void testLinkWithBoldNoBinds() { |
| final IHtmlElement html = HTML.bold(HTML_TEXT, link(TEST_URL, HTML_TEXT)); |
| assertEquals("<b>Test Last Name&<a href=\"http://SCOUTBLABLA.com"\">Test Last Name&</a></b>", html.toHtml()); |
| } |
| |
| private String escape(String text) { |
| return HtmlHelper.escape(text); |
| } |
| |
| private void assertEncodedText(String tagName, String actualText) { |
| assertEquals("<" + tagName + ">" + ESCAPED_HTML_TEXT + "</" + tagName + ">", actualText); |
| } |
| |
| @Test |
| public void testFragment() { |
| assertEquals("", HTML.fragment((CharSequence) null).toHtml()); |
| |
| final IHtmlContent fragment = HTML.fragment(HTML.div(HTML_TEXT), HTML_TEXT); |
| assertEquals("<div>" + ESCAPED_HTML_TEXT + "</div>" + ESCAPED_HTML_TEXT, fragment.toHtml()); |
| } |
| |
| @Test |
| public void testMultipleFragments() { |
| final IHtmlContent fragment = HTML.fragment(HTML.div("1"), HTML.div("2")); |
| assertEquals("<div>1</div><div>2</div>", fragment.toHtml()); |
| } |
| |
| @Test |
| public void testRowWithMultipleBinds() { |
| IHtmlTableRow row = HTML.tr(HTML.td("p1"), HTML.td("p2"), HTML.td("p4")); |
| assertEquals("<tr><td>p1</td><td>p2</td><td>p4</td></tr>", row.toHtml()); |
| assertEquals("<tr><td>p1</td><td>p2</td><td>p4</td></tr>", row.toString()); |
| } |
| |
| @Test |
| public void testMultipleCellsNoBinds() { |
| IHtmlTableRow row1 = HTML.tr(HTML.td("p1"), HTML.td("p2")); |
| assertEquals("<tr><td>p1</td><td>p2</td></tr>", row1.toString()); |
| } |
| |
| @Test |
| public void testCellWithColspan() { |
| IHtmlTableRow row = HTML.tr(HTML.td("1").colspan(2), HTML.td("2")); |
| assertEquals("<tr><td colspan=\"2\">1</td><td>2</td></tr>", row.toHtml()); |
| } |
| |
| @Test |
| public void testMultipleRowsNoBinds() { |
| IHtmlTableRow row1 = HTML.tr(HTML.td("p1"), HTML.td("p2")); |
| IHtmlTableRow row2 = HTML.tr(HTML.td("p3"), HTML.td("p4")); |
| String row1String = "<tr><td>p1</td><td>p2</td></tr>"; |
| String row2String = "<tr><td>p3</td><td>p4</td></tr>"; |
| |
| String res = HTML.table(row1, row2).toHtml(); |
| assertEquals("<table>" + row1String + row2String + "</table>", res); |
| } |
| |
| @Test |
| public void testComplexHtml() { |
| final IHtmlElement html = HTML.div(link(TEST_URL, HTML_TEXT), HTML.table(tr(td(HTML_TEXT), td(HTML_TEXT), td(HTML_TEXT)))); |
| String expected = "<div><a href=\"http://SCOUTBLABLA.com"\">Test Last Name&</a><table><tr><td>Test Last Name&</td><td>Test Last Name&</td><td>Test Last Name&</td></tr></table></div>"; |
| assertEquals(expected, html.toHtml()); |
| } |
| |
| @Test |
| public void testUl() { |
| String html = HTML.ul(HTML.li(HTML_TEXT)).toHtml(); |
| assertEquals("<ul><li>" + ESCAPED_HTML_TEXT + "</li></ul>", html); |
| } |
| |
| @Test |
| public void testMultipleUl() { |
| String html = HTML.ul(HTML.li(HTML_TEXT), HTML.li("2")).toHtml(); |
| assertEquals("<ul><li>" + ESCAPED_HTML_TEXT + "</li><li>2</li></ul>", html); |
| } |
| |
| @Test |
| public void testMultipleOl() { |
| String html = HTML.ol(HTML.li(HTML_TEXT), HTML.li("2")).toHtml(); |
| assertEquals("<ol><li>" + ESCAPED_HTML_TEXT + "</li><li>2</li></ol>", html); |
| } |
| |
| @Test |
| public void testHtmlCssStyle() { |
| IHtmlContent head = HTML.head(HTML.cssStyle(sampleCSS)); |
| assertEquals("<head><style type=\"text/css\">" + sampleCSS + "</style></head>", head.toHtml()); |
| } |
| |
| @Test |
| public void testFullHtml() { |
| IHtmlDocument html = HTML.html(HTML.cssStyle(sampleCSS), HTML_TEXT); |
| String expected = "<html><head><style type=\"text/css\">" + sampleCSS + "</style>" + "</head><body>" + ESCAPED_HTML_TEXT + "</body></html>"; |
| assertEquals(expected, html.toHtml()); |
| } |
| |
| @Test |
| public void testFullHtmlDocType() { |
| IHtmlDocument html = HTML.html5(HTML.cssStyle(sampleCSS), HTML_TEXT); |
| String expected = "<!DOCTYPE html><html><head><style type=\"text/css\">" + sampleCSS + "</style>" + "</head><body>" + ESCAPED_HTML_TEXT + "</body></html>"; |
| assertEquals(expected, html.toHtml()); |
| } |
| |
| @Test |
| public void testPlain() { |
| assertEquals("", HTML.raw((CharSequence) null).toHtml()); |
| assertEquals(HTML_TEXT, HTML.raw(HTML_TEXT).toHtml()); |
| IHtmlContent plainLink = HTML.raw(HTML_TEXT, HTML.appLink("REF", HTML_TEXT)); |
| String plainLinkString = String.format("%s<span class=\"app-link\" data-ref=\"REF\">%s</span>", HTML_TEXT, ESCAPED_HTML_TEXT); |
| assertEquals(String.format(plainLinkString, HTML_TEXT, ESCAPED_HTML_TEXT), plainLink.toHtml()); |
| assertEquals(String.format("<b>%s</b>", plainLinkString), HTML.bold(plainLink).toHtml()); |
| assertEquals(String.format("<i>%s</i>", plainLinkString), HTML.italic(plainLink).toHtml()); |
| } |
| |
| @Test |
| public void testManyBinds() throws Exception { |
| IHtmlElement h2 = HTML.h2("h2"); |
| IHtmlTable table = createTable("0"); |
| |
| IHtmlElement html = HTML.div(h2, table); |
| |
| String exp = "<div><h2>h2</h2>" + createTableString("0") + "</div>"; |
| assertEquals(exp, html.toHtml()); |
| } |
| |
| @Test |
| public void testNullValues() { |
| String encodedNullDiv = HTML.div((String) null).toHtml(); |
| assertEquals("<div></div>", encodedNullDiv); |
| } |
| |
| @Test |
| public void testInput() { |
| String expected = "<input id='lastName' name='Last name' class='person-data' maxlength='30' value='' type='text'>"; |
| expected = expected.replace("'", "\""); |
| |
| IHtmlInput htmlInput = HTML.input().id("lastName").name("Last name").cssClass("person-data").maxlength(30).value("").type("text"); |
| assertEquals(expected, htmlInput.toHtml()); |
| } |
| |
| @Test |
| public void testSpecialCharacters() { |
| assertEquals("<p>Test$Class</p>", HTML.p("Test$Class").toHtml()); |
| assertEquals("<p>C:\\Temp\\config.properties</p>", HTML.p("C:\\Temp\\config.properties").toHtml()); |
| } |
| |
| private String createTableString(String prefix) { |
| List<String> rows = new ArrayList<String>(); |
| for (int i = 0; i < 1; i++) { |
| rows.add(createRowString(prefix, i)); |
| } |
| return "<table>" + CollectionUtility.format(rows, "") + "</table>"; |
| |
| } |
| |
| private String createRowString(String prefix, int i) { |
| return HTML.tr(HTML.td("A" + prefix + i), HTML.td("B" + prefix + i)).toHtml(); |
| } |
| |
| private IHtmlTable createTable(String prefix) { |
| List<IHtmlTableRow> rows = new ArrayList<IHtmlTableRow>(); |
| for (int i = 0; i < 1; i++) { |
| rows.add(createRow(prefix, i)); |
| } |
| return HTML.table(rows); |
| } |
| |
| private IHtmlTableRow createRow(String prefix, int i) { |
| return HTML.tr(HTML.td("A" + prefix + i), HTML.td("B" + prefix + i)); |
| } |
| |
| } |