Browse Source

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()'
jme/20-permission-management
Benoit Marty 2 years ago committed by Benoit Marty
parent
commit
49db996988
  1. 41
      features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/html/DocumentProvider.kt
  2. 25
      features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/html/HtmlDocument.kt

41
features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/html/DocumentProvider.kt

@ -0,0 +1,41 @@ @@ -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) }
}

25
features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/html/HtmlDocument.kt

@ -42,11 +42,15 @@ import androidx.compose.ui.text.font.FontStyle @@ -42,11 +42,15 @@ import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDecoration
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.sp
import com.google.accompanist.flowlayout.FlowRow
import io.element.android.libraries.designsystem.LinkColor
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.Text
import io.element.android.libraries.matrix.permalink.PermalinkData
@ -99,7 +103,10 @@ private fun HtmlBody( @@ -99,7 +103,10 @@ private fun HtmlBody(
when (val node = nodes.next()) {
is TextNode -> {
if (!node.isBlank) {
Text(text = node.text())
Text(
text = node.text(),
color = MaterialTheme.colorScheme.primary,
)
}
}
is Element -> {
@ -241,6 +248,7 @@ private fun HtmlPreformatted( @@ -241,6 +248,7 @@ private fun HtmlPreformatted(
Text(
text = pre.wholeText(),
style = TextStyle(fontFamily = FontFamily.Monospace),
color = MaterialTheme.colorScheme.primary,
)
}
}
@ -567,3 +575,18 @@ private fun HtmlText( @@ -567,3 +575,18 @@ private fun HtmlText(
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…
Cancel
Save