diff --git a/.github/workflows/smoke-tests.yml b/.github/workflows/smoke-tests.yml index d1640967..ab63f1f7 100644 --- a/.github/workflows/smoke-tests.yml +++ b/.github/workflows/smoke-tests.yml @@ -154,7 +154,7 @@ jobs: :test -PtestLevel=smoke -PtestType=gradle - -Pmatrix.targets=${{ inputs.target }} - -Pmatrix.configurations=${{ inputs.configuration}} - -Pmatrix.linkModes=${{ inputs.linkage }} + -Pmatrix.targets="${{ inputs.target || 'macos_arm64,ios_arm64,ios_simulator_arm64' }}" + -Pmatrix.configurations="${{ inputs.configuration || 'debug' }}" + -Pmatrix.linkModes="${{ inputs.linkage || 'static,dynamic' }}" build-root-directory: test-runner \ No newline at end of file diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/runner/SkieTestRunnerConfiguration.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/runner/SkieTestRunnerConfiguration.kt index bc448247..07ece203 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/runner/SkieTestRunnerConfiguration.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/runner/SkieTestRunnerConfiguration.kt @@ -1,12 +1,10 @@ package co.touchlab.skie.test.runner -import co.touchlab.skie.test.* import co.touchlab.skie.test.util.* -import kotlin.properties.PropertyDelegateProvider -import kotlin.properties.ReadOnlyProperty -import kotlin.reflect.KProperty +import org.slf4j.LoggerFactory object SkieTestRunnerConfiguration { + private val logger = LoggerFactory.getLogger(SkieTestRunnerConfiguration::class.java) val testLevel = value("testLevel") ?: TestLevel.Thorough val testTypes = set("testTypes") @@ -46,84 +44,50 @@ object SkieTestRunnerConfiguration { this += SkieTestMatrix.Axis("Preset", filteredPresets.filterIsInstance()) }.associateBy { it.type } - -// private operator fun > getValue(skieTestMatrix: SkieTestMatrix, property: KProperty<*>): E { -// // return System.getProperty(property.name, "").toBoolean() -// TODO() -// } - private fun value(property: String, deserialize: (String) -> T?): T? { val properties = System.getProperties() return if (properties.containsKey(property)) { - val rawValue = properties.getProperty(property) + val rawValue = properties.getProperty(property).trim() deserialize(rawValue) + .logErrorOnUnknownValue(property, rawValue) } else { null } } - private inline fun > value(property: String): E? = value(property) { - enumValueOf(it) + private inline fun > value(property: String): E? = value(property) { rawValue -> + enumValues().singleOrNull { enumEntry -> + enumEntry.name.equals(rawValue, ignoreCase = true) + } } private fun list(property: String, deserialize: (String) -> T?): List? { val properties = System.getProperties() return if (properties.containsKey(property)) { val rawValue = properties.getProperty(property) - rawValue.split(',').mapNotNull { - deserialize(it.trim()) - } + rawValue.split(',').mapNotNull { listItem -> + val trimmedListItem = listItem.trim() + deserialize(trimmedListItem) + .logErrorOnUnknownValue(property, trimmedListItem) + }.takeIf { it.isNotEmpty() } } else { null } } - private fun nestedList(property: String, deserialize: (String) -> List): List? { - val properties = System.getProperties() - return if (properties.containsKey(property)) { - val rawValue = properties.getProperty(property) - rawValue.split(',').flatMap { - deserialize(it.trim()) - } - } else { - null + private inline fun > list(property: String): List = list(property) { rawValue -> + enumValues().singleOrNull { enumEntry -> + enumEntry.name.equals(rawValue, ignoreCase = true) } - } - - private inline fun > list(property: String): List = list(property) { - enumValueOf(it) } ?: enumValues().toList() private fun set(property: String, deserialize: (String) -> T?): Set? = list(property, deserialize)?.toSet() - private inline fun > set(property: String): Set = set(property) { - enumValueOf(it) - } ?: enumValues().toSet() - - private inline fun > singleValue(crossinline default: () -> E) = PropertyDelegateProvider { _: SkieTestRunnerConfiguration, property -> - val properties = System.getProperties() - val value = if (properties.containsKey(property.name)) { - val rawValue = properties.getProperty(property.name) - enumValueOf(rawValue) - } else { - default() - } - PropertyStorage(value) - } - - private inline fun > multipleValues(crossinline default: () -> List = { enumValues().toList() }) = PropertyDelegateProvider { _: SkieTestRunnerConfiguration, property -> - val properties = System.getProperties() - val values = if (properties.containsKey(property.name)) { - val rawValue = properties.getProperty(property.name) - rawValue.split(',').map { - enumValueOf(it) - } - - } else { - default() + private inline fun > set(property: String): Set = set(property) { rawValue -> + enumValues().singleOrNull { enumEntry -> + enumEntry.name.equals(rawValue, ignoreCase = true) } - PropertyStorage(values) - } + } ?: enumValues().toSet() private fun List.intersectOrKeepIfEmpty(other: List): List { return if (other.isNotEmpty()) { @@ -134,7 +98,10 @@ object SkieTestRunnerConfiguration { } } - private data class PropertyStorage(val value: T): ReadOnlyProperty { - override operator fun getValue(thisRef: SkieTestRunnerConfiguration, property: KProperty<*>): T = value + private fun T?.logErrorOnUnknownValue(property: String, rawValue: String): T? { + if (this == null) { + logger.error("Couldn't deserialize value $rawValue for property $property") + } + return this } } diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/runner/condition/SmokeTestCondition.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/runner/condition/SmokeTestCondition.kt index 5db0d6ce..2c8104a7 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/runner/condition/SmokeTestCondition.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/runner/condition/SmokeTestCondition.kt @@ -4,20 +4,20 @@ import co.touchlab.skie.test.annotation.filter.Smoke import co.touchlab.skie.test.annotation.filter.SmokeOnly import co.touchlab.skie.test.runner.SkieTestRunnerConfiguration import co.touchlab.skie.test.runner.TestLevel +import co.touchlab.skie.test.util.isTestMethodOrClassAnnotated import org.junit.jupiter.api.extension.ConditionEvaluationResult import org.junit.jupiter.api.extension.ExecutionCondition import org.junit.jupiter.api.extension.ExtensionContext -import org.junit.platform.commons.util.AnnotationUtils class SmokeTestCondition: ExecutionCondition { override fun evaluateExecutionCondition(context: ExtensionContext): ConditionEvaluationResult { return when (SkieTestRunnerConfiguration.testLevel) { - TestLevel.Smoke -> if (AnnotationUtils.isAnnotated(context.element, Smoke::class.java)) { + TestLevel.Smoke -> if (isTestMethodOrClassAnnotated(context)) { ConditionEvaluationResult.enabled("${context.element} is marked as @Smoke test") } else { ConditionEvaluationResult.disabled("${context.element} is not marked as @Smoke test") } - TestLevel.Thorough -> if (AnnotationUtils.isAnnotated(context.element, SmokeOnly::class.java)) { + TestLevel.Thorough -> if (isTestMethodOrClassAnnotated(context)) { ConditionEvaluationResult.disabled("${context.element} is marked as @SmokeOnly test") } else { ConditionEvaluationResult.enabled("${context.element} is not marked as @SmokeOnly test") diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_AllDarwinTargetsAllFrameworkArtifactsTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_AllDarwinTargetsAllFrameworkArtifactsTests.kt index e6501155..3fc0678f 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_AllDarwinTargetsAllFrameworkArtifactsTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_AllDarwinTargetsAllFrameworkArtifactsTests.kt @@ -15,7 +15,6 @@ import co.touchlab.skie.test.util.LinkMode @Smoke @GradleTests class KotlinArtifactDsl_Framework_AllDarwinTargetsAllFrameworkArtifactsTests: BaseGradleTests() { - @MatrixTest fun `all darwin targets and all framework artifacts`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_AllDarwinTargetsSingleFrameworkArtifactTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_AllDarwinTargetsSingleFrameworkArtifactTests.kt index 17143bb8..21739516 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_AllDarwinTargetsSingleFrameworkArtifactTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_AllDarwinTargetsSingleFrameworkArtifactTests.kt @@ -14,7 +14,6 @@ import co.touchlab.skie.test.util.LinkMode @Smoke @GradleTests class KotlinArtifactDsl_Framework_AllDarwinTargetsSingleFrameworkArtifactTests: BaseGradleTests() { - @MatrixTest fun `all darwin targets and single framework artifact`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_SingleTargetTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_SingleTargetTests.kt index b3fcd410..143fbf6f 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_SingleTargetTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_Framework_SingleTargetTests.kt @@ -14,7 +14,6 @@ import co.touchlab.skie.test.util.LinkMode @Smoke @GradleTests class KotlinArtifactDsl_Framework_SingleTargetTests: BaseGradleTests() { - @MatrixTest fun `single target and single framework artifact`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_XCFramework_AllDarwinTargetsTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_XCFramework_AllDarwinTargetsTests.kt index d6add8f1..dd15bc38 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_XCFramework_AllDarwinTargetsTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_XCFramework_AllDarwinTargetsTests.kt @@ -14,7 +14,6 @@ import co.touchlab.skie.test.util.LinkMode @Smoke @GradleTests class KotlinArtifactDsl_XCFramework_AllDarwinTargetsTests: BaseGradleTests() { - @MatrixTest fun `all darwin targets and single xcframework artifact`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_XCFramework_SingleTargetTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_XCFramework_SingleTargetTests.kt index 63b3f947..4476cc6c 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_XCFramework_SingleTargetTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinArtifactDsl_XCFramework_SingleTargetTests.kt @@ -14,7 +14,6 @@ import co.touchlab.skie.test.util.LinkMode @Smoke @GradleTests class KotlinArtifactDsl_XCFramework_SingleTargetTests: BaseGradleTests() { - @MatrixTest fun `single target`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_AllDarwinPresetsTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_AllDarwinPresetsTests.kt index 97c31978..21bbdfd0 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_AllDarwinPresetsTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_AllDarwinPresetsTests.kt @@ -11,9 +11,9 @@ import co.touchlab.skie.test.util.KotlinVersion import co.touchlab.skie.test.util.LinkMode @Suppress("ClassName") +@Smoke @GradleTests class KotlinBinaryDsl_Framework_AllDarwinPresetsTests: BaseGradleTests() { - @Smoke @MatrixTest fun `basic project, all darwin presets`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_SinglePresetTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_SinglePresetTests.kt index 9f0de854..94d929a3 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_SinglePresetTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_SinglePresetTests.kt @@ -11,10 +11,9 @@ import co.touchlab.skie.test.util.KotlinVersion import co.touchlab.skie.test.util.LinkMode @Suppress("ClassName") +@Smoke @GradleTests class KotlinBinaryDsl_Framework_SinglePresetTests: BaseGradleTests() { - - @Smoke @MatrixTest fun `basic project, single preset`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_SingleTargetTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_SingleTargetTests.kt index ab4597a4..c23837cb 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_SingleTargetTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/KotlinBinaryDsl_Framework_SingleTargetTests.kt @@ -11,9 +11,9 @@ import co.touchlab.skie.test.util.KotlinVersion import co.touchlab.skie.test.util.LinkMode @Suppress("ClassName") +@Smoke @GradleTests class KotlinBinaryDsl_Framework_SingleTargetTests: BaseGradleTests() { - @Smoke @MatrixTest fun `basic project, single target`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/NoArtifact_AllDarwinTargetsTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/NoArtifact_AllDarwinTargetsTests.kt index a8c820a7..364f7b32 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/NoArtifact_AllDarwinTargetsTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/NoArtifact_AllDarwinTargetsTests.kt @@ -10,7 +10,6 @@ import co.touchlab.skie.test.util.KotlinVersion @Smoke @GradleTests class NoArtifact_AllDarwinTargetsTests: BaseGradleTests() { - @MatrixTest fun `no artifact`(kotlinVersion: KotlinVersion) { rootBuildFile(kotlinVersion) { diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/NoArtifact_SingleTargetTests.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/NoArtifact_SingleTargetTests.kt index 29bfc38c..0bbb6f84 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/NoArtifact_SingleTargetTests.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/suite/gradle/basic/NoArtifact_SingleTargetTests.kt @@ -11,7 +11,6 @@ import co.touchlab.skie.test.util.KotlinVersion @Smoke @GradleTests class NoArtifact_SingleTargetTests: BaseGradleTests() { - @MatrixTest fun `no artifact`( kotlinVersion: KotlinVersion, diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/util/IsTestMethodOrClassAnnotated.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/util/IsTestMethodOrClassAnnotated.kt new file mode 100644 index 00000000..712f9a42 --- /dev/null +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/util/IsTestMethodOrClassAnnotated.kt @@ -0,0 +1,9 @@ +package co.touchlab.skie.test.util + +import org.junit.jupiter.api.extension.ExtensionContext +import org.junit.platform.commons.util.AnnotationUtils + +inline fun isTestMethodOrClassAnnotated(context: ExtensionContext): Boolean { + return AnnotationUtils.isAnnotated(context.requiredTestMethod, A::class.java) || + AnnotationUtils.isAnnotated(context.requiredTestClass, A::class.java) +} diff --git a/test-runner/src/test/kotlin/co/touchlab/skie/test/util/KotlinTargetOrPreset.kt b/test-runner/src/test/kotlin/co/touchlab/skie/test/util/KotlinTargetOrPreset.kt index 4e1e3fb7..c2ad6729 100644 --- a/test-runner/src/test/kotlin/co/touchlab/skie/test/util/KotlinTargetOrPreset.kt +++ b/test-runner/src/test/kotlin/co/touchlab/skie/test/util/KotlinTargetOrPreset.kt @@ -4,19 +4,16 @@ sealed interface KotlinTargetOrPreset { val id: String } - -fun KotlinTargetOrPreset(id: String): KotlinTargetOrPreset { +fun KotlinTargetOrPreset(id: String): KotlinTargetOrPreset? { fun KotlinTargetOrPreset.findById(id: String): KotlinTargetOrPreset? { return when { - this.id == id -> this + this.id.equals(id, ignoreCase = true) -> this this is KotlinTarget.Preset -> this.children.firstNotNullOfOrNull { it.findById(id) } else -> null } } - return checkNotNull(KotlinTarget.Preset.Root.findById(id)) { - "Could not find target or preset with id '$id'" - } + return KotlinTarget.Preset.Root.findById(id) } val List.targets: List