From f775ac882584ff94f32f750a1c839e71aacef052 Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Wed, 8 Apr 2020 16:29:33 +0200 Subject: [PATCH] Move legacy assert tests to launcher since they are broken on JDK 11: they change Field.modifiers, which is prohibited since JDK 9, because this private field is not exported. Thus, we need to split the test into two: one with assertions enabled and the other one with them disabled. Also, we need to run them in separate processes, for them not to interfere each other. #KT-27176 Fixed --- .../ir/FirBlackBoxCodegenTestGenerated.java | 5 -- .../testData/codegen/box/assert/legacy.kt | 76 ------------------- .../testData/launcher/legacyAssertDisabled.kt | 37 +++++++++ .../testData/launcher/legacyAssertEnabled.kt | 44 +++++++++++ .../kotlin/cli/LauncherScriptTest.kt | 16 ++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 -- .../LightAnalysisModeTestGenerated.java | 5 -- .../ir/IrBlackBoxCodegenTestGenerated.java | 5 -- 8 files changed, 97 insertions(+), 96 deletions(-) delete mode 100644 compiler/testData/codegen/box/assert/legacy.kt create mode 100644 compiler/testData/launcher/legacyAssertDisabled.kt create mode 100644 compiler/testData/launcher/legacyAssertEnabled.kt diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 87d0ac824e1..a480b7a2710 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -896,11 +896,6 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/assert/alwaysEnable.kt"); } - @TestMetadata("legacy.kt") - public void testLegacy() throws Exception { - runTest("compiler/testData/codegen/box/assert/legacy.kt"); - } - @TestMetadata("compiler/testData/codegen/box/assert/jvm") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/testData/codegen/box/assert/legacy.kt b/compiler/testData/codegen/box/assert/legacy.kt deleted file mode 100644 index 79a99fcfa8d..00000000000 --- a/compiler/testData/codegen/box/assert/legacy.kt +++ /dev/null @@ -1,76 +0,0 @@ -// TARGET_BACKEND: JVM -// KOTLIN_CONFIGURATION_FLAGS: ASSERTIONS_MODE=legacy -// WITH_RUNTIME -// FULL_JDK - -import java.lang.reflect.Field -import java.lang.reflect.Modifier - -fun setDesiredAssertionStatus(v: Boolean) { - @Suppress("INVISIBLE_REFERENCE") - val field = kotlin._Assertions.javaClass.getField("ENABLED") - val modifiers = Field::class.java.getDeclaredField("modifiers"); - modifiers.isAccessible = true - modifiers.setInt(field, field.modifiers and Modifier.FINAL.inv()) - field.set(null, v) -} - -fun checkTrue(): Boolean { - var hit = false - val l = { hit = true; true } - assert(l()) - return hit -} - -fun checkTrueWithMessage(): Boolean { - var hit = false - val l = { hit = true; true } - assert(l()) { "BOOYA!" } - return hit -} - -fun checkFalse(): Boolean { - var hit = false - val l = { hit = true; false } - assert(l()) - return hit -} - -fun checkFalseWithMessage(): Boolean { - var hit = false - val l = { hit = true; false } - assert(l()) { "BOOYA!" } - return hit -} - -fun box(): String { - setDesiredAssertionStatus(false) - if (!checkTrue()) return "FAIL 0" - setDesiredAssertionStatus(true) - if (!checkTrue()) return "FAIL 1" - - setDesiredAssertionStatus(false) - if (!checkTrueWithMessage()) return "FAIL 2" - setDesiredAssertionStatus(true) - if (!checkTrueWithMessage()) return "FAIL 3" - - setDesiredAssertionStatus(false) - if (!checkFalse()) return "FAIL 4" - setDesiredAssertionStatus(true) - try { - checkFalse() - return "FAIL 5" - } catch (ignore: AssertionError) { - } - - setDesiredAssertionStatus(false) - if (!checkFalseWithMessage()) return "FAIL 6" - setDesiredAssertionStatus(true) - try { - checkFalseWithMessage() - return "FAIL 7" - } catch (ignore: AssertionError) { - } - - return "OK" -} \ No newline at end of file diff --git a/compiler/testData/launcher/legacyAssertDisabled.kt b/compiler/testData/launcher/legacyAssertDisabled.kt new file mode 100644 index 00000000000..c9e75450c21 --- /dev/null +++ b/compiler/testData/launcher/legacyAssertDisabled.kt @@ -0,0 +1,37 @@ +fun checkTrue(): Boolean { + var hit = false + val l = { hit = true; true } + assert(l()) + return hit +} + +fun checkTrueWithMessage(): Boolean { + var hit = false + val l = { hit = true; true } + assert(l()) { "BOOYA!" } + return hit +} + +fun checkFalse(): Boolean { + var hit = false + val l = { hit = true; false } + assert(l()) + return hit +} + +fun checkFalseWithMessage(): Boolean { + var hit = false + val l = { hit = true; false } + assert(l()) { "BOOYA!" } + return hit +} + +fun main() { + if (!checkTrue()) error("FAIL 0") + + if (!checkTrueWithMessage()) error("FAIL 2") + + if (!checkFalse()) error("FAIL 4") + + if (!checkFalseWithMessage()) error("FAIL 6") +} \ No newline at end of file diff --git a/compiler/testData/launcher/legacyAssertEnabled.kt b/compiler/testData/launcher/legacyAssertEnabled.kt new file mode 100644 index 00000000000..1386b6657ca --- /dev/null +++ b/compiler/testData/launcher/legacyAssertEnabled.kt @@ -0,0 +1,44 @@ +fun checkTrue(): Boolean { + var hit = false + val l = { hit = true; true } + assert(l()) + return hit +} + +fun checkTrueWithMessage(): Boolean { + var hit = false + val l = { hit = true; true } + assert(l()) { "BOOYA!" } + return hit +} + +fun checkFalse(): Boolean { + var hit = false + val l = { hit = true; false } + assert(l()) + return hit +} + +fun checkFalseWithMessage(): Boolean { + var hit = false + val l = { hit = true; false } + assert(l()) { "BOOYA!" } + return hit +} + +fun main() { + if (!checkTrue()) error("FAIL 1") + if (!checkTrueWithMessage()) error("FAIL 3") + + try { + checkFalse() + error("FAIL 5") + } catch (ignore: AssertionError) { + } + + try { + checkFalseWithMessage() + error("FAIL 7") + } catch (ignore: AssertionError) { + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt b/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt index b76b196f62b..aeef654ecf8 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt @@ -161,4 +161,20 @@ class LauncherScriptTest : TestCaseWithTmpdir() { expectedStdout = "a, b, 4, 2\n" ) } + + fun testLegacyAssert() { + runProcess( + "kotlinc", + "$testDataDirectory/legacyAssertDisabled.kt", "-Xassertions=legacy", "-d", tmpdir.path + ) + + runProcess("kotlin", "LegacyAssertDisabledKt", "-J-da:kotlin._Assertions", workDirectory = tmpdir) + + runProcess( + "kotlinc", + "$testDataDirectory/legacyAssertEnabled.kt", "-Xassertions=legacy", "-d", tmpdir.path + ) + + runProcess("kotlin", "LegacyAssertEnabledKt", "-J-ea:kotlin._Assertions", workDirectory = tmpdir) + } } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 757df5a93ac..0b4c96b2d0d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -896,11 +896,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/assert/alwaysEnable.kt"); } - @TestMetadata("legacy.kt") - public void testLegacy() throws Exception { - runTest("compiler/testData/codegen/box/assert/legacy.kt"); - } - @TestMetadata("compiler/testData/codegen/box/assert/jvm") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 1729847df0e..49886e7ffd9 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -896,11 +896,6 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/assert/alwaysEnable.kt"); } - @TestMetadata("legacy.kt") - public void testLegacy() throws Exception { - runTest("compiler/testData/codegen/box/assert/legacy.kt"); - } - @TestMetadata("compiler/testData/codegen/box/assert/jvm") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 60e3d20d02d..cae7e1c4e07 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -896,11 +896,6 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/assert/alwaysEnable.kt"); } - @TestMetadata("legacy.kt") - public void testLegacy() throws Exception { - runTest("compiler/testData/codegen/box/assert/legacy.kt"); - } - @TestMetadata("compiler/testData/codegen/box/assert/jvm") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)