[IC] Add ability to pass additional compiler args to IC tests
Additional arguments should be declared in `args.txt` file in test directory in common CLI arguments format
This commit is contained in:
committed by
TeamCityServer
parent
57a081c399
commit
3246e6b9ac
@@ -24,6 +24,8 @@ dependencies {
|
|||||||
testCompile(projectTests(":compiler:tests-common"))
|
testCompile(projectTests(":compiler:tests-common"))
|
||||||
testCompile(intellijCoreDep()) { includeJars("intellij-core") }
|
testCompile(intellijCoreDep()) { includeJars("intellij-core") }
|
||||||
testCompile(intellijDep()) { includeJars("log4j", "jdom") }
|
testCompile(intellijDep()) { includeJars("log4j", "jdom") }
|
||||||
|
testRuntime(project(":kotlin-reflect"))
|
||||||
|
testRuntime(project(":core:descriptors.runtime"))
|
||||||
|
|
||||||
if (Platform.P192.orHigher()) {
|
if (Platform.P192.orHigher()) {
|
||||||
testRuntime(intellijDep()) { includeJars("lz4-java", rootProject = rootProject) }
|
testRuntime(intellijDep()) { includeJars("lz4-java", rootProject = rootProject) }
|
||||||
|
|||||||
+19
-3
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.incremental
|
|||||||
import org.jetbrains.kotlin.TestWithWorkingDir
|
import org.jetbrains.kotlin.TestWithWorkingDir
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
|
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||||
import org.jetbrains.kotlin.incremental.testingUtils.*
|
import org.jetbrains.kotlin.incremental.testingUtils.*
|
||||||
import org.jetbrains.kotlin.incremental.utils.TestCompilationResult
|
import org.jetbrains.kotlin.incremental.utils.TestCompilationResult
|
||||||
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
|
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
|
||||||
@@ -28,6 +29,10 @@ import java.io.File
|
|||||||
abstract class AbstractIncrementalCompilerRunnerTestBase<Args : CommonCompilerArguments> : TestWithWorkingDir() {
|
abstract class AbstractIncrementalCompilerRunnerTestBase<Args : CommonCompilerArguments> : TestWithWorkingDir() {
|
||||||
protected abstract fun createCompilerArguments(destinationDir: File, testDir: File): Args
|
protected abstract fun createCompilerArguments(destinationDir: File, testDir: File): Args
|
||||||
|
|
||||||
|
private fun createCompilerArgumentsImpl(destinationDir: File, testDir: File): Args = createCompilerArguments(destinationDir, testDir).apply {
|
||||||
|
parseCommandLineArguments(parseAdditionalArgs(testDir), this)
|
||||||
|
}
|
||||||
|
|
||||||
fun doTest(path: String) {
|
fun doTest(path: String) {
|
||||||
val testDir = File(path)
|
val testDir = File(path)
|
||||||
|
|
||||||
@@ -40,7 +45,7 @@ abstract class AbstractIncrementalCompilerRunnerTestBase<Args : CommonCompilerAr
|
|||||||
|
|
||||||
val mapWorkingToOriginalFile = HashMap(copyTestSources(testDir, srcDir, filePrefix = ""))
|
val mapWorkingToOriginalFile = HashMap(copyTestSources(testDir, srcDir, filePrefix = ""))
|
||||||
val sourceRoots = listOf(srcDir)
|
val sourceRoots = listOf(srcDir)
|
||||||
val args = createCompilerArguments(outDir, testDir)
|
val args = createCompilerArgumentsImpl(outDir, testDir)
|
||||||
val (_, _, errors) = initialMake(cacheDir, sourceRoots, args)
|
val (_, _, errors) = initialMake(cacheDir, sourceRoots, args)
|
||||||
check(errors.isEmpty()) { "Initial build failed: \n${errors.joinToString("\n")}" }
|
check(errors.isEmpty()) { "Initial build failed: \n${errors.joinToString("\n")}" }
|
||||||
|
|
||||||
@@ -111,7 +116,7 @@ abstract class AbstractIncrementalCompilerRunnerTestBase<Args : CommonCompilerAr
|
|||||||
// todo: also compare caches
|
// todo: also compare caches
|
||||||
val rebuildOutDir = File(workingDir, "rebuild-out").apply { mkdirs() }
|
val rebuildOutDir = File(workingDir, "rebuild-out").apply { mkdirs() }
|
||||||
val rebuildCacheDir = File(workingDir, "rebuild-cache").apply { mkdirs() }
|
val rebuildCacheDir = File(workingDir, "rebuild-cache").apply { mkdirs() }
|
||||||
val rebuildResult = make(rebuildCacheDir, sourceRoots, createCompilerArguments(rebuildOutDir, testDir))
|
val rebuildResult = make(rebuildCacheDir, sourceRoots, createCompilerArgumentsImpl(rebuildOutDir, testDir))
|
||||||
|
|
||||||
val rebuildExpectedToSucceed = buildLogSteps.last().compileSucceeded
|
val rebuildExpectedToSucceed = buildLogSteps.last().compileSucceeded
|
||||||
val rebuildSucceeded = rebuildResult.exitCode == ExitCode.OK
|
val rebuildSucceeded = rebuildResult.exitCode == ExitCode.OK
|
||||||
@@ -159,5 +164,16 @@ abstract class AbstractIncrementalCompilerRunnerTestBase<Args : CommonCompilerAr
|
|||||||
protected val kotlinStdlibJvm: File = File(distKotlincLib, "kotlin-stdlib.jar").also {
|
protected val kotlinStdlibJvm: File = File(distKotlincLib, "kotlin-stdlib.jar").also {
|
||||||
KtUsefulTestCase.assertExists(it)
|
KtUsefulTestCase.assertExists(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private const val ARGUMENTS_FILE_NAME = "args.txt"
|
||||||
|
|
||||||
|
private fun parseAdditionalArgs(testDir: File): List<String> {
|
||||||
|
return File(testDir, ARGUMENTS_FILE_NAME)
|
||||||
|
.takeIf { it.exists() }
|
||||||
|
?.readText()
|
||||||
|
?.split(" ", "\n")
|
||||||
|
?.filter { it.isNotBlank() }
|
||||||
|
?: emptyList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-2
@@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.jps.build
|
package org.jetbrains.kotlin.jps.build
|
||||||
|
|
||||||
import com.intellij.openapi.Disposable
|
import com.intellij.openapi.Disposable
|
||||||
import com.intellij.openapi.util.Disposer
|
import com.intellij.openapi.util.Disposer
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
@@ -43,15 +42,22 @@ import org.jetbrains.jps.model.JpsModuleRootModificationUtil
|
|||||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||||
import org.jetbrains.jps.model.library.sdk.JpsSdk
|
import org.jetbrains.jps.model.library.sdk.JpsSdk
|
||||||
import org.jetbrains.jps.util.JpsPathUtil
|
import org.jetbrains.jps.util.JpsPathUtil
|
||||||
|
import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY
|
||||||
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
||||||
|
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||||
import org.jetbrains.kotlin.incremental.LookupSymbol
|
import org.jetbrains.kotlin.incremental.LookupSymbol
|
||||||
import org.jetbrains.kotlin.incremental.testingUtils.*
|
import org.jetbrains.kotlin.incremental.testingUtils.*
|
||||||
import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxt
|
import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxt
|
||||||
import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxtBuilder
|
import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxtBuilder
|
||||||
import org.jetbrains.kotlin.jps.build.fixtures.EnableICFixture
|
import org.jetbrains.kotlin.jps.build.fixtures.EnableICFixture
|
||||||
import org.jetbrains.kotlin.jps.incremental.*
|
import org.jetbrains.kotlin.jps.incremental.CacheAttributesDiff
|
||||||
|
import org.jetbrains.kotlin.jps.incremental.CacheVersionManager
|
||||||
|
import org.jetbrains.kotlin.jps.incremental.CompositeLookupsCacheAttributesManager
|
||||||
|
import org.jetbrains.kotlin.jps.incremental.getKotlinCache
|
||||||
import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension
|
import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension
|
||||||
|
import org.jetbrains.kotlin.jps.model.kotlinCommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.jps.model.kotlinFacet
|
import org.jetbrains.kotlin.jps.model.kotlinFacet
|
||||||
import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget
|
import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget
|
||||||
import org.jetbrains.kotlin.platform.idePlatformKind
|
import org.jetbrains.kotlin.platform.idePlatformKind
|
||||||
@@ -77,11 +83,23 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
private val TEMP_DIRECTORY_TO_USE = File(FileUtilRt.getTempDirectory())
|
private val TEMP_DIRECTORY_TO_USE = File(FileUtilRt.getTempDirectory())
|
||||||
|
|
||||||
private val DEBUG_LOGGING_ENABLED = System.getProperty("debug.logging.enabled") == "true"
|
private val DEBUG_LOGGING_ENABLED = System.getProperty("debug.logging.enabled") == "true"
|
||||||
|
|
||||||
|
private const val ARGUMENTS_FILE_NAME = "args.txt"
|
||||||
|
|
||||||
|
private fun parseAdditionalArgs(testDir: File): List<String> {
|
||||||
|
return File(testDir, ARGUMENTS_FILE_NAME)
|
||||||
|
.takeIf { it.exists() }
|
||||||
|
?.readText()
|
||||||
|
?.split(" ", "\n")
|
||||||
|
?.filter { it.isNotBlank() }
|
||||||
|
?: emptyList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected lateinit var testDataDir: File
|
protected lateinit var testDataDir: File
|
||||||
protected lateinit var workDir: File
|
protected lateinit var workDir: File
|
||||||
protected lateinit var projectDescriptor: ProjectDescriptor
|
protected lateinit var projectDescriptor: ProjectDescriptor
|
||||||
|
protected lateinit var additionalCommandLineArguments: List<String>
|
||||||
// is used to compare lookup dumps in a human readable way (lookup symbols are hashed in an actual lookup storage)
|
// is used to compare lookup dumps in a human readable way (lookup symbols are hashed in an actual lookup storage)
|
||||||
protected lateinit var lookupsDuringTest: MutableSet<LookupSymbol>
|
protected lateinit var lookupsDuringTest: MutableSet<LookupSymbol>
|
||||||
private var isJvmICEnabledBackup: Boolean = false
|
private var isJvmICEnabledBackup: Boolean = false
|
||||||
@@ -175,6 +193,9 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
val buildResult = BuildResult()
|
val buildResult = BuildResult()
|
||||||
builder.addMessageHandler(buildResult)
|
builder.addMessageHandler(buildResult)
|
||||||
val finalScope = scope.build()
|
val finalScope = scope.build()
|
||||||
|
projectDescriptor.project.kotlinCommonCompilerArguments = projectDescriptor.project.kotlinCommonCompilerArguments.apply {
|
||||||
|
updateCommandLineArguments(this)
|
||||||
|
}
|
||||||
|
|
||||||
builder.build(finalScope, false)
|
builder.build(finalScope, false)
|
||||||
|
|
||||||
@@ -231,6 +252,10 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
return build(null, CompileScopeTestBuilder.rebuild().allModules())
|
return build(null, CompileScopeTestBuilder.rebuild().allModules())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateCommandLineArguments(arguments: CommonCompilerArguments) {
|
||||||
|
parseCommandLineArguments(additionalCommandLineArguments, arguments)
|
||||||
|
}
|
||||||
|
|
||||||
private fun rebuildAndCheckOutput(makeOverallResult: MakeResult) {
|
private fun rebuildAndCheckOutput(makeOverallResult: MakeResult) {
|
||||||
val outDir = File(getAbsolutePath("out"))
|
val outDir = File(getAbsolutePath("out"))
|
||||||
val outAfterMake = File(getAbsolutePath("out-after-make"))
|
val outAfterMake = File(getAbsolutePath("out-after-make"))
|
||||||
@@ -299,6 +324,7 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
protected open fun doTest(testDataPath: String) {
|
protected open fun doTest(testDataPath: String) {
|
||||||
testDataDir = File(testDataPath)
|
testDataDir = File(testDataPath)
|
||||||
workDir = FileUtilRt.createTempDirectory(TEMP_DIRECTORY_TO_USE, "aijt-jps-build", null)
|
workDir = FileUtilRt.createTempDirectory(TEMP_DIRECTORY_TO_USE, "aijt-jps-build", null)
|
||||||
|
additionalCommandLineArguments = parseAdditionalArgs(File(testDataPath))
|
||||||
val buildLogFile = buildLogFinder.findBuildLog(testDataDir)
|
val buildLogFile = buildLogFinder.findBuildLog(testDataDir)
|
||||||
Disposer.register(testRootDisposable, Disposable { FileUtilRt.delete(workDir) })
|
Disposer.register(testRootDisposable, Disposable { FileUtilRt.delete(workDir) })
|
||||||
|
|
||||||
|
|||||||
+24
-1
@@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.jps.build
|
package org.jetbrains.kotlin.jps.build
|
||||||
|
|
||||||
import com.intellij.openapi.Disposable
|
import com.intellij.openapi.Disposable
|
||||||
import com.intellij.openapi.util.Disposer
|
import com.intellij.openapi.util.Disposer
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
@@ -43,8 +42,11 @@ import org.jetbrains.jps.model.JpsModuleRootModificationUtil
|
|||||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||||
import org.jetbrains.jps.model.library.sdk.JpsSdk
|
import org.jetbrains.jps.model.library.sdk.JpsSdk
|
||||||
import org.jetbrains.jps.util.JpsPathUtil
|
import org.jetbrains.jps.util.JpsPathUtil
|
||||||
|
import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY
|
||||||
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
||||||
|
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||||
import org.jetbrains.kotlin.incremental.LookupSymbol
|
import org.jetbrains.kotlin.incremental.LookupSymbol
|
||||||
import org.jetbrains.kotlin.incremental.testingUtils.*
|
import org.jetbrains.kotlin.incremental.testingUtils.*
|
||||||
import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxt
|
import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxt
|
||||||
@@ -52,6 +54,7 @@ import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxtBuilder
|
|||||||
import org.jetbrains.kotlin.jps.build.fixtures.EnableICFixture
|
import org.jetbrains.kotlin.jps.build.fixtures.EnableICFixture
|
||||||
import org.jetbrains.kotlin.jps.incremental.*
|
import org.jetbrains.kotlin.jps.incremental.*
|
||||||
import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension
|
import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension
|
||||||
|
import org.jetbrains.kotlin.jps.model.kotlinCommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.jps.model.kotlinFacet
|
import org.jetbrains.kotlin.jps.model.kotlinFacet
|
||||||
import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget
|
import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget
|
||||||
import org.jetbrains.kotlin.platform.idePlatformKind
|
import org.jetbrains.kotlin.platform.idePlatformKind
|
||||||
@@ -77,11 +80,23 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
private val TEMP_DIRECTORY_TO_USE = File(FileUtilRt.getTempDirectory())
|
private val TEMP_DIRECTORY_TO_USE = File(FileUtilRt.getTempDirectory())
|
||||||
|
|
||||||
private val DEBUG_LOGGING_ENABLED = System.getProperty("debug.logging.enabled") == "true"
|
private val DEBUG_LOGGING_ENABLED = System.getProperty("debug.logging.enabled") == "true"
|
||||||
|
|
||||||
|
private const val ARGUMENTS_FILE_NAME = "args.txt"
|
||||||
|
|
||||||
|
private fun parseAdditionalArgs(testDir: File): List<String> {
|
||||||
|
return File(testDir, ARGUMENTS_FILE_NAME)
|
||||||
|
.takeIf { it.exists() }
|
||||||
|
?.readText()
|
||||||
|
?.split(" ", "\n")
|
||||||
|
?.filter { it.isNotBlank() }
|
||||||
|
?: emptyList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected lateinit var testDataDir: File
|
protected lateinit var testDataDir: File
|
||||||
protected lateinit var workDir: File
|
protected lateinit var workDir: File
|
||||||
protected lateinit var projectDescriptor: ProjectDescriptor
|
protected lateinit var projectDescriptor: ProjectDescriptor
|
||||||
|
protected lateinit var additionalCommandLineArguments: List<String>
|
||||||
// is used to compare lookup dumps in a human readable way (lookup symbols are hashed in an actual lookup storage)
|
// is used to compare lookup dumps in a human readable way (lookup symbols are hashed in an actual lookup storage)
|
||||||
protected lateinit var lookupsDuringTest: MutableSet<LookupSymbol>
|
protected lateinit var lookupsDuringTest: MutableSet<LookupSymbol>
|
||||||
private var isJvmICEnabledBackup: Boolean = false
|
private var isJvmICEnabledBackup: Boolean = false
|
||||||
@@ -176,6 +191,9 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
val buildResult = BuildResult()
|
val buildResult = BuildResult()
|
||||||
builder.addMessageHandler(buildResult)
|
builder.addMessageHandler(buildResult)
|
||||||
val finalScope = scope.build()
|
val finalScope = scope.build()
|
||||||
|
projectDescriptor.project.kotlinCommonCompilerArguments = projectDescriptor.project.kotlinCommonCompilerArguments.apply {
|
||||||
|
updateCommandLineArguments(this)
|
||||||
|
}
|
||||||
|
|
||||||
builder.build(finalScope, false)
|
builder.build(finalScope, false)
|
||||||
|
|
||||||
@@ -232,6 +250,10 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
return build(null, CompileScopeTestBuilder.rebuild().allModules())
|
return build(null, CompileScopeTestBuilder.rebuild().allModules())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateCommandLineArguments(arguments: CommonCompilerArguments) {
|
||||||
|
parseCommandLineArguments(additionalCommandLineArguments, arguments)
|
||||||
|
}
|
||||||
|
|
||||||
private fun rebuildAndCheckOutput(makeOverallResult: MakeResult) {
|
private fun rebuildAndCheckOutput(makeOverallResult: MakeResult) {
|
||||||
val outDir = File(getAbsolutePath("out"))
|
val outDir = File(getAbsolutePath("out"))
|
||||||
val outAfterMake = File(getAbsolutePath("out-after-make"))
|
val outAfterMake = File(getAbsolutePath("out-after-make"))
|
||||||
@@ -300,6 +322,7 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
protected open fun doTest(testDataPath: String) {
|
protected open fun doTest(testDataPath: String) {
|
||||||
testDataDir = File(testDataPath)
|
testDataDir = File(testDataPath)
|
||||||
workDir = FileUtilRt.createTempDirectory(TEMP_DIRECTORY_TO_USE, "aijt-jps-build", null)
|
workDir = FileUtilRt.createTempDirectory(TEMP_DIRECTORY_TO_USE, "aijt-jps-build", null)
|
||||||
|
additionalCommandLineArguments = parseAdditionalArgs(File(testDataPath))
|
||||||
val buildLogFile = buildLogFinder.findBuildLog(testDataDir)
|
val buildLogFile = buildLogFinder.findBuildLog(testDataDir)
|
||||||
Disposer.register(testRootDisposable, Disposable { FileUtilRt.delete(workDir) })
|
Disposer.register(testRootDisposable, Disposable { FileUtilRt.delete(workDir) })
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user