@@ -2,15 +2,13 @@ package com.fsck.k9.message.html
22
33import assertk.Assert
44import assertk.assertThat
5- import assertk.assertions.contains
65import assertk.assertions.hasSize
76import assertk.assertions.isEqualTo
87import org.jsoup.Jsoup
98import org.junit.Test
109
1110class DisplayHtmlTest {
12- val htmlSettings = HtmlSettings (useDarkMode = false , useFixedWidthFont = false )
13- val displayHtml = DisplayHtml (htmlSettings)
11+ val displayHtml = DisplayHtml (HtmlSettings (useDarkMode = false , useFixedWidthFont = false ))
1412
1513 @Test
1614 fun wrapMessageContent_addsViewportMetaElement () {
@@ -27,45 +25,19 @@ class DisplayHtmlTest {
2725 }
2826
2927 @Test
30- fun wrapMessageContent_addsPreCSSStyles () {
28+ fun wrapMessageContent_addsPreCSS () {
3129 val html = displayHtml.wrapMessageContent(" Some text" )
3230
33- assertThat(html).containsHtmlElement(" head > style" , 3 )
34- }
35-
36- @Test
37- fun wrapMessageContent_addsGlobalStyleRules () {
38- val html = displayHtml.wrapMessageContent(" test" )
39-
40- assertThat(html).containsStyleRulesFor(
41- selector = " *" ,
42- " word-break: break-word;" ,
43- " overflow-wrap: break-word;" ,
44- )
31+ assertThat(html).containsHtmlElement(" head > style" )
4532 }
4633
4734 @Test
48- fun wrapMessageContent_addsPreCSS () {
49- val html = displayHtml.wrapMessageContent(" test" )
50- val expectedFont = if (htmlSettings.useFixedWidthFont) " monospace" else " sans-serif"
51-
52- assertThat(html).containsStyleRulesFor(
53- selector = " pre.${EmailTextToHtml .K9MAIL_CSS_CLASS } " ,
54- " white-space: pre-wrap;" ,
55- " word-wrap: break-word;" ,
56- " font-family: $expectedFont ;" ,
57- " margin-top: 0px;" ,
58- )
59- }
35+ fun wrapMessageContent_whenDarkMessageViewTheme_addsDarkThemeCSS () {
36+ val darkModeDisplayHtml = DisplayHtml (HtmlSettings (useDarkMode = true , useFixedWidthFont = false ))
6037
61- @Test
62- fun wrapMessageContent_addsSignatureStyleRules () {
63- val html = displayHtml.wrapMessageContent(" test" )
38+ val html = darkModeDisplayHtml.wrapMessageContent(" Some text" )
6439
65- assertThat(html).containsStyleRulesFor(
66- selector = " .k9mail-signature" ,
67- " opacity: 0.5;" ,
68- )
40+ assertThat(html).htmlElements(" head > style" ).hasSize(2 )
6941 }
7042
7143 @Test
@@ -77,26 +49,8 @@ class DisplayHtmlTest {
7749 assertThat(html).bodyText().isEqualTo(content)
7850 }
7951
80- private fun Assert<String>.containsStyleRulesFor (selector : String , vararg expectedRules : String ) = given { html ->
81- val styleContent = Jsoup .parse(html)
82- .select(" style" )
83- .joinToString(" \n " ) { it.data() }
84-
85- val selectorPattern = Regex .escape(selector).replace(" \\ *" , " \\\\ *" )
86- val selectorBlock = Regex (" $selectorPattern \\ s*\\ {([^}]*)\\ }" , RegexOption .MULTILINE )
87- .find(styleContent)
88- ?.groupValues?.get(1 )
89- ?.trim()
90-
91- requireNotNull(selectorBlock) { " No style block found for selector: $selector " }
92-
93- expectedRules.forEach { rule ->
94- assertThat(selectorBlock).contains(rule)
95- }
96- }
97-
98- private fun Assert<String>.containsHtmlElement (cssQuery : String , expectedCount : Int = 1) = given { actual ->
99- assertThat(actual).htmlElements(cssQuery).hasSize(expectedCount)
52+ private fun Assert<String>.containsHtmlElement (cssQuery : String ) = given { actual ->
53+ assertThat(actual).htmlElements(cssQuery).hasSize(1 )
10054 }
10155
10256 private fun Assert<String>.htmlElements (cssQuery : String ) = transform { html ->
0 commit comments