[ObjCExport][tests] Ignore AA test failures both locally and on CI

To run AA tests normally, use kif.loca gradle property.


Merge-request: KT-MR-14129
Merged-by: Alexander Shabalin <alexander.shabalin@ashabalin.me>
This commit is contained in:
Alexander Shabalin
2024-02-02 13:43:30 +00:00
committed by Space Team
parent 15d2799ed4
commit 5525a6829a
4 changed files with 9 additions and 21 deletions
+4 -6
View File
@@ -78,12 +78,10 @@ This annotation will
- Ignore test the test failure for the AA based implementation on the CI - Ignore test the test failure for the AA based implementation on the CI
- Mark the displayName of the test with 'TODO' (e.g. `[AA] myTest // TODO`) - Mark the displayName of the test with 'TODO' (e.g. `[AA] myTest // TODO`)
Note: Note:
- The test will still fail locally (developer setup, not marked as CI). - If the annotation is still present, but the test is successful, then an error is emitted that reminds you about removing the annotation
- If the annotation is still present, but the test is successful on CI, then an error is emitted that reminds you about removing the annotation - To make the tests execute normally (for more convenient local development), Gradle property `kif.local` can be used:
The behaviour of the CI can be replicated by passing a Gradle property like
```text ```text
./gradlew :native:objcexport-header-generator:check -Pci ./gradlew :native:objcexport-header-generator:check -Pkif.local
// ^ // ^
``` ```
@@ -6,19 +6,20 @@
package org.jetbrains.kotlin.objcexport.testUtils package org.jetbrains.kotlin.objcexport.testUtils
import org.jetbrains.kotlin.backend.konan.testUtils.TodoAnalysisApi import org.jetbrains.kotlin.backend.konan.testUtils.TodoAnalysisApi
import org.jetbrains.kotlin.backend.konan.testUtils.isCI
import org.junit.AssumptionViolatedException import org.junit.AssumptionViolatedException
import org.junit.jupiter.api.extension.AfterEachCallback import org.junit.jupiter.api.extension.AfterEachCallback
import org.junit.jupiter.api.extension.ExtensionContext import org.junit.jupiter.api.extension.ExtensionContext
import org.junit.jupiter.api.extension.TestExecutionExceptionHandler import org.junit.jupiter.api.extension.TestExecutionExceptionHandler
import kotlin.jvm.optionals.getOrNull import kotlin.jvm.optionals.getOrNull
private val kifLocal = System.getProperty("kif.local")?.toBoolean() ?: throw RuntimeException("Missing 'kif.local' System property")
internal class TodoAnalysisApiTestExecutionExceptionHandler : TestExecutionExceptionHandler, AfterEachCallback { internal class TodoAnalysisApiTestExecutionExceptionHandler : TestExecutionExceptionHandler, AfterEachCallback {
override fun handleTestExecutionException(context: ExtensionContext, throwable: Throwable) { override fun handleTestExecutionException(context: ExtensionContext, throwable: Throwable) {
val element = context.element.getOrNull() ?: return val element = context.element.getOrNull() ?: return
if (element.isAnnotationPresent(TodoAnalysisApi::class.java)) { if (element.isAnnotationPresent(TodoAnalysisApi::class.java)) {
val message = "Test is marked as 'Todo' for Analysis Api" val message = "Test is marked as 'Todo' for Analysis Api"
if (isCI) { if (!kifLocal) {
throwable.printStackTrace(System.err) throwable.printStackTrace(System.err)
throw AssumptionViolatedException(message, throwable) throw AssumptionViolatedException(message, throwable)
} else { } else {
@@ -33,7 +34,7 @@ internal class TodoAnalysisApiTestExecutionExceptionHandler : TestExecutionExcep
override fun afterEach(context: ExtensionContext) { override fun afterEach(context: ExtensionContext) {
val element = context.element.getOrNull() ?: return val element = context.element.getOrNull() ?: return
if (element.isAnnotationPresent(TodoAnalysisApi::class.java) && context.executionException.getOrNull() == null) { if (element.isAnnotationPresent(TodoAnalysisApi::class.java) && context.executionException.getOrNull() == null) {
val report: (String) -> Unit = if (isCI) ::error else System.err::println val report: (String) -> Unit = if (!kifLocal) ::error else System.err::println
report("Test: ${context.displayName} was marked as 'Todo' but executed successfully") report("Test: ${context.displayName} was marked as 'Todo' but executed successfully")
} }
} }
@@ -1,11 +0,0 @@
/*
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.backend.konan.testUtils
/**
* Indicates if the tests are currently executed on CI like teamcity
*/
val isCI = System.getProperty("is.ci")?.toBoolean() ?: throw RuntimeException("Missing 'is.ci' System property")
@@ -21,7 +21,7 @@ fun Project.objCExportHeaderGeneratorTest(
) { ) {
useJUnitPlatform() useJUnitPlatform()
enableJunit5ExtensionsAutodetection() enableJunit5ExtensionsAutodetection()
systemProperty("is.ci", kotlinBuildProperties.isTeamcityBuild || project.providers.gradleProperty("ci").isPresent) systemProperty("kif.local", project.providers.gradleProperty("kif.local").isPresent)
if (testDisplayNameTag != null) { if (testDisplayNameTag != null) {
systemProperty("testDisplayName.tag", testDisplayNameTag) systemProperty("testDisplayName.tag", testDisplayNameTag)
} }