diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/test/muteWithDatabase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/test/muteWithDatabase.kt index ba0cccbd466..c3a66c460d0 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/test/muteWithDatabase.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/test/muteWithDatabase.kt @@ -191,34 +191,54 @@ class RunnerFactoryWithMuteInDatabase : ParametersRunnerFactory { override fun isIgnored(child: FrameworkMethod): Boolean { return super.isIgnored(child) || isIgnoredInDatabaseWithLog(child, name) } + + override fun runChild(method: FrameworkMethod, notifier: RunNotifier) { + notifier.withMuteFailureListener(method.declaringClass, parametrizedMethodKey(method, name)) { + super.runChild(method, notifier) + } + } } } } +private fun parametrizedMethodKey(child: FrameworkMethod, parametersName: String): String { + return child.method.name + parametersName +} + +private inline fun RunNotifier.withMuteFailureListener( + declaredClass: Class<*>, + methodKey: String, + crossinline run: () -> Unit, +) { + val doAutoMute = DO_AUTO_MUTE + if (doAutoMute == null) { + run() + return + } + + val muteFailureListener = object : RunListener() { + override fun testFailure(failure: Failure) { + doAutoMute.muteTest(testKey(declaredClass, methodKey)) + super.testFailure(failure) + } + } + + try { + addListener(muteFailureListener) + run() + } finally { + removeListener(muteFailureListener) + } +} + class RunnerWithIgnoreInDatabase(klass: Class<*>?) : BlockJUnit4ClassRunner(klass) { override fun isIgnored(child: FrameworkMethod): Boolean { return super.isIgnored(child) || isIgnoredInDatabaseWithLog(child) } override fun runChild(method: FrameworkMethod, notifier: RunNotifier) { - val doAutoMute = DO_AUTO_MUTE - if (doAutoMute == null) { + notifier.withMuteFailureListener(method.declaringClass, method.name) { super.runChild(method, notifier) - return - } - - val muteFailureListener = object : RunListener() { - override fun testFailure(failure: Failure) { - doAutoMute.muteTest(testKey(method.declaringClass, method.name)) - super.testFailure(failure) - } - } - - try { - notifier.addListener(muteFailureListener) - super.runChild(method, notifier) - } finally { - notifier.removeListener(muteFailureListener) } } } @@ -237,7 +257,7 @@ fun isIgnoredInDatabaseWithLog(child: FrameworkMethod, parametersName: String): return true } - val methodWithParametersKey = child.method.name + parametersName + val methodWithParametersKey = parametrizedMethodKey(child, parametersName) if (isMutedInDatabase(child.declaringClass, methodWithParametersKey)) { System.err.println(mutedMessage(testKey(child.declaringClass, methodWithParametersKey))) return true