package com.fsck.k9.message.html; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; public class HtmlSanitizerTest { private HtmlSanitizer htmlSanitizer; @Before public void setUp() throws Exception { htmlSanitizer = HtmlSanitizer.getInstance(); } @Test public void shouldRemoveMetaRefreshInHead() { String html = "<html>" + "<head><meta http-equiv=\"refresh\" content=\"1; URL=http://example.com/\"></head>" + "<body>Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body>Message</body></html>", result); } @Test public void shouldRemoveMetaRefreshBetweenHeadAndBody() { String html = "<html>" + "<head></head><meta http-equiv=\"refresh\" content=\"1; URL=http://example.com/\">" + "<body>Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body>Message</body></html>", result); } @Test public void shouldRemoveMetaRefreshInBody() { String html = "<html>" + "<head></head>" + "<body><meta http-equiv=\"refresh\" content=\"1; URL=http://example.com/\">Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body>Message</body></html>", result); } @Test public void shouldRemoveMetaRefreshWithUpperCaseAttributeValue() { String html = "<html>" + "<head><meta http-equiv=\"REFRESH\" content=\"1; URL=http://example.com/\"></head>" + "<body>Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body>Message</body></html>", result); } @Test public void shouldRemoveMetaRefreshWithMixedCaseAttributeValue() { String html = "<html>" + "<head><meta http-equiv=\"Refresh\" content=\"1; URL=http://example.com/\"></head>" + "<body>Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body>Message</body></html>", result); } @Test public void shouldRemoveMetaRefreshWithoutQuotesAroundAttributeValue() { String html = "<html>" + "<head><meta http-equiv=refresh content=\"1; URL=http://example.com/\"></head>" + "<body>Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body>Message</body></html>", result); } @Test public void shouldRemoveMetaRefreshWithSpacesInAttributeValue() { String html = "<html>" + "<head><meta http-equiv=\"refresh \" content=\"1; URL=http://example.com/\"></head>" + "<body>Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body>Message</body></html>", result); } @Test public void shouldRemoveMultipleMetaRefreshTags() { String html = "<html>" + "<head><meta http-equiv=\"refresh\" content=\"1; URL=http://example.com/\"></head>" + "<body><meta http-equiv=\"refresh\" content=\"1; URL=http://example.com/\">Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body>Message</body></html>", result); } @Test public void shouldRemoveMetaRefreshButKeepOtherMetaTags() { String html = "<html>" + "<head>" + "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">" + "<meta http-equiv=\"refresh\" content=\"1; URL=http://example.com/\">" + "</head>" + "<body>Message</body>" + "</html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" /></head>" + "<body>Message</body></html>", result); } @Test public void shouldProduceValidHtmlFromHtmlWithXmlDeclaration() { String html = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<html><head></head><body></body></html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body></body></html>", result); } @Test public void shouldNormalizeTables() { String html = "<html><head></head><body><table><tr><td></td><td></td></tr></table></body></html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body><table><tbody>" + "<tr><td></td><td></td></tr>" + "</tbody></table></body></html>", result); } @Test public void shouldHtmlEncodeXmlDirectives() { String html = "<html><head></head><body><table>" + "<tr><td><!==><!==>Hmailserver service shutdown:</td><td><!==><!==>Ok</td></tr>" + "</table></body></html>"; String result = htmlSanitizer.sanitize(html); assertEquals("<html><head></head><body><table><tbody>" + "<tr><td><!==><!==>Hmailserver service shutdown:</td><td><!==><!==>Ok</td></tr>" + "</tbody></table></body></html>", result); } }