/* * Copyright 2012 GitHub Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.github.mobile.tests.util; import static android.os.Build.VERSION.SDK_INT; import static android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH; import android.test.AndroidTestCase; import com.github.mobile.util.HtmlUtils; /** * Unit tests of HTML conversions done when rendering markdown */ public class HtmlUtilsTest extends AndroidTestCase { private String format(String html) { CharSequence formatted = HtmlUtils.format(html); assertNotNull(formatted); return formatted.toString().replace("<githubroot>", "") .replace("</githubroot>", ""); } /** * Single email toggle span is removed */ public void testToggleRemoved() { String html = "before <span class=\"email-hidden-toggle\"><a href=\"#\">…</a></span>after"; assertEquals("before after", format(html)); } /** * Multiple email toggle spans are removed */ public void testTogglesRemoved() { String html = "before <span class=\"email-hidden-toggle\"><a href=\"#\">…</a></span>after<span class=\"email-hidden-toggle\"><a href=\"#\">…</a></span>"; assertEquals("before after", format(html)); } /** * Email div is transformed into block quote */ public void testEmailQuoted() { String html = "before <div class=\"email-quoted-reply\">quoted</div> after"; assertEquals("before <blockquote>quoted</blockquote> after", format(html)); } /** * Email fragment div is removed and newlines are replaced with br tags */ public void testEmailFragment() { String html = "before <div class=\"email-fragment\">in\nside</div> after"; assertEquals("before in<br>side after", format(html)); } /** * Email fragment div is removed and newlines are replaced with br tags */ public void testEmailFragments() { String html = "before <div class=\"email-fragment\">in\nside</div> after <div class=\"email-fragment\">out\nside</div>"; assertEquals("before in<br>side after out<br>side", format(html)); } /** * Email fragment div is removed and newlines are replaced with br tags */ public void testTrailingEmailFragment() { String html = "before <div class=\"email-fragment\">in\nside</div>"; assertEquals("before in<br>side", format(html)); } /** * Leading break is removed */ public void testLeadingBreak() { String html = "<br>content"; assertEquals("content", format(html)); } /** * Trailing break is removed */ public void testTrailingBreak() { String html = "content<br>"; assertEquals("content", format(html)); } /** * Leading & trailing breaks are removed */ public void testWrappedBreaks() { String html = "<br>content<br>"; assertEquals("content", format(html)); } /** * Leading & trailing breaks are removed */ public void testWrappedParagraphs() { String html = "<p>content</p>"; assertEquals("content", format(html)); } /** * Paragraph replaced with break */ public void testParagraphReplacedWithBreak() { String html = "line1<p>line2</p>"; assertEquals("line1<br>line2", format(html)); } /** * em tags replaced with i tags */ public void testEmReplacedWithI() { String html = "a<em>b</em>c"; if (SDK_INT < ICE_CREAM_SANDWICH) assertEquals("a<i>b</i>c", format(html)); else assertEquals(html, format(html)); } /** * strong tags replaced with b tags */ public void testStrongReplacedWithB() { String html = "<strong>a</strong>"; if (SDK_INT < ICE_CREAM_SANDWICH) assertEquals("<b>a</b>", format(html)); else assertEquals(html, format(html)); } /** * Leading whitespace is removed */ public void testLeadingWhitespace() { String html = " content"; assertEquals("content", format(html)); } /** * Trailing whitespace is removed */ public void testTrailingWhitespace() { String html = "content "; assertEquals("content", format(html)); } /** * Leading & trailing whitespace is removed */ public void testWrappedWhitetspace() { String html = " content "; assertEquals("content", format(html)); } /** * Pre untouched */ public void testPreWithNoWhitespace() { String html = "a<pre>b</pre> c"; assertEquals("a<pre>b</pre> c", format(html)); } /** * Pre space escaped */ public void testPreWithSpaces() { String html = "a<pre> b</pre> c"; assertEquals("a<pre> b</pre> c", format(html)); } /** * Pre tab escaped */ public void testPreWithTabs() { String html = "a<pre>\tb</pre> c"; assertEquals("a<pre>    b</pre> c", format(html)); } /** * Pre newline escaped */ public void testPreWithNewline() { String html = "a<pre>\nb</pre> c"; assertEquals("a<pre><br>b</pre> c", format(html)); } /** * Pre space, tab, and newline escaped */ public void testPreWithAllWhitepsace() { String html = "a<pre>\nb\tc </pre>d"; assertEquals("a<pre><br>b    c </pre>d", format(html)); } /** * Multiple pre elements escaped */ public void testMultiplePresEscaped() { String html = "a<pre> c </pre>d<pre>\te\t</pre>"; assertEquals( "a<pre> c </pre>d<pre>    e    </pre>", format(html)); } /** * Single code element inside a pre element */ public void testFormatPreCodeOnly() { String html = "<pre><code>a\nb\nc\n</code></pre>"; assertEquals("<pre><code>a<br>b<br>c</code></pre>", format(html)); } }