| /******************************************************************************* |
| * Copyright (c) 2016 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.junit.Assert.assertEquals; |
| |
| import org.eclipse.scout.commons.StringUtility; |
| import org.junit.Test; |
| |
| /** |
| * @since 6.0 (backported) |
| */ |
| public class HtmlHelperTest { |
| @Test |
| public void testToPlainText() { |
| // Note: Some of the expected results are not really what the user would expect, |
| // but what the toPlainText() method currently returns. They are marked with "[?]" |
| // below. Sometimes in the future, it should be considered to change them. |
| |
| assertEquals(null, HtmlHelper.toPlainText(null)); |
| assertEquals("", HtmlHelper.toPlainText("")); |
| |
| // Text only |
| assertEquals("hello", HtmlHelper.toPlainText("hello")); |
| assertEquals("one two", HtmlHelper.toPlainText("one\ntwo")); |
| assertEquals("one two", HtmlHelper.toPlainText("one\r\ntwo")); |
| assertEquals("onetwo", HtmlHelper.toPlainText("one\rtwo")); |
| assertEquals("hell<", HtmlHelper.toPlainText("hell<")); |
| assertEquals("one two", HtmlHelper.toPlainText("one two")); |
| assertEquals("hellö", HtmlHelper.toPlainText("hellö")); // [?] not all entities are replaced |
| assertEquals("one\ttwo", HtmlHelper.toPlainText("one	two")); |
| assertEquals("one \t two", HtmlHelper.toPlainText("one 	 two")); |
| assertEquals("one\ttwo", HtmlHelper.toPlainText("one" + StringUtility.HTML_ENCODED_TAB + "two")); |
| |
| // Simple documents |
| assertEquals("", HtmlHelper.toPlainText("<html>")); |
| assertEquals("", HtmlHelper.toPlainText("<html></html>")); |
| assertEquals("", HtmlHelper.toPlainText("<html><head></html>")); |
| assertEquals("one", HtmlHelper.toPlainText("<html><head>one</html>")); |
| assertEquals("one & two", HtmlHelper.toPlainText("<html><head>one & two</html>")); |
| assertEquals("one & two", HtmlHelper.toPlainText("<html><head>one & two</html>")); |
| assertEquals("one & two three", HtmlHelper.toPlainText("<html><head>one & two</head><body>three</html>")); // [?] invalid <body>, has no end tag |
| assertEquals("three", HtmlHelper.toPlainText("<html><head>one & two</head><body>three</body></html>")); |
| |
| // Line breaks |
| assertEquals("a\nb", HtmlHelper.toPlainText("a<br>b")); |
| assertEquals("a\nb", HtmlHelper.toPlainText("a <br/> b")); |
| assertEquals("a\nb", HtmlHelper.toPlainText("a <br/> b")); |
| assertEquals("a \nb", HtmlHelper.toPlainText("a <br/> b")); |
| assertEquals("line", HtmlHelper.toPlainText("<br/>line")); // [?] |
| assertEquals("line1\nx\nline2", HtmlHelper.toPlainText("<p>line1<br>\nx</p><p>line2</p>")); |
| assertEquals("line1 x\nline2", HtmlHelper.toPlainText("<div>line1\nx</div><div>line2</div>")); // [?] |
| assertEquals("line1\nline2", HtmlHelper.toPlainText("<div>line1<br/></div><div>line2<br/></div>")); |
| |
| // Tables |
| assertEquals("one two\nthree four", HtmlHelper.toPlainText("<table><tr><td>one</td><td>two</td></tr><tr><td>three</td><td>four</td></tr></table>")); |
| } |
| |
| @Test |
| public void testEscape() { |
| assertEquals(null, HtmlHelper.escape(null)); |
| assertEquals("", HtmlHelper.escape("")); |
| assertEquals(" ", HtmlHelper.escape(" ")); |
| assertEquals("hello", HtmlHelper.escape("hello")); |
| |
| assertEquals("one & two", HtmlHelper.escape("one & two")); |
| assertEquals("one < two", HtmlHelper.escape("one < two")); |
| assertEquals("><script>alert('hacker attack');</script><", HtmlHelper.escape("><script>alert('hacker attack');</script><")); |
| assertEquals("one&nbsp;&nbsp; two", HtmlHelper.escape("one two")); |
| assertEquals("this is "good"", HtmlHelper.escape("this is \"good\"")); |
| assertEquals("http://www.example.com/~myapp/script?q=search%20query&time=now&x=17263.23", HtmlHelper.escape("http://www.example.com/~myapp/script?q=search%20query&time=now&x=17263.23")); |
| assertEquals("<div><span style="color: red; content: '\\u39';">Alert!</span><br/>Line2</div>", |
| HtmlHelper.escape("<div><span style=\"color: red; content: '\\u39';\">Alert!</span><br/>Line2</div>")); |
| assertEquals("hell&ouml;", HtmlHelper.escape("hellö")); |
| assertEquals("one/two/end", HtmlHelper.escape("one/two/end")); |
| |
| // Things that should NOT be escaped |
| assertEquals("one\ntwo end", HtmlHelper.escape("one\ntwo end")); |
| assertEquals("key:\tvalue\r\nline2", HtmlHelper.escape("key:\tvalue\r\nline2")); |
| } |
| |
| @Test |
| public void testUnescape() { |
| assertEquals(null, HtmlHelper.unescape(null)); |
| assertEquals("", HtmlHelper.unescape("")); |
| assertEquals(" ", HtmlHelper.unescape(" ")); |
| assertEquals("hello", HtmlHelper.unescape("hello")); |
| |
| assertEquals("one & two", HtmlHelper.unescape("one & two")); |
| assertEquals("one < two", HtmlHelper.unescape("one < two")); |
| assertEquals("><script>alert('hacker attack');</script><", HtmlHelper.unescape("><script>alert('hacker attack');</script><")); |
| assertEquals("one two", HtmlHelper.unescape("one&nbsp;&nbsp; two")); |
| assertEquals("this is \"good\"", HtmlHelper.unescape("this is "good"")); |
| assertEquals("http://www.example.com/~myapp/script?q=search%20query&time=now&x=17263.23", HtmlHelper.unescape("http://www.example.com/~myapp/script?q=search%20query&time=now&x=17263.23")); |
| assertEquals("<div><span style=\"color: red; content: '\\u39';\">Alert!</span><br/>Line2</div>", |
| HtmlHelper.unescape("<div><span style="color: red; content: '\\u39';">Alert!</span><br/>Line2</div>")); |
| assertEquals("hellö", HtmlHelper.unescape("hell&ouml;")); |
| assertEquals("one/two/end", HtmlHelper.unescape("one/two/end")); |
| |
| // Things that should NOT be unescaped |
| assertEquals("one\ntwo end", HtmlHelper.unescape("one\ntwo end")); |
| assertEquals("key:\tvalue\r\nline2", HtmlHelper.unescape("key:\tvalue\r\nline2")); |
| assertEquals("hellö", HtmlHelper.unescape("hellö")); |
| } |
| } |