AbstractQuickFixMultiModuleTest: refactor and simplify code

Remove dependency on test module names
This commit is contained in:
Pavel V. Talanov
2018-03-21 15:11:43 +01:00
parent 36d23e4501
commit 01bff0e156
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.test.allKotlinFiles
import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -54,32 +53,7 @@ abstract class AbstractQuickFixMultiModuleTest : AbstractMultiModuleTest() {
)
if (actionShouldBeAvailable) {
val testDirectory = File(testDataPath)
val projectDirectory = File("$testDataPath${getTestName(true)}")
for (moduleDirectory in projectDirectory.listFiles()) {
val dirName = moduleDirectory.name
for (file in moduleDirectory.walkTopDown()) {
if (!file.path.endsWith(".after")) continue
try {
val packageName = file.readLines().find { it.startsWith("package") }?.substringAfter(" ") ?: "<root>"
val editedFile = allFilesInProject.mapNotNull {
val candidate = it.containingDirectory?.findFile(file.name.removeSuffix(".after")) as? KtFile
val isUnderTestRoot = candidate != null && "// TEST" in candidate.text
candidate?.takeIf {
it.packageFqName.toString() == packageName &&
it.module?.let { module ->
module.name + ("Test".takeIf { isUnderTestRoot } ?: "") == dirName
} == true
}
}.singleOrNull() ?: error("Cannot find suitable candidate for file ${file.name} from directory $dirName")
setActiveEditor(editedFile.findExistingEditor() ?: createEditor(editedFile.virtualFile))
checkResultByFile(file.relativeTo(testDirectory).path)
}
catch (e: ComparisonFailure) {
KotlinTestUtils.assertEqualsToFile(file, editor)
}
}
}
compareToExpected()
}
}
catch (e: ComparisonFailure) {
@@ -95,6 +69,25 @@ abstract class AbstractQuickFixMultiModuleTest : AbstractMultiModuleTest() {
}, "", "")
}
private fun compareToExpected() {
val projectDirectory = File("$testDataPath${getTestName(true)}")
val afterFiles = projectDirectory.walkTopDown().filter { it.path.endsWith(".after") }.toList()
for (editedFile in project.allKotlinFiles()) {
val afterFileInTmpProject = editedFile.containingDirectory?.findFile(file.name + ".after") ?: continue
val afterFileInTestData = afterFiles.single {
it.readText() == File(afterFileInTmpProject.virtualFile.path).readText()
}
setActiveEditor(editedFile.findExistingEditor() ?: createEditor(editedFile.virtualFile))
try {
checkResultByFile(afterFileInTestData.relativeTo(File(testDataPath)).path)
} catch (e: ComparisonFailure) {
KotlinTestUtils.assertEqualsToFile(afterFileInTestData, editor)
}
}
}
private val availableActions: List<IntentionAction>
get() {
doHighlighting()