Skip to content

Commit b0ad1e1

Browse files
Fix: Add tests for extensions's signatures (#17133)
In this PR, I added new tests examples for extensions's signatures. To do that I did multiple changement : ### SignatureTest - Added Extension for expected and actual signatures - There needs to be a unique name for each signature, but extensions don't have one like defs. So for now I have the signature itself as a title (can change if better idea) - Added "extensions" for member to test ### ExtensionParam - I changed the extensions so that they are all unique and test different cases. ### TranslatableSignaturesTestCases - Added a filterNot for ExtensionMethodSignature class. Too many duplicate extensions, it creates an error and I think it's not mandatory to test the extensions on this file too. Fixes: #17108
2 parents f3f96c4 + e940421 commit b0ad1e1

File tree

3 files changed

+31
-17
lines changed

3 files changed

+31
-17
lines changed

scaladoc-testcases/src/tests/extensionParams.scala

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,19 @@ extension [A](a: A)(using Int)
1010
def f1[B](b: B): (A, B)
1111
= ???
1212

13-
extension [A](a: A)(using Int)
13+
extension [A](a: A)(using String)
1414
def f2(b: A): (A, A)
1515
= ???
1616

17-
extension [A](a: A)(using Int)
17+
extension [A](a: A)(using Number)
1818
def f3(using String)(b: A): (A, A)
1919
= ???
2020

2121
extension (a: Char)(using Int)
2222
def f4(using String)(b: Int): Unit
2323
= ???
2424

25-
extension (a: Char)(using Int)
25+
extension (a: String)(using Int)
2626
def f5[B](using String)(b: B): Unit
2727
= ???
2828

@@ -34,15 +34,15 @@ extension [A <: List[Char]](using String)(using Unit)(a: A)(using Int)(using Num
3434
def f7[B, C](b: B)(c: C): (A, B)
3535
= ???
3636

37-
extension [A <: List[Char]](using String)(using Unit)(a: A)(using Int)(using Number)
37+
extension [A <: List[Char]](using String)(using Number)(a: A)(using Int)(using Unit)
3838
def f8(b: Any)(c: Any): Any
3939
= ???
4040

41-
extension [A <: List[Char]](using String)(using Unit)(a: A)(using Int)(using Number)
41+
extension [A <: List[Char]](using Unit)(using String)(a: A)(using Int)(using Number)
4242
def f9[B, C](using Int)(b: B)(c: C): (A, B)
4343
= ???
4444

45-
extension [A <: List[Char]](using String)(using Unit)(a: A)(using Int)(using Number)
45+
extension [A <: List[Char]](using Number)(using Unit)(a: A)(using Int)(using String)
4646
def f10(using Int)(b: Any)(c: Any): Any
4747
= ???
4848

@@ -53,11 +53,21 @@ extension (using String)(using Unit)(a: Animal)(using Int)(using Number)
5353
def f11(b: Any)(c: Any): Any
5454
= ???
5555

56+
extension (a: Int)
57+
def f13(): Any
58+
= ???
59+
60+
extension (using Unit)(a: Int)
61+
def f14(): Any
62+
= ???
63+
5664
import scala.language.experimental.clauseInterleaving
5765

58-
extension (using String)(using Unit)(a: Animal)(using Int)(using Number)
59-
def f13(b: Any)[T](c: T): T
66+
extension (using String)(using Int)(a: Animal)(using Unit)(using Number)
67+
def f16(b: Any)[T](c: T): T
6068
= ???
61-
def f14[D](b: D)[T](c: T): T
69+
def f17[D](b: D)[T](c: T): T
6270
= ???
6371

72+
73+

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

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ abstract class SignatureTest(
4343

4444
val unexpected = unexpectedFromSources.flatMap(actualSignatures.get).flatten
4545
val expectedButNotFound = expectedFromSources.flatMap {
46-
case (k, v) => findMissingSingatures(v, actualSignatures.getOrElse(k, Nil))
46+
case (k, v) => findMissingSignatures(v, actualSignatures.getOrElse(k, Nil))
4747
}
4848

4949
val missingReport = Option.when(!ignoreMissingSignatures && !expectedButNotFound.isEmpty)
@@ -75,7 +75,7 @@ abstract class SignatureTest(
7575
private val unexpectedRegex = raw"(.+)//unexpected".r
7676
private val identifierRegex = raw"^\s*(`.*`|(?:\w+)(?:_[^\[\(\s]+)|\w+|[^\[\(\s]+)".r
7777

78-
private def findMissingSingatures(expected: Seq[String], actual: Seq[String]): Set[String] =
78+
private def findMissingSignatures(expected: Seq[String], actual: Seq[String]): Set[String] =
7979
expected.toSet &~ actual.toSet
8080

8181
extension (s: String)
@@ -84,10 +84,12 @@ abstract class SignatureTest(
8484

8585
private def findName(signature: String, kinds: Seq[String]): Option[String] =
8686
for
87-
kindMatch <- kinds.flatMap(k => s"\\b$k\\b".r.findFirstMatchIn(signature)).headOption
87+
kindMatch <- kinds.flatMap(k =>s"\\b$k\\b".r.findFirstMatchIn(signature)).headOption
88+
kind <- Option(kindMatch.group(0)) // to filter out nulls
8889
afterKind <- Option(kindMatch.after(0)) // to filter out nulls
89-
nameMatch <- identifierRegex.findFirstMatchIn(afterKind)
90-
yield nameMatch.group(1)
90+
name <- if kind.contains("extension") then Some(signature) // The name of an extension will always be the signature itself
91+
else identifierRegex.findFirstMatchIn(afterKind).map(_.group(1))
92+
yield name
9193

9294
private def signaturesFromSources(source: Source, kinds: Seq[String]): Seq[SignatureRes] =
9395
source.getLines.map(_.trim)
@@ -110,6 +112,9 @@ abstract class SignatureTest(
110112

111113
def processFile(path: Path): Unit = if filterFunc(path) then
112114
val document = Jsoup.parse(IO.read(path))
115+
val documentable = document.select(".groupHeader").forEach { element =>
116+
signatures += element.text
117+
}
113118
val content = document.select(".documentableElement").forEach { elem =>
114119
val annotations = elem.select(".annotations").eachText.asScala.mkString("")
115120
val other = elem.select(".header .other-modifiers").eachText.asScala.mkString("")
@@ -123,12 +128,11 @@ abstract class SignatureTest(
123128
signatures += all
124129
}
125130

126-
127131
IO.foreachFileIn(output, processFile)
128132
signatures.result
129133

130134
object SignatureTest {
131135
val classlikeKinds = Seq("class", "object", "trait", "enum") // TODO add docs for packages
132-
val members = Seq("type", "def", "val", "var", "given")
136+
val members = Seq("type", "def", "val", "var", "given", "extension")
133137
val all = classlikeKinds ++ members
134138
}

scaladoc/test/dotty/tools/scaladoc/signatures/TranslatableSignaturesTestCases.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class PackageObjectSymbolSignatures extends SignatureTest("packageObjectSymbolSi
3939
class MergedPackageSignatures extends SignatureTest("mergedPackage", SignatureTest.all.filterNot(_ == "object"),
4040
sourceFiles = List("mergedPackage1", "mergedPackage2", "mergedPackage3"))
4141

42-
class ExtensionMethodSignature extends SignatureTest("extensionMethodSignatures", SignatureTest.all)
42+
class ExtensionMethodSignature extends SignatureTest("extensionMethodSignatures", SignatureTest.all.filterNot(_ == "extension"))
4343

4444
class ExtensionMethodParamsSignature extends SignatureTest("extensionParams", SignatureTest.all)
4545

0 commit comments

Comments
 (0)