Introduce special common directives for tests based on foreign annotation tests
This commit is contained in:
+16
@@ -18,9 +18,11 @@ abstract class SourceFilePreprocessor(val testServices: TestServices) {
|
||||
abstract class SourceFileProvider : TestService {
|
||||
abstract val kotlinSourceDirectory: File
|
||||
abstract val javaSourceDirectory: File
|
||||
abstract val javaBinaryDirectory: File
|
||||
|
||||
abstract fun getContentOfSourceFile(testFile: TestFile): String
|
||||
abstract fun getRealFileForSourceFile(testFile: TestFile): File
|
||||
abstract fun getRealFileForBinaryFile(testFile: TestFile): File
|
||||
}
|
||||
|
||||
val TestServices.sourceFileProvider: SourceFileProvider by TestServices.testServiceAccessor()
|
||||
@@ -28,6 +30,7 @@ val TestServices.sourceFileProvider: SourceFileProvider by TestServices.testServ
|
||||
class SourceFileProviderImpl(val testServices: TestServices, val preprocessors: List<SourceFilePreprocessor>) : SourceFileProvider() {
|
||||
override val kotlinSourceDirectory: File = testServices.createTempDirectory("kotlin-files")
|
||||
override val javaSourceDirectory: File = testServices.createTempDirectory("java-files")
|
||||
override val javaBinaryDirectory: File = testServices.createTempDirectory("java-binary-files")
|
||||
|
||||
private val contentOfFiles = mutableMapOf<TestFile, String>()
|
||||
private val realFileMap = mutableMapOf<TestFile, File>()
|
||||
@@ -52,6 +55,19 @@ class SourceFileProviderImpl(val testServices: TestServices, val preprocessors:
|
||||
}
|
||||
}
|
||||
|
||||
override fun getRealFileForBinaryFile(testFile: TestFile): File {
|
||||
return realFileMap.getOrPut(testFile) {
|
||||
val directory = when {
|
||||
testFile.isJavaFile -> javaBinaryDirectory
|
||||
else -> error("Unknown file type: ${testFile.name}")
|
||||
}
|
||||
directory.resolve(testFile.relativePath).also {
|
||||
it.parentFile.mkdirs()
|
||||
it.writeText(getContentOfSourceFile(testFile))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateFinalContent(testFile: TestFile): String {
|
||||
return preprocessors.fold(testFile.originalContent) { content, preprocessor ->
|
||||
preprocessor.process(testFile, content)
|
||||
|
||||
Reference in New Issue
Block a user