Skip to content

Commit 23a5127

Browse files
committed
Fix Nil handling for HtmlTags and add some tests to cover that
1 parent b91c1a5 commit 23a5127

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

scala3doc/src/dotty/renderers/html.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ object HTML:
1414
def apply(attrs: AttrArg*)(tags: TagArg*): AppliedTag = {
1515
val sb = StringBuilder()
1616
sb.append(s"<$name")
17-
attrs.foreach{
17+
attrs.filter(_ != Nil).foreach{
1818
case s: Seq[AppliedAttr] =>
1919
s.foreach(sb.append(" ").append)
2020
case e: AppliedAttr =>

scala3doc/test/dotty/dokka/renderers/HtmlTagsTest.scala

+86
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,90 @@ class HtmlTagsTest {
108108
val expect = """<html><head><script>some script</script></head><body><h1 style="background-color: blue; color: red;">This is my title</h1><div style="background-color: blue; color: red;"><p class="contentpara first">This is my first paragraph</p><a style="opacity: 0.9;"><p class="contentpara">Goooogle</p></a></div></body></html>"""
109109
assertEquals(expect, actual)
110110
}
111+
112+
@Test
113+
def appliedTagAndSeqAppliedTag = {
114+
val actual = div(h1("AppliedTag"), Seq(h1("SeqAppliedTag"))).toString
115+
val expect = """<div><h1>AppliedTag</h1><h1>SeqAppliedTag</h1></div>"""
116+
assertEquals(expect, actual)
117+
}
118+
119+
@Test
120+
def stringAndSeqString = {
121+
val actual = div("String", Seq("SeqString")).toString
122+
val expect = """<div>StringSeqString</div>"""
123+
assertEquals(expect, actual)
124+
}
125+
126+
@Test
127+
def mixingAllTagArgs = {
128+
val actual = div("String", Seq("SeqString"), h1("AppliedTag"), Seq(h1("SeqAppliedTag")), Seq("SeqString"), h1("AppliedTag")).toString
129+
val expect = """<div>StringSeqString<h1>AppliedTag</h1><h1>SeqAppliedTag</h1>SeqString<h1>AppliedTag</h1></div>"""
130+
assertEquals(expect, actual)
131+
}
132+
133+
@Test
134+
def appliedAttrAndSeqAppliedAttr = {
135+
val actual = div(cls := "someClass", Seq(style := "some: style;")).toString
136+
val expect = """<div class="someClass" style="some: style;"></div>"""
137+
assertEquals(expect, actual)
138+
}
139+
140+
@Test
141+
def seqAppliedAttrAndAppliedAttr = {
142+
val actual = div(Seq(cls := "someClass"), style := "some: style;").toString
143+
val expect = """<div class="someClass" style="some: style;"></div>"""
144+
assertEquals(expect, actual)
145+
}
146+
147+
@Test
148+
def seqAppliedAttrAndSeqAppliedAttr = {
149+
val actual = div(Seq(cls := "someClass"), Seq(style := "some: style;")).toString
150+
val expect = """<div class="someClass" style="some: style;"></div>"""
151+
assertEquals(expect, actual)
152+
}
153+
154+
@Test
155+
def mixingAllTagArgsAndAllAttrArgs = {
156+
val actual = div(Seq(cls := "someClass"), id := "myId", Seq(style := "some: style;"))("String", Seq("SeqString"), h1("AppliedTag"), Seq(h1("SeqAppliedTag")), Seq("SeqString"), h1("AppliedTag")).toString
157+
val expect = """<div class="someClass" id="myId" style="some: style;">StringSeqString<h1>AppliedTag</h1><h1>SeqAppliedTag</h1>SeqString<h1>AppliedTag</h1></div>"""
158+
assertEquals(expect, actual)
159+
}
160+
161+
@Test
162+
def nilTagArg = {
163+
val nil: TagArg = Nil
164+
val actual = div(nil).toString
165+
val expect = """<div></div>"""
166+
assertEquals(expect, actual)
167+
}
168+
169+
@Test
170+
def nilAttrArg = {
171+
val nil: AttrArg = Nil
172+
val actual = div(nil).toString
173+
val expect = """<div></div>"""
174+
assertEquals(expect, actual)
175+
}
176+
177+
@Test
178+
def nilAmongTags = {
179+
val actual = div("name", Nil, div("ala")).toString
180+
val expect = """<div>name<div>ala</div></div>"""
181+
assertEquals(expect, actual)
182+
}
183+
184+
@Test
185+
def nilAmongArgs = {
186+
val actual = div(cls := "someClass", Nil, style := "some: style;").toString
187+
val expect = """<div class="someClass" style="some: style;"></div>"""
188+
assertEquals(expect, actual)
189+
}
190+
191+
@Test
192+
def nilAmongArgsAndTags = {
193+
val actual = div(cls := "someClass", Nil, style := "some: style;")("name", Nil, div("ala")).toString
194+
val expect = """<div class="someClass" style="some: style;">name<div>ala</div></div>"""
195+
assertEquals(expect, actual)
196+
}
111197
}

0 commit comments

Comments
 (0)