|
| 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