From 84d167b7bdc9ca1ec839896cb3a7da91ad64cfd4 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Tue, 20 Aug 2019 20:41:25 +0700 Subject: [PATCH] TypeAccessibilityChecker: add logs for tests --- .../expectactual/CreateExpectedFix.kt | 23 +++++++++++-------- .../expectactual/TypeAccessibilityChecker.kt | 5 ++++ .../AbstractQuickFixMultiModuleTest.kt | 23 +++++++++++++++---- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt index 734a3a6b812..62b4b8d2d4d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt @@ -178,18 +178,23 @@ private tailrec fun TypeAccessibilityChecker.findAndApplyExistingClasses(element else findAndApplyExistingClasses(newExistingClasses) } -private fun showUnknownTypesDialog(project: Project, declarationsWithNonExistentClasses: Collection): Boolean = - declarationsWithNonExistentClasses.isEmpty() || showOkNoDialog( +private fun showUnknownTypesDialog(project: Project, declarationsWithNonExistentClasses: Collection): Boolean { + if (declarationsWithNonExistentClasses.isEmpty()) return true + val message = StringUtil.escapeXmlEntities( + declarationsWithNonExistentClasses.joinToString( + prefix = "These declarations cannot be transformed:\n", + separator = "\n", + transform = ::getExpressionShortText + ) + ) + + TypeAccessibilityChecker.testLog?.append("$message\n") + return ApplicationManager.getApplication().isUnitTestMode || showOkNoDialog( "Unknown types", - StringUtil.escapeXmlEntities( - declarationsWithNonExistentClasses.joinToString( - prefix = "These declarations cannot be transformed:\n", - separator = "\n", - transform = ::getExpressionShortText - ) - ), + message, project ) +} private fun showUnknownTypesError(element: KtNamedDeclaration) { element.findExistingEditor()?.let { editor -> diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/TypeAccessibilityChecker.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/TypeAccessibilityChecker.kt index bd8dd2c5e47..69f02342b3d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/TypeAccessibilityChecker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/TypeAccessibilityChecker.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.quickfix.expectactual import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project +import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtNamedDeclaration @@ -33,5 +34,9 @@ interface TypeAccessibilityChecker { targetModule: Module, existingFqNames: Collection = emptyList() ): TypeAccessibilityChecker = TypeAccessibilityCheckerImpl(project, targetModule, existingFqNames) + + @get:TestOnly + @set:TestOnly + var testLog: StringBuilder? = null } } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixMultiModuleTest.kt index e3ac24a2a67..67e89c31ff0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/AbstractQuickFixMultiModuleTest.kt @@ -14,6 +14,7 @@ import junit.framework.ComparisonFailure import junit.framework.TestCase import org.jetbrains.kotlin.idea.inspections.findExistingEditor import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromDirStructure +import org.jetbrains.kotlin.idea.quickfix.expectactual.TypeAccessibilityChecker import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils import org.jetbrains.kotlin.idea.test.PluginTestCaseBase @@ -54,10 +55,16 @@ abstract class AbstractQuickFixMultiModuleTest : AbstractMultiModuleTest(), Quic expectedErrorMessage = InTextDirectivesUtils.findListWithPrefixes(actionFileText, "// SHOULD_FAIL_WITH: ") .joinToString(separator = "\n") - AbstractQuickFixMultiFileTest.doAction( - text, file, editor, actionShouldBeAvailable, actionFileName, this::availableActions, this::doHighlighting, - InTextDirectivesUtils.isDirectiveDefined(actionFile.text, "// SHOULD_BE_AVAILABLE_AFTER_EXECUTION") - ) + TypeAccessibilityChecker.testLog = StringBuilder() + val log = try { + AbstractQuickFixMultiFileTest.doAction( + text, file, editor, actionShouldBeAvailable, actionFileName, this::availableActions, this::doHighlighting, + InTextDirectivesUtils.isDirectiveDefined(actionFile.text, "// SHOULD_BE_AVAILABLE_AFTER_EXECUTION") + ) + TypeAccessibilityChecker.testLog.toString() + } finally { + TypeAccessibilityChecker.testLog = null + } if (actionFile is KtFile) { DirectiveBasedActionUtils.checkForUnexpectedErrors(actionFile) @@ -66,7 +73,15 @@ abstract class AbstractQuickFixMultiModuleTest : AbstractMultiModuleTest(), Quic if (actionShouldBeAvailable) { compareToExpected(dirPath) } + UsefulTestCase.assertEmpty(expectedErrorMessage) + val logFile = File("${dirPath}log.log") + if (log.isNotEmpty()) { + KotlinTestUtils.assertEqualsToFile(logFile, log) + } else { + TestCase.assertFalse(logFile.exists()) + } + } catch (e: ComparisonFailure) { throw e } catch (e: AssertionError) {