Skip to content

Commit 69e91d4

Browse files
committed
Add tests covering members grouping in scaladoc
1 parent a24e4b0 commit 69e91d4

File tree

8 files changed

+72
-11
lines changed

8 files changed

+72
-11
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package tests
2+
package abstractmembersignatures
3+
4+
5+
trait TestTrait:
6+
def shouldBeAbstract: Int
7+
def shouldBeConcrete: Int = 1
8+
9+
class TestClass:
10+
def shouldBeConcrete: Int = 1
11+
12+
abstract class AbstractTestClass:
13+
def shouldBeAbstract: Int
14+
def shouldBeConcrete: Int = 1
15+
16+
object TestObject:
17+
abstract class AbstractInnerClass:
18+
def shouldBeAbstract: Int
19+
def shouldBeConcrete: Int = 1
20+
21+
class InnerClass:
22+
def shouldBeConcrete: Int = 1

scaladoc-testcases/src/tests/traitmethodsgrouping.scala

Lines changed: 0 additions & 6 deletions
This file was deleted.

scaladoc/src/dotty/tools/scaladoc/api.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ enum VisibilityScope:
2828

2929
enum Modifier(val name: String, val prefix: Boolean):
3030
case Abstract extends Modifier("abstract", true)
31+
case Deferred extends Modifier("", true)
3132
case Final extends Modifier("final", true)
3233
case Empty extends Modifier("", true)
3334
case Sealed extends Modifier("sealed", true)

scaladoc/src/dotty/tools/scaladoc/renderers/MemberRenderer.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
123123
case _ => Nil
124124
}
125125

126-
def memberSingnature(member: Member) =
126+
def memberSignature(member: Member) =
127127
val depStyle = if member.deprecated.isEmpty then "" else "deprecated"
128128
val nameClasses = cls := s"documentableName $depStyle"
129129

@@ -164,7 +164,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
164164
div(topLevelAttr:_*)(
165165
a(href := (if member.needsOwnPage then link(member.dri).getOrElse("#") else s"#${member.dri.anchor}"), cls := "documentableAnchor"),
166166
div(annotations(member)),
167-
div(cls := "header monospace")(memberSingnature(member)),
167+
div(cls := "header monospace")(memberSignature(member)),
168168
div(cls := "docs")(
169169
span(cls := "modifiers"), // just to have padding on left
170170
div(
@@ -203,7 +203,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
203203
case g: MGroup => g.members.exists(isInherited)
204204

205205
private def isAbstract(m: Member | MGroup): Boolean = m match
206-
case m: Member => m.modifiers.contains(Modifier.Abstract)
206+
case m: Member => m.modifiers.exists(Set(Modifier.Abstract, Modifier.Deferred).contains)
207207
case g: MGroup => g.members.exists(isAbstract)
208208

209209
private type SubGroup = (String, Seq[Member | MGroup])
@@ -375,7 +375,7 @@ class MemberRenderer(signatureRenderer: SignatureRenderer)(using DocContext) ext
375375
),
376376
div(cls := "signature monospace")(
377377
annotations(m),
378-
memberSingnature(m)
378+
memberSignature(m)
379379
)
380380
)
381381

scaladoc/src/dotty/tools/scaladoc/tasty/SymOps.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class SymOps[Q <: Quotes](val q: Q):
6565
Flags.Sealed -> Modifier.Sealed,
6666
Flags.Erased -> Modifier.Erased,
6767
Flags.Abstract -> Modifier.Abstract,
68+
Flags.Deferred -> Modifier.Deferred,
6869
Flags.Implicit -> Modifier.Implicit,
6970
Flags.Inline -> Modifier.Inline,
7071
Flags.Lazy -> Modifier.Lazy,
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package dotty.tools.scaladoc
2+
package signatures
3+
4+
import scala.io.Source
5+
import scala.jdk.CollectionConverters._
6+
import scala.util.matching.Regex
7+
import dotty.tools.scaladoc.test.BuildInfo
8+
import java.nio.file.Path;
9+
import org.jsoup.Jsoup
10+
import util.IO
11+
import org.junit.Assert.assertTrue
12+
13+
class AbstractMembers extends ScaladocTest("abstractmembersignatures"):
14+
15+
def runTest = {
16+
afterRendering {
17+
val actualSignatures = signaturesFromDocumentation()
18+
19+
actualSignatures.foreach { (k, v) => k match
20+
case "Abstract methods" => assertTrue(v.forall(_._2 == "shouldBeAbstract"))
21+
case "Concrete methods" => assertTrue(v.forall(_._2 == "shouldBeConcrete"))
22+
case "Classlikes" => assertTrue(v.forall((m, n) => m.contains("abstract") == n.contains("Abstract")))
23+
case _ =>
24+
}
25+
}
26+
}
27+
28+
private def signaturesFromDocumentation()(using DocContext): Map[String, List[(String, String)]] =
29+
val output = summon[DocContext].args.output.toPath.resolve("api")
30+
val signatures = List.newBuilder[(String, (String, String))]
31+
def processFile(path: Path): Unit =
32+
val document = Jsoup.parse(IO.read(path))
33+
val content = document.select(".documentableList").forEach { elem =>
34+
val group = elem.select(".groupHeader").eachText.asScala.mkString("")
35+
elem.select(".documentableElement").forEach { elem =>
36+
val modifiers = elem.select(".header .other-modifiers").eachText.asScala.mkString("")
37+
val name = elem.select(".header .documentableName").eachText.asScala.mkString("")
38+
signatures += group -> (modifiers, name)
39+
}
40+
}
41+
IO.foreachFileIn(output, processFile)
42+
signatures.result.groupMap(_._1)(_._2)

scaladoc/test/dotty/tools/scaladoc/SignatureTest.scala renamed to scaladoc/test/dotty/tools/scaladoc/signatures/SignatureTest.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
package dotty.tools.scaladoc
2+
package signatures
23

34
import scala.io.Source
45
import scala.jdk.CollectionConverters._

scaladoc/test/dotty/tools/scaladoc/SignatureTestCases.scala renamed to scaladoc/test/dotty/tools/scaladoc/signatures/TranslatableSignaturesTestCases.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dotty.tools.scaladoc
1+
package dotty.tools.scaladoc.signatures
22

33
class GenericSignaftures extends SignatureTest("genericSignatures", Seq("class"))
44

0 commit comments

Comments
 (0)