package jp.juggler.subwaytooter.util import androidx.test.platform.app.InstrumentationRegistry import androidx.test.runner.AndroidJUnit4 import jp.juggler.subwaytooter.api.entity.Host import jp.juggler.util.neatSpaces import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @Suppress("MemberVisibilityCanPrivate") @RunWith(AndroidJUnit4::class) class TestHtmlDecoder { class SpanMeta( val span: Any, val start: Int, val end: Int, val flags: Int, val text: String ) { override fun toString() = "[$start..$end) $flags ${span.javaClass.simpleName} $text" } @Test fun test1() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext val options = DecodeOptions(appContext, LinkHelper.create(Host.parse("instance.test"))) val html = """ 日本語で楽しめるMastodonサーバを提供しています。 利用規約を読んでからサインアップしてください。 Androidアプリ iOSアプリ long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text long text """.trimIndent() val text = options.decodeHTML(html).neatSpaces() val spanArray = text.getSpans(0, text.length, Any::class.java).map { val start = text.getSpanStart(it) val end = text.getSpanEnd(it) SpanMeta( span = it, start = start, end = end, flags = text.getSpanFlags(it), text = text.subSequence(start, end).toString() ) } spanArray.forEach { println(it) } assertEquals(5, spanArray.size) assertEquals("利用規約", spanArray[0].text) assertEquals("Androidアプリ", spanArray[1].text) assertEquals("", spanArray[2].text) } }