177bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak/* 277bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * Copyright 2017, The Android Open Source Project 377bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * 477bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * Licensed under the Apache License, Version 2.0 (the "License"); 577bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * you may not use this file except in compliance with the License. 677bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * You may obtain a copy of the License at 777bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * 877bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * http://www.apache.org/licenses/LICENSE-2.0 977bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * 1077bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * Unless required by applicable law or agreed to in writing, software 1177bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * distributed under the License is distributed on an "AS IS" BASIS, 1277bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * See the License for the specific language governing permissions and 1477bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak * limitations under the License. 1577bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak */ 1677bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakpackage com.android.managedprovisioning.common; 1777bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 1877bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakimport static org.hamcrest.CoreMatchers.equalTo; 1977bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakimport static org.hamcrest.MatcherAssert.assertThat; 2077bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 2177bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakimport android.graphics.Color; 2277bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakimport android.support.test.InstrumentationRegistry; 2377bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakimport android.text.Spanned; 2477bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 2577bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakimport com.android.managedprovisioning.preprovisioning.WebActivity; 2677bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 2777bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakimport org.junit.Before; 2877bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakimport org.junit.Test; 2977bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 3077bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzakpublic class HtmlToSpannedParserTest { 3177bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak private static final int SAMPLE_COLOR = Color.MAGENTA; 3277bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak private HtmlToSpannedParser mHtmlToSpannedParser; 3377bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 3477bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak @Before 3577bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak public void setUp() throws Exception { 3677bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak mHtmlToSpannedParser = 3777bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak new HtmlToSpannedParser(new ClickableSpanFactory(SAMPLE_COLOR), 3877bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak url -> WebActivity.createIntent(InstrumentationRegistry.getTargetContext(), 3977bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak url, SAMPLE_COLOR)); 4077bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak } 4177bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 4277bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak @Test(expected = IllegalArgumentException.class) 4377bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak public void throwsExceptionForEmptyInputs1() { 4477bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak mHtmlToSpannedParser.parseHtml(null); 4577bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak } 4677bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 4777bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak @Test(expected = IllegalArgumentException.class) 4877bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak public void throwsExceptionForEmptyInputs2() { 4977bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak mHtmlToSpannedParser.parseHtml(""); 5077bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak } 5177bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 5277bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak @Test 5377bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak public void handlesSimpleText() { 5477bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak String inputHtml = "bb\n\ncc\ndd"; 5577bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak String textRaw = "bb cc dd"; // whitespace stripped out in the process of HTML conversion 5677bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 5777bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak assertRawTextCorrect(inputHtml, textRaw); 5877bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak } 5977bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 6077bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak @Test 6177bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak public void handlesComplexHtml() { 6277bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak String inputHtml = "a <b> b </b> <h1> ch1 </h1> <ol> <li> i1 </li> </ol> e"; 6377bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak String textRaw = "a b \nch1 \ni1 \ne"; 6477bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 6577bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak assertRawTextCorrect(inputHtml, textRaw); 6677bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak // TODO: add testing of formatting 6777bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak } 6877bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak 6977bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak private void assertRawTextCorrect(String inputHtml, String textRaw) { 7077bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak Spanned spanned = mHtmlToSpannedParser.parseHtml(inputHtml); 7177bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak assertThat(spanned.toString(), equalTo(textRaw)); 7277bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak } 7377bde860481225e2ecdff18e9669f877d2a74ae7Jakub Gielzak}