Skip to content

Commit 9a8f8b6

Browse files
committed
Introduce wrapper over dokka tests
1 parent 3938388 commit 9a8f8b6

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package dotty.dokka
2+
3+
import org.jetbrains.dokka.plugability.DokkaContext
4+
import org.jetbrains.dokka.model.{DModule, WithChildren}
5+
import org.jetbrains.dokka.pages.RootPageNode
6+
import org.jetbrains.dokka.testApi.testRunner.{DokkaTestGenerator, TestMethods}
7+
import org.jetbrains.dokka.testApi.logger.TestLogger
8+
import org.jetbrains.dokka.utilities.DokkaConsoleLogger
9+
import org.jetbrains.dokka.DokkaConfiguration
10+
import scala.jdk.CollectionConverters.{ListHasAsScala, SeqHasAsJava}
11+
import org.junit.Test
12+
import org.junit.rules.TemporaryFolder
13+
import java.io.File
14+
15+
abstract class ScaladocTest(val name: String):
16+
def assertions: Seq[Assertion]
17+
18+
private def getTempDir() : TemporaryFolder =
19+
val folder = new TemporaryFolder()
20+
folder.create()
21+
folder
22+
23+
private def args = Args(
24+
name = "test",
25+
tastyRoots = Nil ,
26+
classpath = System.getProperty("java.class.path"),
27+
None,
28+
output = getTempDir().getRoot,
29+
projectVersion = "1.0",
30+
projectTitle = None,
31+
projectLogo = None,
32+
defaultSyntax = None,
33+
sourceLinks = Nil
34+
)
35+
36+
private def tastyFiles =
37+
def collectFiles(dir: File): List[String] = dir.listFiles.toList.flatMap {
38+
case f if f.isDirectory => collectFiles(f)
39+
case f if f.getName endsWith ".tasty" => f.getAbsolutePath :: Nil
40+
case _ => Nil
41+
}
42+
collectFiles(File(s"target/scala-0.27/classes/tests/$name"))
43+
44+
@Test
45+
def executeTest =
46+
DokkaTestGenerator(
47+
DottyDokkaConfig(DocConfiguration.Standalone(args, tastyFiles)),
48+
TestLogger(DokkaConsoleLogger.INSTANCE),
49+
assertions.asTestMethods,
50+
Nil.asJava
51+
).generate()
52+
53+
end ScaladocTest
54+
55+
/**
56+
* Those assertions map 1-1 to their dokka counterparts. Some of them may be irrelevant in scala3doc.
57+
*/
58+
enum Assertion:
59+
case AfterPluginSetup(fn: DokkaContext => Unit)
60+
case DuringValidation(fn: (() => Unit) => Unit)
61+
case AfterDocumentablesCreation(fn: Seq[DModule] => Unit)
62+
case AfterPreMergeDocumentablesTransformation(fn: Seq[DModule] => Unit)
63+
case AfterDocumentablesMerge(fn: DModule => Unit)
64+
case AfterDocumentablesTransformation(fn: DModule => Unit)
65+
case AfterPagesGeneration(fn: RootPageNode => Unit)
66+
case AfterPagesTransformation(fn: RootPageNode => Unit)
67+
case AfterRendering(fn: (RootPageNode, DokkaContext) => Unit)
68+
69+
extension (s: Seq[Assertion]):
70+
def asTestMethods: TestMethods =
71+
import Assertion._
72+
TestMethods(
73+
(context => s.collect { case AfterPluginSetup(fn) => fn(context) }.kUnit),
74+
(validator => s.collect { case DuringValidation(fn) => fn(() => validator) }.kUnit),
75+
(modules => s.collect { case AfterDocumentablesCreation(fn) => fn(modules.asScala.toSeq) }.kUnit),
76+
(modules => s.collect { case AfterPreMergeDocumentablesTransformation(fn) => fn(modules.asScala.toSeq) }.kUnit),
77+
(module => s.collect { case AfterDocumentablesMerge(fn) => fn(module)}.kUnit),
78+
(module => s.collect { case AfterDocumentablesTransformation(fn) => fn(module) }.kUnit),
79+
(root => s.collect { case AfterPagesGeneration(fn) => fn(root) }.kUnit),
80+
(root => s.collect { case AfterPagesTransformation(fn) => fn(root) }.kUnit),
81+
((root, context) => s.collect { case AfterRendering(fn) => fn(root, context)}.kUnit)
82+
)
83+
84+
extension [T] (s: T):
85+
private def kUnit = kotlin.Unit.INSTANCE

0 commit comments

Comments
 (0)