From 7d22825176b0f516db8b9f03f7704d96eaee5dc4 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Thu, 29 Feb 2024 16:02:16 +0100 Subject: [PATCH] [PowerAssert] Reproduce KT-66208 --- .../codegen/cast/InstanceEquals.box.txt | 33 ++++++++++++++++- .../testData/codegen/cast/InstanceEquals.kt | 18 +++++++++ .../codegen/cast/InstanceNotEquals.box.txt | 29 ++++++++++++++- .../codegen/cast/InstanceNotEquals.kt | 18 +++++++++ .../codegen/operator/ContainsOperator.box.txt | 35 +++++++++++++++++- .../codegen/operator/ContainsOperator.kt | 18 +++++++++ .../codegen/operator/ExcleqOperator.box.txt | 31 ++++++++++++++++ .../codegen/operator/ExcleqOperator.kt | 21 +++++++++++ .../codegen/operator/ExcleqeqOperator.box.txt | 37 +++++++++++++++++++ .../codegen/operator/ExcleqeqOperator.kt | 21 +++++++++++ .../operator/NegativeContainsOperator.box.txt | 35 +++++++++++++++++- .../operator/NegativeContainsOperator.kt | 18 +++++++++ ...BoxCodegenTestForPowerAssertGenerated.java | 12 ++++++ ...BoxCodegenTestForPowerAssertGenerated.java | 12 ++++++ 14 files changed, 334 insertions(+), 4 deletions(-) create mode 100644 plugins/power-assert/testData/codegen/operator/ExcleqOperator.box.txt create mode 100644 plugins/power-assert/testData/codegen/operator/ExcleqOperator.kt create mode 100644 plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.box.txt create mode 100644 plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.kt diff --git a/plugins/power-assert/testData/codegen/cast/InstanceEquals.box.txt b/plugins/power-assert/testData/codegen/cast/InstanceEquals.box.txt index 4ae7439616b..54859abc7be 100644 --- a/plugins/power-assert/testData/codegen/cast/InstanceEquals.box.txt +++ b/plugins/power-assert/testData/codegen/cast/InstanceEquals.box.txt @@ -1,4 +1,35 @@ Assertion failed assert(null is String) | - false \ No newline at end of file + false + +Assertion failed +assert(!(" is " is String)) + | | + | true + false + +Assertion failed +assert(!( + | + false + " is " + | + true + + is + + String +)) + +Assertion failed +assert(null/*is*/is/*is*/String) + | + false + +Assertion failed +assert(!((null is String) is Boolean)) + | | + | true + | false + false \ No newline at end of file diff --git a/plugins/power-assert/testData/codegen/cast/InstanceEquals.kt b/plugins/power-assert/testData/codegen/cast/InstanceEquals.kt index 821b4c4ea20..6c7c80bb798 100644 --- a/plugins/power-assert/testData/codegen/cast/InstanceEquals.kt +++ b/plugins/power-assert/testData/codegen/cast/InstanceEquals.kt @@ -1,3 +1,21 @@ fun box() = expectThrowableMessage { assert(null is String) +} + "\n\n" + expectThrowableMessage { + // Test that we don't just search for `is` in the expression. + assert(!(" is " is String)) +} + "\n\n" + expectThrowableMessage { + // Test multiline case + assert(!( + " is " + + is + + String + )) +} + "\n\n" + expectThrowableMessage { + // Test that we don't assume whitespaces around the operator + assert(null/*is*/is/*is*/String) +} + "\n\n" + expectThrowableMessage { + // Test nested `is` + assert(!((null is String) is Boolean)) } diff --git a/plugins/power-assert/testData/codegen/cast/InstanceNotEquals.box.txt b/plugins/power-assert/testData/codegen/cast/InstanceNotEquals.box.txt index 00fff83e7e2..e97491bb743 100644 --- a/plugins/power-assert/testData/codegen/cast/InstanceNotEquals.box.txt +++ b/plugins/power-assert/testData/codegen/cast/InstanceNotEquals.box.txt @@ -1,4 +1,31 @@ Assertion failed assert("Hello, world!" !is String) | - false \ No newline at end of file + false + +Assertion failed +assert(" !is " !is String) + | + false + +Assertion failed +assert( + " !is " + | + false + + !is + + String +) + +Assertion failed +assert("Hello, world!"/*!is*/!is/*!is*/String) + | + false + +Assertion failed +assert(("Hello, world!" !is String) !is Boolean) + | + false + false \ No newline at end of file diff --git a/plugins/power-assert/testData/codegen/cast/InstanceNotEquals.kt b/plugins/power-assert/testData/codegen/cast/InstanceNotEquals.kt index d6940811293..bfaa5591b55 100644 --- a/plugins/power-assert/testData/codegen/cast/InstanceNotEquals.kt +++ b/plugins/power-assert/testData/codegen/cast/InstanceNotEquals.kt @@ -1,3 +1,21 @@ fun box() = expectThrowableMessage { assert("Hello, world!" !is String) +} + "\n\n" + expectThrowableMessage { + // Test that we don't just search for `!is` in the expression. + assert(" !is " !is String) +} + "\n\n" + expectThrowableMessage { + // Test multiline case + assert( + " !is " + + !is + + String + ) +} + "\n\n" + expectThrowableMessage { + // Test that we don't assume whitespaces around the operator + assert("Hello, world!"/*!is*/!is/*!is*/String) +} + "\n\n" + expectThrowableMessage { + // Test nested `!is` + assert(("Hello, world!" !is String) !is Boolean) } diff --git a/plugins/power-assert/testData/codegen/operator/ContainsOperator.box.txt b/plugins/power-assert/testData/codegen/operator/ContainsOperator.box.txt index 90c1390e353..9fdf315ea61 100644 --- a/plugins/power-assert/testData/codegen/operator/ContainsOperator.box.txt +++ b/plugins/power-assert/testData/codegen/operator/ContainsOperator.box.txt @@ -2,4 +2,37 @@ Assertion failed assert("Name" in listOf("Hello", "World")) | | | [Hello, World] - false \ No newline at end of file + false + +Assertion failed +assert(" in " in listOf("Hello", "World")) + | | + | [Hello, World] + false + +Assertion failed +assert( + " in " + | + false + + in + + listOf("Hello", "World") + | + [Hello, World] +) + +Assertion failed +assert("Name"/*in*/in/*in*/listOf("Hello", "World")) + | | + | [Hello, World] + false + +Assertion failed +assert(("Name" in listOf("Hello", "World")) in listOf(true)) + | | | + | | [true] + | [Hello, World] + false + false \ No newline at end of file diff --git a/plugins/power-assert/testData/codegen/operator/ContainsOperator.kt b/plugins/power-assert/testData/codegen/operator/ContainsOperator.kt index 7faab6afa16..5aa9a927ad1 100644 --- a/plugins/power-assert/testData/codegen/operator/ContainsOperator.kt +++ b/plugins/power-assert/testData/codegen/operator/ContainsOperator.kt @@ -1,3 +1,21 @@ fun box() = expectThrowableMessage { assert("Name" in listOf("Hello", "World")) +} + "\n\n" + expectThrowableMessage { + // Test that we don't just search for `in` in the expression. + assert(" in " in listOf("Hello", "World")) +} + "\n\n" + expectThrowableMessage { + // Test multiline case + assert( + " in " + + in + + listOf("Hello", "World") + ) +} + "\n\n" + expectThrowableMessage { + // Test that we don't assume whitespaces around the infix operator + assert("Name"/*in*/in/*in*/listOf("Hello", "World")) +} + "\n\n" + expectThrowableMessage { + // Test nested `in` + assert(("Name" in listOf("Hello", "World")) in listOf(true)) } diff --git a/plugins/power-assert/testData/codegen/operator/ExcleqOperator.box.txt b/plugins/power-assert/testData/codegen/operator/ExcleqOperator.box.txt new file mode 100644 index 00000000000..da3c4816043 --- /dev/null +++ b/plugins/power-assert/testData/codegen/operator/ExcleqOperator.box.txt @@ -0,0 +1,31 @@ +Assertion failed +assert(1 != 1) + | + false + +Assertion failed +assert(" != " != " != ") + | + false + +Assertion failed +assert( + " != " + | + false + + != + + " != " +) + +Assertion failed +assert(1/*!=*/!=/*!=*/1) + | + false + +Assertion failed +assert((1 != 1) != false) + | + false + false \ No newline at end of file diff --git a/plugins/power-assert/testData/codegen/operator/ExcleqOperator.kt b/plugins/power-assert/testData/codegen/operator/ExcleqOperator.kt new file mode 100644 index 00000000000..25bc42ca3df --- /dev/null +++ b/plugins/power-assert/testData/codegen/operator/ExcleqOperator.kt @@ -0,0 +1,21 @@ +fun box() = expectThrowableMessage { + assert(1 != 1) +} + "\n\n" + expectThrowableMessage { + // Test that we don't just search for `!=` in the expression. + assert(" != " != " != ") +} + "\n\n" + expectThrowableMessage { + // Test multiline case + assert( + " != " + + != + + " != " + ) +} + "\n\n" + expectThrowableMessage { + // Test that we don't assume whitespaces around the infix operator + assert(1/*!=*/!=/*!=*/1) +} + "\n\n" + expectThrowableMessage { + // Test nested `!=` + assert((1 != 1) != false) +} diff --git a/plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.box.txt b/plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.box.txt new file mode 100644 index 00000000000..80b810e55b6 --- /dev/null +++ b/plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.box.txt @@ -0,0 +1,37 @@ +Assertion failed +assert(1 !== 1) + | + false + true + +Assertion failed +assert(" !== " !== " !== ") + | + false + true + +Assertion failed +assert( + " !== " + | + false + true + + !== + + " !== " +) + +Assertion failed +assert(1/*!==*/!==/*!==*/1) + | + false + true + +Assertion failed +assert((1 !== 1) !== false) + | + false + true + false + true \ No newline at end of file diff --git a/plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.kt b/plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.kt new file mode 100644 index 00000000000..10c460d7d04 --- /dev/null +++ b/plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.kt @@ -0,0 +1,21 @@ +fun box() = expectThrowableMessage { + assert(1 !== 1) +} + "\n\n" + expectThrowableMessage { + // Test that we don't just search for `!==` in the expression. + assert(" !== " !== " !== ") +} + "\n\n" + expectThrowableMessage { + // Test multiline case + assert( + " !== " + + !== + + " !== " + ) +} + "\n\n" + expectThrowableMessage { + // Test that we don't assume whitespaces around the infix operator + assert(1/*!==*/!==/*!==*/1) +} + "\n\n" + expectThrowableMessage { + // Test nested `!==` + assert((1 !== 1) !== false) +} diff --git a/plugins/power-assert/testData/codegen/operator/NegativeContainsOperator.box.txt b/plugins/power-assert/testData/codegen/operator/NegativeContainsOperator.box.txt index a052ba57b1b..0db6e650729 100644 --- a/plugins/power-assert/testData/codegen/operator/NegativeContainsOperator.box.txt +++ b/plugins/power-assert/testData/codegen/operator/NegativeContainsOperator.box.txt @@ -2,4 +2,37 @@ Assertion failed assert("Hello" !in listOf("Hello", "World")) | | | [Hello, World] - false \ No newline at end of file + false + +Assertion failed +assert(" !in " !in listOf(" !in ")) + | | + | [ !in ] + false + +Assertion failed +assert( + " !in " + | + false + + !in + + listOf(" !in ") + | + [ !in ] +) + +Assertion failed +assert("Hello"/*!in*/!in/*!in*/listOf("Hello", "World")) + | | + | [Hello, World] + false + +Assertion failed +assert(("Hello" !in listOf("Hello", "World")) !in listOf(false)) + | | | + | | [false] + | [Hello, World] + false + false \ No newline at end of file diff --git a/plugins/power-assert/testData/codegen/operator/NegativeContainsOperator.kt b/plugins/power-assert/testData/codegen/operator/NegativeContainsOperator.kt index 992a48ac7f9..068bde92dd4 100644 --- a/plugins/power-assert/testData/codegen/operator/NegativeContainsOperator.kt +++ b/plugins/power-assert/testData/codegen/operator/NegativeContainsOperator.kt @@ -1,3 +1,21 @@ fun box() = expectThrowableMessage { assert("Hello" !in listOf("Hello", "World")) +} + "\n\n" + expectThrowableMessage { + // Test that we don't just search for `!in` in the expression. + assert(" !in " !in listOf(" !in ")) +} + "\n\n" + expectThrowableMessage { + // Test multiline case + assert( + " !in " + + !in + + listOf(" !in ") + ) +} + "\n\n" + expectThrowableMessage { + // Test that we don't assume whitespaces around the infix operator + assert("Hello"/*!in*/!in/*!in*/listOf("Hello", "World")) +} + "\n\n" + expectThrowableMessage { + // Test nested `!in` + assert(("Hello" !in listOf("Hello", "World")) !in listOf(false)) } diff --git a/plugins/power-assert/tests-gen/org/jetbrains/kotlin/powerassert/FirLightTreeBlackBoxCodegenTestForPowerAssertGenerated.java b/plugins/power-assert/tests-gen/org/jetbrains/kotlin/powerassert/FirLightTreeBlackBoxCodegenTestForPowerAssertGenerated.java index c1caa284318..d0b9ec4c2c6 100644 --- a/plugins/power-assert/tests-gen/org/jetbrains/kotlin/powerassert/FirLightTreeBlackBoxCodegenTestForPowerAssertGenerated.java +++ b/plugins/power-assert/tests-gen/org/jetbrains/kotlin/powerassert/FirLightTreeBlackBoxCodegenTestForPowerAssertGenerated.java @@ -586,6 +586,18 @@ public class FirLightTreeBlackBoxCodegenTestForPowerAssertGenerated extends Abst runTest("plugins/power-assert/testData/codegen/operator/ContainsOperator.kt"); } + @Test + @TestMetadata("ExcleqOperator.kt") + public void testExcleqOperator() { + runTest("plugins/power-assert/testData/codegen/operator/ExcleqOperator.kt"); + } + + @Test + @TestMetadata("ExcleqeqOperator.kt") + public void testExcleqeqOperator() { + runTest("plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.kt"); + } + @Test @TestMetadata("NegativeContainsFunction.kt") public void testNegativeContainsFunction() { diff --git a/plugins/power-assert/tests-gen/org/jetbrains/kotlin/powerassert/IrBlackBoxCodegenTestForPowerAssertGenerated.java b/plugins/power-assert/tests-gen/org/jetbrains/kotlin/powerassert/IrBlackBoxCodegenTestForPowerAssertGenerated.java index a50fe5157a6..8ba23409d20 100644 --- a/plugins/power-assert/tests-gen/org/jetbrains/kotlin/powerassert/IrBlackBoxCodegenTestForPowerAssertGenerated.java +++ b/plugins/power-assert/tests-gen/org/jetbrains/kotlin/powerassert/IrBlackBoxCodegenTestForPowerAssertGenerated.java @@ -586,6 +586,18 @@ public class IrBlackBoxCodegenTestForPowerAssertGenerated extends AbstractIrBlac runTest("plugins/power-assert/testData/codegen/operator/ContainsOperator.kt"); } + @Test + @TestMetadata("ExcleqOperator.kt") + public void testExcleqOperator() { + runTest("plugins/power-assert/testData/codegen/operator/ExcleqOperator.kt"); + } + + @Test + @TestMetadata("ExcleqeqOperator.kt") + public void testExcleqeqOperator() { + runTest("plugins/power-assert/testData/codegen/operator/ExcleqeqOperator.kt"); + } + @Test @TestMetadata("NegativeContainsFunction.kt") public void testNegativeContainsFunction() {