Add limited test for HtmlDocument.
If we add html strings, there is an error when rendering the preview: java.lang.NoSuchMethodError: 'java.lang.String org.jsoup.nodes.Element.normalName()'
This commit is contained in:
parent
13e016c690
commit
6c9474b53f
2 changed files with 65 additions and 1 deletions
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 New Vector Ltd
|
||||||
|
*
|
||||||
|
* 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 io.element.android.features.messages.timeline.components.html
|
||||||
|
|
||||||
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
|
import org.jsoup.Jsoup
|
||||||
|
import org.jsoup.nodes.Document
|
||||||
|
|
||||||
|
open class DocumentProvider : PreviewParameterProvider<Document> {
|
||||||
|
override val values: Sequence<Document>
|
||||||
|
get() = sequenceOf(
|
||||||
|
"hello",
|
||||||
|
// TODO Find a way to make is work with real HTML data. For now there is an error with
|
||||||
|
// jsoup: java.lang.NoSuchMethodError: 'java.lang.String org.jsoup.nodes.Element.normalName()'
|
||||||
|
/*
|
||||||
|
"<html>\n" +
|
||||||
|
" <head></head>\n" +
|
||||||
|
" <body>\n" +
|
||||||
|
" <p><strong>Bold</strong></p>\n" +
|
||||||
|
" </body>\n" +
|
||||||
|
"</html>",
|
||||||
|
"<html><head></head><body><b>Bold</b></body></html>",
|
||||||
|
"<h1>Heading 1</h1>",
|
||||||
|
"<h2>Heading 2</h2>",
|
||||||
|
*/
|
||||||
|
).map { Jsoup.parse(it) }
|
||||||
|
}
|
||||||
|
|
@ -42,11 +42,15 @@ import androidx.compose.ui.text.font.FontStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextDecoration
|
import androidx.compose.ui.text.style.TextDecoration
|
||||||
import androidx.compose.ui.text.withStyle
|
import androidx.compose.ui.text.withStyle
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import com.google.accompanist.flowlayout.FlowRow
|
import com.google.accompanist.flowlayout.FlowRow
|
||||||
import io.element.android.libraries.designsystem.LinkColor
|
import io.element.android.libraries.designsystem.LinkColor
|
||||||
import io.element.android.libraries.designsystem.components.ClickableLinkText
|
import io.element.android.libraries.designsystem.components.ClickableLinkText
|
||||||
|
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
|
||||||
|
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
|
||||||
import io.element.android.libraries.designsystem.theme.components.Surface
|
import io.element.android.libraries.designsystem.theme.components.Surface
|
||||||
import io.element.android.libraries.designsystem.theme.components.Text
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
import io.element.android.libraries.matrix.permalink.PermalinkData
|
import io.element.android.libraries.matrix.permalink.PermalinkData
|
||||||
|
|
@ -99,7 +103,10 @@ private fun HtmlBody(
|
||||||
when (val node = nodes.next()) {
|
when (val node = nodes.next()) {
|
||||||
is TextNode -> {
|
is TextNode -> {
|
||||||
if (!node.isBlank) {
|
if (!node.isBlank) {
|
||||||
Text(text = node.text())
|
Text(
|
||||||
|
text = node.text(),
|
||||||
|
color = MaterialTheme.colorScheme.primary,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is Element -> {
|
is Element -> {
|
||||||
|
|
@ -241,6 +248,7 @@ private fun HtmlPreformatted(
|
||||||
Text(
|
Text(
|
||||||
text = pre.wholeText(),
|
text = pre.wholeText(),
|
||||||
style = TextStyle(fontFamily = FontFamily.Monospace),
|
style = TextStyle(fontFamily = FontFamily.Monospace),
|
||||||
|
color = MaterialTheme.colorScheme.primary,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -567,3 +575,18 @@ private fun HtmlText(
|
||||||
onLongClick = onLongClick
|
onLongClick = onLongClick
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
internal fun HtmlDocumentLightPreview(@PreviewParameter(DocumentProvider::class) document: Document) =
|
||||||
|
ElementPreviewLight { ContentToPreview(document) }
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
internal fun HtmlDocumentDarkPreview(@PreviewParameter(DocumentProvider::class) document: Document) =
|
||||||
|
ElementPreviewDark { ContentToPreview(document) }
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun ContentToPreview(document: Document) {
|
||||||
|
HtmlDocument(document, MutableInteractionSource())
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue