From 06b5a42d0dc3d1a83ad32e03ed279cc3a6583333 Mon Sep 17 00:00:00 2001 From: "victor.petukhov" Date: Fri, 28 Dec 2018 15:43:37 +0300 Subject: [PATCH] Improve test exceptions fixation: - exceptions is analyzed if it's specified explicitly only, - compute test case number for diagnostic tests in which an exception is thrown. --- .../kotlin/TestExceptionsComparator.kt | 51 ++++++++++++------- .../inheritance/neg/1.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/1.kt | 1 + .../inheritance/neg/10.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/10.kt | 1 + .../inheritance/neg/11.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/11.kt | 1 + .../notLinked/objects/inheritance/neg/12.kt | 1 + .../notLinked/objects/inheritance/neg/13.kt | 1 + .../inheritance/neg/14.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/14.kt | 1 + .../inheritance/neg/15.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/15.kt | 1 + .../notLinked/objects/inheritance/neg/16.kt | 1 + .../notLinked/objects/inheritance/neg/17.kt | 1 + .../inheritance/neg/18.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/18.kt | 1 + .../inheritance/neg/19.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/19.kt | 1 + .../inheritance/neg/2.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/2.kt | 1 + .../inheritance/neg/3.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/3.kt | 1 + .../inheritance/neg/4.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/4.kt | 1 + .../inheritance/neg/5.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/5.kt | 1 + .../inheritance/neg/6.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/6.kt | 1 + .../inheritance/neg/7.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/7.kt | 1 + .../inheritance/neg/8.exceptions.runtime.txt | 2 +- .../notLinked/objects/inheritance/neg/8.kt | 1 + .../notLinked/objects/inheritance/neg/9.kt | 1 + .../contractBuilder/common/neg/5.kt | 1 + .../checkers/AbstractDiagnosticsTestSpec.kt | 11 ++-- .../AbstractBlackBoxCodegenTestSpec.kt | 6 ++- .../kotlin/parsing/AbstractParsingTestSpec.kt | 20 +++++--- .../tests/org/jetbrains/kotlin/spec/Common.kt | 4 +- .../kotlin/spec/models/AbstractSpecTest.kt | 7 ++- .../kotlin/spec/models/LinkedSpecTest.kt | 6 ++- .../kotlin/spec/models/NotLinkedSpecTest.kt | 6 ++- .../kotlin/spec/parsers/CommonParser.kt | 6 ++- .../kotlin/spec/parsers/TestCasesParser.kt | 4 +- .../kotlin/spec/parsers/TestInfoParser.kt | 7 ++- 45 files changed, 117 insertions(+), 59 deletions(-) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/TestExceptionsComparator.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/TestExceptionsComparator.kt index b31a850b2da..eb59198190c 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/TestExceptionsComparator.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/TestExceptionsComparator.kt @@ -13,14 +13,20 @@ import java.io.PrintWriter import java.util.regex.Matcher import java.util.regex.Pattern -enum class TestsExceptionFilePostfix(val text: String) { +enum class TestsExceptionType(val postfix: String) { COMPILER_ERROR("compiler"), COMPILETIME_ERROR("compiletime"), RUNTIME_ERROR("runtime"), - INFRASTRUCTURE_ERROR("infrastructure") + INFRASTRUCTURE_ERROR("infrastructure"); + + companion object { + private val map = values().associateBy(TestsExceptionType::postfix) + + fun fromValue(type: String) = map[type] + } } -sealed class TestsError(val original: Throwable, val postfix: TestsExceptionFilePostfix) : Error() { +sealed class TestsError(val original: Throwable, val type: TestsExceptionType) : Error() { override fun toString(): String = original.toString() override fun getStackTrace(): Array = original.stackTrace override fun initCause(cause: Throwable?): Throwable = original.initCause(cause) @@ -38,10 +44,10 @@ sealed class TestsError(val original: Throwable, val postfix: TestsExceptionFile override fun printStackTrace(s: PrintWriter?) = original.printStackTrace(s) } -class TestsCompilerError(original: Throwable) : TestsError(original, TestsExceptionFilePostfix.COMPILER_ERROR) -class TestsInfrastructureError(original: Throwable) : TestsError(original, TestsExceptionFilePostfix.INFRASTRUCTURE_ERROR) -class TestsCompiletimeError(original: Throwable) : TestsError(original, TestsExceptionFilePostfix.COMPILETIME_ERROR) -class TestsRuntimeError(original: Throwable) : TestsError(original, TestsExceptionFilePostfix.RUNTIME_ERROR) +class TestsCompilerError(original: Throwable) : TestsError(original, TestsExceptionType.COMPILER_ERROR) +class TestsInfrastructureError(original: Throwable) : TestsError(original, TestsExceptionType.INFRASTRUCTURE_ERROR) +class TestsCompiletimeError(original: Throwable) : TestsError(original, TestsExceptionType.COMPILETIME_ERROR) +class TestsRuntimeError(original: Throwable) : TestsError(original, TestsExceptionType.RUNTIME_ERROR) private enum class ExceptionType { ANALYZING_EXPRESSION, @@ -71,8 +77,8 @@ class TestExceptionsComparator(wholeFile: File) { return null } - private fun getExceptionInfo(e: TestsError, cases: Set?): String { - val casesAsString = cases?.run { "CASES: " + joinToString() + ls } ?: "" + private fun getExceptionInfo(e: TestsError, exceptionByCases: Set?): String { + val casesAsString = exceptionByCases?.run { "CASES: " + joinToString() + ls } ?: "" return when (e) { is TestsRuntimeError -> @@ -84,28 +90,35 @@ class TestExceptionsComparator(wholeFile: File) { } private fun validateExistingExceptionFiles(e: TestsError?) { - val postfixesOfFilesToCheck = TestsExceptionFilePostfix.values().toMutableSet().filter { it != e?.postfix } + val postfixesOfFilesToCheck = TestsExceptionType.values().toMutableSet().filter { it != e?.type } postfixesOfFilesToCheck.forEach { - if (File("$filePathPrefix.${it.text}.txt").exists()) - Assert.fail("No $it, but file $filePathPrefix.${it.text}.txt exists.") + if (File("$filePathPrefix.${it.postfix}.txt").exists()) + Assert.fail("No $it, but file $filePathPrefix.${it.postfix}.txt exists.") } } - fun runAndCompareWithExpected(checkUnexpectedBehaviour: ((Matcher?) -> Pair?>)? = null, runnable: () -> Unit) { + fun run( + expectedException: TestsExceptionType?, + exceptionByCases: Map = mapOf(), + computeExceptionPoint: ((Matcher?) -> Set?)? = null, + runnable: () -> Unit + ) { try { runnable() } catch (e: TestsError) { - val exceptionInfo = analyze(e.original) - val unexpectedBehaviourCheckResult = checkUnexpectedBehaviour?.invoke(exceptionInfo) + val analyzeResult = analyze(e.original) + val casesWithExpectedException = + computeExceptionPoint?.invoke(analyzeResult)?.filter { exceptionByCases[it] == e.type }?.toSet() - if (e is TestsCompilerError && unexpectedBehaviourCheckResult?.first == false) - throw e.original + if (casesWithExpectedException == null && e.type != expectedException) { + throw e + } - val exceptionsFile = File("$filePathPrefix.${e.postfix.text}.txt") + val exceptionsFile = File("$filePathPrefix.${e.type.postfix}.txt") try { - KotlinTestUtils.assertEqualsToFile(exceptionsFile, getExceptionInfo(e, unexpectedBehaviourCheckResult?.second)) + KotlinTestUtils.assertEqualsToFile(exceptionsFile, getExceptionInfo(e, casesWithExpectedException)) } catch (t: AssertionError) { e.original.printStackTrace() throw t diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/1.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/1.exceptions.runtime.txt index c2bcdaa09c7..f6df8c8034e 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/1.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/1.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_1Kt.box(1.kt:18) \ No newline at end of file +_1Kt.box(1.kt:19) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/1.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/1.kt index ea58a60d621..a4ea78965c9 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/1.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/1.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Bar(val x: Int) diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/10.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/10.exceptions.runtime.txt index e6e1d64ce73..9df7adfb66a 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/10.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/10.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -Foo$A.(10.kt:12) \ No newline at end of file +Foo$A.(10.kt:13) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/10.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/10.kt index cabbb82fc31..5d6af2e816c 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/10.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/10.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(a: Any) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/11.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/11.exceptions.runtime.txt index 60b7d860a26..0d13ab70912 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/11.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/11.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_11Kt.box(11.kt:20) \ No newline at end of file +_11Kt.box(11.kt:21) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/11.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/11.kt index c46f0b4c3f5..1a978700e2f 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/11.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/11.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ object MyObject : Foo(prop) diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/12.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/12.kt index b2d02cdb151..0bab0fc64c5 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/12.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/12.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ val prop = MyObject diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/13.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/13.kt index 0a746ed4bc1..a7c1e411bc1 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/13.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/13.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(val prop: Int) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/14.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/14.exceptions.runtime.txt index 228eeac5620..229f676b1d4 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/14.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/14.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_14Kt.box(14.kt:16) \ No newline at end of file +_14Kt.box(14.kt:17) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/14.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/14.kt index f8cb3c0ddf8..944af498b98 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/14.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/14.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(val prop: Int) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/15.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/15.exceptions.runtime.txt index ee2b095904d..c488c137a91 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/15.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/15.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_15Kt.box(15.kt:16) \ No newline at end of file +_15Kt.box(15.kt:17) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/15.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/15.kt index 394d7c385ea..8d4c97af213 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/15.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/15.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(val prop: Int) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/16.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/16.kt index 3c6bb90839d..d67383185fd 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/16.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/16.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(val prop: Int) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/17.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/17.kt index f8d4b9d918e..03a4f5e3bdb 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/17.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/17.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(val prop: Int) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/18.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/18.exceptions.runtime.txt index 438298ad7b8..a9308a0e46e 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/18.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/18.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_18Kt.box(18.kt:16) \ No newline at end of file +_18Kt.box(18.kt:17) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/18.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/18.kt index 0ee244b1e4e..b25612b44fa 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/18.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/18.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(val prop: Int) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/19.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/19.exceptions.runtime.txt index 2523f86d725..d7fd5c129a9 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/19.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/19.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_19Kt.box(19.kt:16) \ No newline at end of file +_19Kt.box(19.kt:17) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/19.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/19.kt index 5d20e1849e1..09bdb63376f 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/19.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/19.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(val prop: Int) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/2.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/2.exceptions.runtime.txt index 0472f08bf5a..f8d29923329 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/2.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/2.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_2Kt.box(2.kt:18) \ No newline at end of file +_2Kt.box(2.kt:19) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/2.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/2.kt index 99327d60a3b..46f863955a3 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/2.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/2.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Bar(val x: Int) diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/3.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/3.exceptions.runtime.txt index 83062f3cf55..533b61436cb 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/3.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/3.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_3Kt.box(3.kt:18) \ No newline at end of file +_3Kt.box(3.kt:19) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/3.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/3.kt index a46a242f2e6..55c6ba9430e 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/3.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/3.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Bar(val x: Int) diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/4.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/4.exceptions.runtime.txt index 6c39587322b..2a7eedb150a 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/4.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/4.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_4Kt.box(4.kt:18) \ No newline at end of file +_4Kt.box(4.kt:19) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/4.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/4.kt index 71ef9c31e6f..670a4f1438b 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/4.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/4.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Bar(val x: Int) diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/5.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/5.exceptions.runtime.txt index 4e640e8aaa1..2a1cb607e37 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/5.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/5.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_5Kt.box(5.kt:20) \ No newline at end of file +_5Kt.box(5.kt:21) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/5.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/5.kt index fe0ebf647c2..0e8731cd080 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/5.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/5.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Bar(val x: Int) diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/6.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/6.exceptions.runtime.txt index 098c97a83a4..a70afdb00ec 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/6.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/6.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_6Kt.box(6.kt:20) +_6Kt.box(6.kt:21) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/6.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/6.kt index 4acdb1dcfd4..7d0c96b7a7b 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/6.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/6.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Bar(val x: Any) diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/7.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/7.exceptions.runtime.txt index a5506cfd7ad..7e654ffc9ca 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/7.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/7.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_7Kt.box(7.kt:16) \ No newline at end of file +_7Kt.box(7.kt:17) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/7.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/7.kt index 5cff4c7e5c6..ef0963335a3 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/7.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/7.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(val x: Int) diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/8.exceptions.runtime.txt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/8.exceptions.runtime.txt index a4039e88b0c..0d876f9e33f 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/8.exceptions.runtime.txt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/8.exceptions.runtime.txt @@ -1,2 +1,2 @@ java.lang.ExceptionInInitializerError -_8Kt.box(8.kt:16) \ No newline at end of file +_8Kt.box(8.kt:17) \ No newline at end of file diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/8.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/8.kt index f3a5f844668..a2d2f7830a0 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/8.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/8.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(a: Any) { diff --git a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/9.kt b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/9.kt index 6c97dbb8c0f..e22a00f24f2 100644 --- a/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/9.kt +++ b/compiler/tests-spec/testData/codegen/box/notLinked/objects/inheritance/neg/9.kt @@ -6,6 +6,7 @@ * DESCRIPTION: Access to class members in the super constructor call of an object. * UNEXPECTED BEHAVIOUR * ISSUES: KT-25289 + * EXCEPTION: runtime */ open class Foo(a: Any) { diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/5.kt b/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/5.kt index 931a297910b..4ca26965ff2 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/5.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/5.kt @@ -33,6 +33,7 @@ fun case_3(): Boolean { * TESTCASE NUMBER: 4 * UNEXPECTED BEHAVIOUR * ISSUES: KT-26386 + * EXCEPTION: compiler */ fun case_4(): Boolean? { contract { returns(null) implies case_4() } diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestSpec.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestSpec.kt index 7d7a7f9704f..86b2e53f523 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestSpec.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestSpec.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.checkers import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.TestExceptionsComparator +import org.jetbrains.kotlin.TestsExceptionType import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.psi.KtFile @@ -78,9 +79,8 @@ abstract class AbstractDiagnosticsTestSpec : AbstractDiagnosticsTest() { println(specTest) - val checkUnexpectedBehaviour: (Matcher?) -> Pair?> = l@{ matches -> - if (specTest.unexpectedBehavior) return@l Pair(true, null) - if (matches == null) return@l Pair(false, null) + val computeExceptionPoint: (Matcher?) -> Set? = l@{ matches -> + if (matches == null) return@l null val lineNumber = matches.group("lineNumber").toInt() val symbolNumber = matches.group("symbolNumber").toInt() @@ -90,10 +90,11 @@ abstract class AbstractDiagnosticsTestSpec : AbstractDiagnosticsTest() { val testCases = specTest.cases.byRanges[filename] val testCasesWithSamePosition = testCases!!.floorEntry(exceptionPosition).value - return@l Pair(testCasesWithSamePosition.all { it.value.unexpectedBehavior }, testCasesWithSamePosition.keys.toSet()) + return@l testCasesWithSamePosition.keys.toSet() } - TestExceptionsComparator(testDataFile).runAndCompareWithExpected(checkUnexpectedBehaviour) { + val exceptionsInCases = specTest.cases.byNumbers.entries.associate { it.key to it.value.exception } + TestExceptionsComparator(testDataFile).run(specTest.exception, exceptionsInCases, computeExceptionPoint) { super.analyzeAndCheck(testDataFile, files) } } diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/codegen/AbstractBlackBoxCodegenTestSpec.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/codegen/AbstractBlackBoxCodegenTestSpec.kt index 689b813fa2c..a67608f1350 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/codegen/AbstractBlackBoxCodegenTestSpec.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/codegen/AbstractBlackBoxCodegenTestSpec.kt @@ -61,8 +61,12 @@ abstract class AbstractBlackBoxCodegenTestSpec : AbstractBlackBoxCodegenTest() { includeHelpers(wholeFile, files, specTest) - TestExceptionsComparator(wholeFile).runAndCompareWithExpected { + if (specTest.exception == null) { super.doMultiFileTest(wholeFile, files, javaFilesDir) + } else { + TestExceptionsComparator(wholeFile).run(specTest.exception) { + super.doMultiFileTest(wholeFile, files, javaFilesDir) + } } } } diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/parsing/AbstractParsingTestSpec.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/parsing/AbstractParsingTestSpec.kt index a7f1a8b044d..ae38bfeea04 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/parsing/AbstractParsingTestSpec.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/parsing/AbstractParsingTestSpec.kt @@ -22,16 +22,20 @@ abstract class AbstractParsingTestSpec : AbstractParsingTest() { println(specTest) - TestExceptionsComparator(file).runAndCompareWithExpected({ Pair(specTest.unexpectedBehavior, null) }) { + if (specTest.exception == null) { super.doParsingTest(filePath, CommonParser::testInfoFilter) - - try { - val psiTestValidator = ParsingTestTypeValidator(myFile, File(filePath), specTest) - psiTestValidator.validatePathConsistency(testLinkedType) - psiTestValidator.validateTestType() - } catch (e: SpecTestValidationException) { - Assert.fail(e.description) + } else { + TestExceptionsComparator(file).run(specTest.exception) { + super.doParsingTest(filePath, CommonParser::testInfoFilter) } } + + try { + val psiTestValidator = ParsingTestTypeValidator(myFile, File(filePath), specTest) + psiTestValidator.validatePathConsistency(testLinkedType) + psiTestValidator.validateTestType() + } catch (e: SpecTestValidationException) { + Assert.fail(e.description) + } } } diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/Common.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/Common.kt index 7e74c8a50f9..75de6ef9bd8 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/Common.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/Common.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.spec +import org.jetbrains.kotlin.TestsExceptionType import org.jetbrains.kotlin.spec.models.LinkedSpecTestFileInfoElementType import org.jetbrains.kotlin.spec.models.NotLinkedSpecTestFileInfoElementType import org.jetbrains.kotlin.spec.parsers.BasePatterns @@ -74,7 +75,8 @@ data class SpecTestCase( var ranges: MutableList, var unexpectedBehavior: Boolean, var unspecifiedBehavior: Boolean, - val issues: MutableList? + val issues: MutableList?, + val exception: TestsExceptionType? ) data class SpecTestCasesSet( diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/AbstractSpecTest.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/AbstractSpecTest.kt index 7a6167faf40..79dfe51e223 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/AbstractSpecTest.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/AbstractSpecTest.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.spec.models +import org.jetbrains.kotlin.TestsExceptionType import org.jetbrains.kotlin.spec.* import org.jetbrains.kotlin.spec.parsers.CommonPatterns import org.jetbrains.kotlin.spec.parsers.CommonPatterns.issuesPattern @@ -22,7 +23,8 @@ enum class CommonInfoElementType( UNEXPECTED_BEHAVIOUR, ISSUES(valuePattern = issuesPattern), DISCUSSION, - NOTE + NOTE, + EXCEPTION } enum class CommonSpecTestFileInfoElementType( @@ -52,7 +54,8 @@ abstract class AbstractSpecTest( val cases: SpecTestCasesSet, val unexpectedBehavior: Boolean, val issues: Set, - val helpers: Set? + val helpers: Set?, + val exception: TestsExceptionType? ) { companion object { private fun issuesToString(issues: Set) = issues.joinToString(", ") { CommonPatterns.ISSUE_TRACKER + it } diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/LinkedSpecTest.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/LinkedSpecTest.kt index b9c7d421c4c..6db9c3011e4 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/LinkedSpecTest.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/LinkedSpecTest.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.spec.models +import org.jetbrains.kotlin.TestsExceptionType import org.jetbrains.kotlin.spec.SpecTestCasesSet import org.jetbrains.kotlin.spec.SpecTestInfoElementType import org.jetbrains.kotlin.spec.TestArea @@ -46,8 +47,9 @@ class LinkedSpecTest( unexpectedBehavior: Boolean, private val unspecifiedBehavior: Boolean, issues: Set, - helpers: Set? -) : AbstractSpecTest(testArea, testType, place.sections, testNumber, description, cases, unexpectedBehavior, issues, helpers) { + helpers: Set?, + exception: TestsExceptionType? +) : AbstractSpecTest(testArea, testType, place.sections, testNumber, description, cases, unexpectedBehavior, issues, helpers, exception) { override fun checkPathConsistency(pathMatcher: Matcher) = testArea == TestArea.valueOf(pathMatcher.group("testArea").withUnderscores()) && testType == TestType.fromValue(pathMatcher.group("testType"))!! diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/NotLinkedSpecTest.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/NotLinkedSpecTest.kt index 0edb669aab0..b9679ea3909 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/NotLinkedSpecTest.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/NotLinkedSpecTest.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.spec.models +import org.jetbrains.kotlin.TestsExceptionType import org.jetbrains.kotlin.spec.SpecTestCasesSet import org.jetbrains.kotlin.spec.SpecTestInfoElementType import org.jetbrains.kotlin.spec.TestArea @@ -33,8 +34,9 @@ class NotLinkedSpecTest( cases: SpecTestCasesSet, unexpectedBehavior: Boolean, issues: Set, - helpers: Set? -) : AbstractSpecTest(testArea, testType, sections, testNumber, description, cases, unexpectedBehavior, issues, helpers) { + helpers: Set?, + exception: TestsExceptionType? +) : AbstractSpecTest(testArea, testType, sections, testNumber, description, cases, unexpectedBehavior, issues, helpers, exception) { override fun checkPathConsistency(pathMatcher: Matcher) = testArea == TestArea.valueOf(pathMatcher.group("testArea").withUnderscores()) && testType == TestType.fromValue(pathMatcher.group("testType"))!! diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/CommonParser.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/CommonParser.kt index 324f83280eb..a725058ce06 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/CommonParser.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/CommonParser.kt @@ -72,7 +72,8 @@ object CommonParser { parsedTestFile.unexpectedBehavior, LinkedSpecTestFileInfoElementType.UNSPECIFIED_BEHAVIOR in testInfoElements, parsedTestFile.issues, - parsedTestFile.helpers + parsedTestFile.helpers, + parsedTestFile.exception ) } @@ -90,7 +91,8 @@ object CommonParser { parsedTestFile.testCasesSet, parsedTestFile.unexpectedBehavior, parsedTestFile.issues, - parsedTestFile.helpers + parsedTestFile.helpers, + parsedTestFile.exception ) } diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestCasesParser.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestCasesParser.kt index ba707574769..d84d15b6b4d 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestCasesParser.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestCasesParser.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.spec.parsers +import org.jetbrains.kotlin.TestsExceptionType import org.jetbrains.kotlin.spec.* import org.jetbrains.kotlin.spec.models.CommonInfoElementType import org.jetbrains.kotlin.spec.models.LinkedSpecTestFileInfoElementType @@ -74,7 +75,8 @@ fun parseTestCases(testFiles: TestFiles): SpecTestCasesSet { ranges = mutableListOf(range), unexpectedBehavior = caseInfoElements.contains(CommonInfoElementType.UNEXPECTED_BEHAVIOUR), unspecifiedBehavior = caseInfoElements.contains(LinkedSpecTestFileInfoElementType.UNSPECIFIED_BEHAVIOR), - issues = CommonParser.parseIssues(caseInfoElements[CommonInfoElementType.ISSUES]).toMutableList() + issues = CommonParser.parseIssues(caseInfoElements[CommonInfoElementType.ISSUES]).toMutableList(), + exception = caseInfoElements[CommonInfoElementType.EXCEPTION]?.content?.let { TestsExceptionType.fromValue(it) } ).save(testCasesSet.byNumbers, testCasesOfFile, testCasesByRangesOfFile, caseInfoElements) startFind = matcher.end() - nextDirective.length diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestInfoParser.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestInfoParser.kt index ba7f90f65e9..01941b32e2c 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestInfoParser.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestInfoParser.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.spec.parsers import com.intellij.openapi.util.io.FileUtil +import org.jetbrains.kotlin.TestsExceptionType import org.jetbrains.kotlin.spec.* import org.jetbrains.kotlin.spec.models.CommonInfoElementType import org.jetbrains.kotlin.spec.models.CommonSpecTestFileInfoElementType @@ -24,7 +25,8 @@ data class ParsedTestFile( val testCasesSet: SpecTestCasesSet, val unexpectedBehavior: Boolean, val issues: Set, - val helpers: Set? + val helpers: Set?, + val exception: TestsExceptionType? ) fun parseTestInfo(testFilePath: String, testFiles: TestFiles, linkedTestType: SpecTestLinkedType): ParsedTestFile { @@ -54,6 +56,7 @@ fun parseTestInfo(testFilePath: String, testFiles: TestFiles, linkedTestType: Sp testCasesSet = parseTestCases(testFiles), unexpectedBehavior = testInfoElements.contains(CommonInfoElementType.UNEXPECTED_BEHAVIOUR), issues = CommonParser.parseIssues(testInfoElements[CommonInfoElementType.ISSUES]), - helpers = helpers + helpers = helpers, + exception = testInfoElements[CommonInfoElementType.EXCEPTION]?.content?.let { TestsExceptionType.fromValue(it) } ) }