package org.clapper.util.html;
import org.junit.*;
import static org.junit.Assert.*;
import org.clapper.util.text.XStringBuilder;
import org.clapper.util.text.Unicode;
public class HTMLEntitiesTest
{
class TestData
{
String before;
String after;
TestData(String before, String after)
{
this.before = before;
this.after = after;
}
}
public HTMLEntitiesTest()
{
}
@Test public void convertHTMLEntities()
{
TestData[] testData = new TestData[]
{
new TestData("™", "\u2122"),
new TestData("™", "™"),
new TestData("™", "\u2122"),
new TestData("™", "™"),
new TestData("", "\u007f"),
new TestData("&foobar baz", "&foobar\u00a0baz"),
new TestData("&foobar; baz", "&foobar;\u00a0baz"),
new TestData("&foobar;  baz", "&foobar;  baz")
};
XStringBuilder bufAfter = new XStringBuilder();
XStringBuilder bufExpected = new XStringBuilder();
for (int i = 0; i < testData.length; i++)
{
String after = HTMLUtil.convertCharacterEntities(testData[i].before);
bufAfter.reset(after);
bufAfter.encodeMetacharacters();
bufExpected.reset(testData[i].after);
bufExpected.encodeMetacharacters();
assertEquals(testData[i].before + " converts to \"" +
bufAfter.toString() +
"\", instead of the expected value of \"" +
bufExpected.toString() + "\"",
testData[i].after, after);
}
}
@Test public void textFromHTML()
{
TestData[] testData = new TestData[]
{
new TestData("&foobar baz", "&foobar baz"),
new TestData("&foobar; baz", "&foobar; baz"),
new TestData("&foobar;  baz", "&foobar;  baz"),
new TestData("foo" + Unicode.EN_SPACE + "bar", "foo bar"),
new TestData("foo" + Unicode.EM_SPACE + "bar", "foo bar"),
new TestData("foo" + Unicode.EM_DASH + "bar", "foo--bar"),
new TestData("foo" + Unicode.EN_DASH + "bar", "foo-bar"),
new TestData("foo" + Unicode.NON_BREAKING_HYPHEN + "bar", "foo-bar"),
new TestData("foo-bar", "foo-bar"),
new TestData("foo" + Unicode.ZERO_WIDTH_NON_JOINER + "bar", "foobar"),
new TestData("foo" + Unicode.ZERO_WIDTH_JOINER + "bar", "foobar")
};
XStringBuilder bufBefore = new XStringBuilder();
XStringBuilder bufExpected = new XStringBuilder();
XStringBuilder bufActual = new XStringBuilder();
for (TestData data : testData)
{
String after = HTMLUtil.textFromHTML(data.before);
bufActual.reset(after);
bufActual.encodeMetacharacters();
bufExpected.reset(data.after);
bufExpected.encodeMetacharacters();
bufBefore.reset(data.before);
bufBefore.encodeMetacharacters();
assertEquals(bufBefore.toString() + " converts to \"" +
bufActual.toString() +
"\", instead of the expected value of \"" +
bufExpected.toString() + "\"",
data.after, after);
}
}
@Test public void makeCharacterEntities()
{
TestData[] testData = new TestData[]
{
new TestData(Unicode.NBSP + "", " "),
new TestData("\u00b9", "¹"),
new TestData("\u00cb", "Ë"),
new TestData("\u2288", "⊈"),
new TestData("\u00c8", "È"),
new TestData("\u2264", "≤")
};
XStringBuilder bufBefore = new XStringBuilder();
XStringBuilder bufExpected = new XStringBuilder();
XStringBuilder bufActual = new XStringBuilder();
for (int i = 0; i < testData.length; i++)
{
String after = HTMLUtil.makeCharacterEntities(testData[i].before);
bufActual.reset(after);
bufActual.encodeMetacharacters();
bufExpected.reset(testData[i].after);
bufExpected.encodeMetacharacters();
bufBefore.reset(testData[i].before);
bufBefore.encodeMetacharacters();
assertEquals(bufBefore.toString() + " converts to \"" +
bufActual.toString() +
"\", instead of the expected value of \"" +
bufExpected.toString() + "\"",
testData[i].after, after);
}
}
}