package com.vaguehope.onosendai.util; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.ByteArrayInputStream; import java.net.URLConnection; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import android.text.SpannableStringBuilder; @RunWith(RobolectricTestRunner.class) public class HtmlTitleParserTest { private static String SIMPLE_HTML_TITLE = "<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + "<title>some title > goes here</title>\n" + "</head>\n" + "<body>\n" + "foo<br>bar\n" + "</body>\n" + "</html>\n"; private URLConnection con; @Before public void before () throws Exception { this.con = mock(URLConnection.class); when(this.con.getHeaderField("Content-Type")).thenReturn("Content-Type: text/html; charset=ISO-8859-1"); } @Test public void itReturnsNullForNotFound () throws Exception { runTest("<html></html>", null); } @Test public void itParsesSimpleTitle () throws Exception { runTest(SIMPLE_HTML_TITLE, "some title > goes here"); } @Test public void itParsesSimpleTitleInIncompleteHtml () throws Exception { runTest(SIMPLE_HTML_TITLE.substring(0, SIMPLE_HTML_TITLE.length() - 10), "some title > goes here"); } private void runTest (final String body, final String expectedTitle) throws Exception { assertEquals(expectedTitle != null ? new SpannableStringBuilder(expectedTitle) : null, HtmlTitleParser.INSTANCE.handleStream(this.con, new ByteArrayInputStream(body.getBytes()), body.length())); } }