Skip to content

Commit 45023d8

Browse files
authored
Merge pull request #10337 from Kordyjan/scala3doc/dri-tests
Add tests for DRIs in scala3doc
2 parents 0ad43b7 + 219d11c commit 45023d8

File tree

7 files changed

+144
-0
lines changed

7 files changed

+144
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package tests.extensionDRIs
2+
3+
class A
4+
5+
class B
6+
7+
extension (a: A) def fun = 8
8+
extension (b: B) def fun = 9
9+
extension (as: Seq[A]) def fun = 10
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package tests.functionDRI
2+
3+
import scala.annotation.targetName
4+
5+
6+
class A
7+
class B
8+
9+
def a(as: Seq[A]) = 1
10+
def a(a: A) = 2
11+
def b(b: B) = 3
12+
13+
// scala3doc right now is ignroing @targetName
14+
// def b(a: A, b: B) = 4
15+
// @targetName("b2") def b(a: A)(b: B) = 5
16+
17+
// @targetName("c_a") def c(p: Seq[A]) = 6
18+
// @targetName("c_b") def c(p: Seq[B]) = 7
19+
20+
// scala3 doc right now is not differentiating between fields and nested classlikes
21+
// class C(val b: Int):
22+
// trait b
23+
24+
class D:
25+
trait b:
26+
def b = 8
27+
def b = 9
28+
29+
class E:
30+
class F:
31+
def b = 10
32+
object F:
33+
def b = 11
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package tests.genericDRI
2+
3+
class A
4+
class B
5+
6+
def a[T <: A](t: T) = 1
7+
def a[T <: B](t: T) = 2
8+
9+
def a[T >: A](t: T) = 3
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package tests.givenDRI
2+
3+
trait A[T]
4+
trait B[T]
5+
trait C
6+
7+
given A[Int]
8+
9+
given A[String]
10+
11+
given A[Seq[String]]
12+
13+
given [T: A] as A[Option[T]]
14+
15+
given [T: B] as A[T]
16+
17+
given [C] as A[C]
18+
19+
given A[C]
20+
21+
given [S <: C] as A[S]
22+
23+
class R:
24+
def a = 1
25+
26+
given R as A[Int]:
27+
def a = 2
28+
29+
class S:
30+
class R:
31+
def a = 3
32+
33+
given R as A[Int]:
34+
def a = 5
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package tests.shadowingDRI
2+
3+
trait A[T]
4+
class B
5+
6+
class S:
7+
class R:
8+
def findThisDeclaration = 1
9+
10+
given R as A[B]
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package dotty.dokka.linking
2+
3+
import scala.jdk.CollectionConverters._
4+
import scala.Function.const
5+
import org.jetbrains.dokka.links.DRI
6+
import org.jetbrains.dokka.model.DModule
7+
import dotty.dokka.model.api._
8+
import dotty.dokka.{ScaladocTest, Assertion}
9+
10+
abstract class DriTest(testName: String) extends ScaladocTest(testName):
11+
// override for additional assertions
12+
def assertOnDRIs(dris: Seq[DRI]): Unit = ()
13+
14+
override def assertions = Assertion.AfterDocumentablesTransformation { root =>
15+
val dris = root.collectMembers.map(_.dri)
16+
17+
val grouping = dris.groupMapReduce(identity)(const(1))(_+_)
18+
val duplicates = grouping.filter { (_, v )=> v > 1 }
19+
20+
if duplicates.nonEmpty then
21+
val duplicatesMessage = duplicates.map { (k, v) => s"$k - $v times" }.mkString("\n")
22+
val otherMessage = grouping.flatMap { (k, v) => Option.when(v == 1)(k) }.mkString("\n")
23+
val message = s"\nThere were some repeating DRIs:\n$duplicatesMessage\n\nOther DRIs:\n$otherMessage\n\n"
24+
reportError(message)
25+
26+
assertOnDRIs(dris)
27+
} :: Nil
28+
29+
extension (m: DModule) private def collectMembers = m.getPackages.asScala.toList.flatMap(collectFrom)
30+
31+
private def collectFrom(m: Member): Seq[Member] =
32+
m +: m.allMembers.filter(_.origin == Origin.DefinedWithin).flatMap(collectFrom)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package dotty.dokka.linking
2+
3+
import org.jetbrains.dokka.links.DRI
4+
import org.junit.Ignore
5+
6+
class ExtensionTest extends DriTest("extensionDRIs")
7+
8+
class GivenTest extends DriTest("givenDRI")
9+
10+
class GenericTest extends DriTest("genericDRI")
11+
12+
class FunctionTest extends DriTest("functionDRI")
13+
14+
@Ignore class ShadowingTest extends DriTest("shadowingDRI"):
15+
override def assertOnDRIs(dris: Seq[DRI]) =
16+
if (!dris.flatMap(d => Option(d.getExtra)).exists(_.contains("findThisDeclaration"))) then
17+
reportError("\n\nSymbol with name `findThisDeclaration` was expected but not found\n\n")

0 commit comments

Comments
 (0)