From e15000a6c27bfaba181d6bbf2eeb35ca14fd5c83 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Wed, 4 May 2022 12:22:54 +0300 Subject: [PATCH] [Native][tests] Add "force standalone tests" mode --- native/native.tests/build.gradle.kts | 2 ++ .../blackboxtest/support/ConfigurationProperties.kt | 1 + .../konan/blackboxtest/support/NativeTestSupport.kt | 10 ++++++++++ .../support/group/ExtTestCaseGroupProvider.kt | 5 +++-- .../support/group/StandardTestCaseGroupProvider.kt | 13 ++++++++----- .../support/settings/TestProcessSettings.kt | 9 +++++++++ 6 files changed, 33 insertions(+), 7 deletions(-) diff --git a/native/native.tests/build.gradle.kts b/native/native.tests/build.gradle.kts index a8b3bfde1f2..fc178f5733e 100644 --- a/native/native.tests/build.gradle.kts +++ b/native/native.tests/build.gradle.kts @@ -49,6 +49,7 @@ enum class TestProperty(shortName: String) { COMPILER_CLASSPATH("compilerClasspath"), TEST_TARGET("target"), TEST_MODE("mode"), + FORCE_STANDALONE("forceStandalone"), OPTIMIZATION_MODE("optimizationMode"), MEMORY_MODEL("memoryModel"), USE_THREAD_STATE_CHECKER("useThreadStateChecker"), @@ -115,6 +116,7 @@ fun nativeTest(taskName: String, vararg tags: String) = projectTest(taskName, jU // Pass Gradle properties as JVM properties so test process can read them. TestProperty.TEST_TARGET.setUpFromGradleProperty(this) TestProperty.TEST_MODE.setUpFromGradleProperty(this) + TestProperty.FORCE_STANDALONE.setUpFromGradleProperty(this) TestProperty.OPTIMIZATION_MODE.setUpFromGradleProperty(this) TestProperty.MEMORY_MODEL.setUpFromGradleProperty(this) TestProperty.USE_THREAD_STATE_CHECKER.setUpFromGradleProperty(this) diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/ConfigurationProperties.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/ConfigurationProperties.kt index bbe8e7df4ec..f7e565a8c96 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/ConfigurationProperties.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/ConfigurationProperties.kt @@ -43,6 +43,7 @@ internal class EnforcedProperties(testClass: Class<*>) { internal enum class ClassLevelProperty(shortName: String) { TEST_TARGET("target"), TEST_MODE("mode"), + FORCE_STANDALONE("forceStandalone"), OPTIMIZATION_MODE("optimizationMode"), MEMORY_MODEL("memoryModel"), USE_THREAD_STATE_CHECKER("useThreadStateChecker"), diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/NativeTestSupport.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/NativeTestSupport.kt index f2e8feb3b4a..738f690ba0e 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/NativeTestSupport.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/NativeTestSupport.kt @@ -158,6 +158,7 @@ private object NativeTestSupport { output += nativeTargets output += CacheMode::class to cacheMode output += computeTestMode(enforcedProperties) + output += computeForcedStandaloneTestKind(enforcedProperties) output += computeTimeouts(enforcedProperties) return nativeTargets @@ -220,6 +221,15 @@ private object NativeTestSupport { private fun computeTestMode(enforcedProperties: EnforcedProperties): TestMode = ClassLevelProperty.TEST_MODE.readValue(enforcedProperties, TestMode.values(), default = TestMode.TWO_STAGE_MULTI_MODULE) + private fun computeForcedStandaloneTestKind(enforcedProperties: EnforcedProperties): ForcedStandaloneTestKind = + ForcedStandaloneTestKind( + ClassLevelProperty.FORCE_STANDALONE.readValue( + enforcedProperties, + String::toBooleanStrictOrNull, + default = false + ) + ) + private fun computeTimeouts(enforcedProperties: EnforcedProperties): Timeouts { val executionTimeout = ClassLevelProperty.EXECUTION_TIMEOUT.readValue( enforcedProperties, diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/group/ExtTestCaseGroupProvider.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/group/ExtTestCaseGroupProvider.kt index 8e85c4d7666..5e7d740d8b1 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/group/ExtTestCaseGroupProvider.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/group/ExtTestCaseGroupProvider.kt @@ -73,7 +73,7 @@ internal class ExtTestCaseGroupProvider : TestCaseGroupProvider, TestDisposable( if (extTestDataFile.isRelevant) testCases += extTestDataFile.createTestCase( - definitelyStandaloneTest = testDataFile in standalones, + definitelyStandaloneTest = settings.get().value || testDataFile in standalones, sharedModules = sharedModules ) else @@ -168,7 +168,8 @@ private class ExtTestDataFile( return doCreateTestCase(isStandaloneTest, sharedModules) } - /** Determine if the current test should be compiled as a standalone test, i.e. + /** + * Determine if the current test should be compiled as a standalone test, i.e. * - package names are not patched * - test is compiled independently of any other tests */ diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/group/StandardTestCaseGroupProvider.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/group/StandardTestCaseGroupProvider.kt index 9ac0b777e3b..ba08f98b0c2 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/group/StandardTestCaseGroupProvider.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/group/StandardTestCaseGroupProvider.kt @@ -10,10 +10,7 @@ import org.jetbrains.kotlin.konan.blackboxtest.support.TestCase.NoTestRunnerExtr import org.jetbrains.kotlin.konan.blackboxtest.support.TestCase.WithTestRunnerExtras import org.jetbrains.kotlin.konan.blackboxtest.support.runner.TestRunCheck.* import org.jetbrains.kotlin.konan.blackboxtest.support.runner.TestRunChecks -import org.jetbrains.kotlin.konan.blackboxtest.support.settings.GeneratedSources -import org.jetbrains.kotlin.konan.blackboxtest.support.settings.Settings -import org.jetbrains.kotlin.konan.blackboxtest.support.settings.TestRoots -import org.jetbrains.kotlin.konan.blackboxtest.support.settings.Timeouts +import org.jetbrains.kotlin.konan.blackboxtest.support.settings.* import org.jetbrains.kotlin.konan.blackboxtest.support.util.* import org.jetbrains.kotlin.test.directives.model.Directive import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives @@ -182,9 +179,15 @@ internal class StandardTestCaseGroupProvider : TestCaseGroupProvider { val registeredDirectives = directivesParser.build() val freeCompilerArgs = parseFreeCompilerArgs(registeredDirectives, location) - val testKind = parseTestKind(registeredDirectives, location) val expectedTimeoutFailure = parseExpectedTimeoutFailure(registeredDirectives) + val testKind = parseTestKind(registeredDirectives, location).let { testKind -> + if (testKind == TestKind.REGULAR && settings.get().value) + TestKind.STANDALONE + else + testKind + } + if (testKind == TestKind.REGULAR) { // Fix package declarations to avoid unintended conflicts between symbols with the same name in different test cases. fixPackageNames(testModules.values, nominalPackageName, testDataFile) diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/settings/TestProcessSettings.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/settings/TestProcessSettings.kt index 08e2aa20375..ab647d9d192 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/settings/TestProcessSettings.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/support/settings/TestProcessSettings.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.konan.blackboxtest.support.settings +import org.jetbrains.kotlin.konan.blackboxtest.support.TestKind import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertTrue import java.io.File @@ -54,6 +55,14 @@ internal enum class TestMode(private val description: String) { override fun toString() = description } +/** + * Whether to force [TestKind.STANDALONE] for all tests where [TestKind] is assumed to be [TestKind.REGULAR] otherwise: + * - either explicitly specified in the test data file: // KIND: REGULAR + * - or // KIND: is not specified in the test data file and thus automatically considered as [TestKind.REGULAR] + */ +@JvmInline +internal value class ForcedStandaloneTestKind(val value: Boolean) + /** * Optimization mode to be applied. */