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}