aboutsummaryrefslogtreecommitdiff
path: root/core/test-api/src/main/kotlin/testApi
diff options
context:
space:
mode:
Diffstat (limited to 'core/test-api/src/main/kotlin/testApi')
-rw-r--r--core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt130
1 files changed, 71 insertions, 59 deletions
diff --git a/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt b/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt
index cfb809ea..80c486b7 100644
--- a/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt
+++ b/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt
@@ -9,7 +9,6 @@ import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.dokka.plugability.DokkaPlugin
import org.jetbrains.dokka.testApi.logger.TestLogger
import org.jetbrains.dokka.utilities.DokkaLogger
-import org.junit.rules.TemporaryFolder
import testApi.testRunner.TestDokkaConfigurationBuilder
import java.io.File
import java.net.URL
@@ -30,6 +29,9 @@ abstract class AbstractTest<M : TestMethods, T : TestBuilder<M>, D : DokkaTestGe
?: throw InvalidPathException(name, "Cannot be found")
/**
+ * @param cleanupOutput if set to true, any temporary files will be cleaned up after execution. If set to false,
+ * it will be left to the user or the OS to delete it. Has no effect if [useOutputLocationFromConfig]
+ * is also set to true.
* @param useOutputLocationFromConfig if set to true, output location specified in [DokkaConfigurationImpl.outputDir]
* will be used. If set to false, a temporary folder will be used instead.
*/
@@ -40,24 +42,26 @@ abstract class AbstractTest<M : TestMethods, T : TestBuilder<M>, D : DokkaTestGe
pluginOverrides: List<DokkaPlugin> = emptyList(),
block: T.() -> Unit,
) {
- val testMethods = testBuilder().apply(block).build()
- val configurationToUse =
- if (useOutputLocationFromConfig) {
- configuration
- } else {
- val tempDir = getTempDir(cleanupOutput)
+ if (useOutputLocationFromConfig) {
+ runTests(
+ configuration = configuration,
+ pluginOverrides = pluginOverrides,
+ testLogger = logger,
+ block = block
+ )
+ } else {
+ withTempDirectory(cleanUpAfterUse = cleanupOutput) { tempDir ->
if (!cleanupOutput) {
- logger.info("Output generated under: ${tempDir.root.absolutePath}")
+ logger.info("Output will be generated under: ${tempDir.absolutePath}")
}
- configuration.copy(outputDir = tempDir.root)
+ runTests(
+ configuration = configuration.copy(outputDir = tempDir),
+ pluginOverrides = pluginOverrides,
+ testLogger = logger,
+ block = block
+ )
}
-
- dokkaTestGenerator(
- configurationToUse,
- logger,
- testMethods,
- pluginOverrides
- ).generate()
+ }
}
protected fun testInline(
@@ -68,42 +72,62 @@ abstract class AbstractTest<M : TestMethods, T : TestBuilder<M>, D : DokkaTestGe
loggerForTest: DokkaLogger = logger,
block: T.() -> Unit,
) {
- val testMethods = testBuilder().apply(block).build()
- val testDirPath = getTempDir(cleanupOutput).root.toPath().toAbsolutePath()
- val fileMap = query.toFileMap()
- fileMap.materializeFiles(testDirPath.toAbsolutePath())
- if (!cleanupOutput)
- loggerForTest.info("Output generated under: ${testDirPath.toAbsolutePath()}")
- val newConfiguration = configuration.copy(
- outputDir = testDirPath.toFile(),
- sourceSets = configuration.sourceSets.map { sourceSet ->
- sourceSet.copy(
- sourceRoots = sourceSet.sourceRoots.map { file ->
- testDirPath.toFile().resolve(file)
- }.toSet(),
- suppressedFiles = sourceSet.suppressedFiles.map { file ->
- testDirPath.toFile().resolve(file)
- }.toSet(),
- sourceLinks = sourceSet.sourceLinks.map { link ->
- link.copy(
- localDirectory = testDirPath.toFile().resolve(link.localDirectory).absolutePath
- )
- }.toSet(),
- includes = sourceSet.includes.map { file ->
- testDirPath.toFile().resolve(file)
- }.toSet()
- )
+ withTempDirectory(cleanUpAfterUse = cleanupOutput) { tempDir ->
+ if (!cleanupOutput) {
+ loggerForTest.info("Output will be generated under: ${tempDir.absolutePath}")
}
- )
+
+ val fileMap = query.toFileMap()
+ fileMap.materializeFiles(tempDir.toPath().toAbsolutePath())
+
+ val newConfiguration = configuration.copy(
+ outputDir = tempDir,
+ sourceSets = configuration.sourceSets.map { sourceSet ->
+ sourceSet.copy(
+ sourceRoots = sourceSet.sourceRoots.map { file -> tempDir.resolve(file) }.toSet(),
+ suppressedFiles = sourceSet.suppressedFiles.map { file -> tempDir.resolve(file) }.toSet(),
+ sourceLinks = sourceSet.sourceLinks.map {
+ link -> link.copy(localDirectory = tempDir.resolve(link.localDirectory).absolutePath)
+ }.toSet(),
+ includes = sourceSet.includes.map { file -> tempDir.resolve(file) }.toSet()
+ )
+ }
+ )
+ runTests(
+ configuration = newConfiguration,
+ pluginOverrides = pluginOverrides,
+ testLogger = loggerForTest,
+ block = block
+ )
+ }
+ }
+
+ private fun withTempDirectory(cleanUpAfterUse: Boolean, block: (tempDirectory: File) -> Unit) {
+ val tempDir = this.createTempDir()
+ try {
+ block(tempDir)
+ } finally {
+ if (cleanUpAfterUse) {
+ tempDir.delete()
+ }
+ }
+ }
+
+ private fun runTests(
+ configuration: DokkaConfiguration,
+ pluginOverrides: List<DokkaPlugin>,
+ testLogger: DokkaLogger = logger,
+ block: T.() -> Unit
+ ) {
+ val testMethods = testBuilder().apply(block).build()
dokkaTestGenerator(
- newConfiguration,
- loggerForTest,
+ configuration,
+ testLogger,
testMethods,
pluginOverrides
).generate()
}
-
private fun String.toFileMap(): Map<String, String> {
return this.trimIndent().trimMargin()
.replace("\r\n", "\n")
@@ -141,20 +165,8 @@ abstract class AbstractTest<M : TestMethods, T : TestBuilder<M>, D : DokkaTestGe
Files.write(file, content.toByteArray(charset))
}
- private fun getTempDir(cleanupOutput: Boolean) =
- if (cleanupOutput) {
- TemporaryFolder().apply { create() }
- } else {
- TemporaryFolderWithoutCleanup().apply { create() }
- }
-
- /**
- * Creates a temporary folder, but doesn't delete files
- * right after it's been used, delegating it to the OS
- */
- private class TemporaryFolderWithoutCleanup : TemporaryFolder() {
- override fun after() { }
- }
+ @Suppress("DEPRECATION") // TODO migrate to kotlin.io.path.createTempDirectory with languageVersion >= 1.5
+ private fun createTempDir(): File = kotlin.io.createTempDir()
protected fun dokkaConfiguration(block: TestDokkaConfigurationBuilder.() -> Unit): DokkaConfigurationImpl =
testApi.testRunner.dokkaConfiguration(block)