FIR IDE: separate logic of TestProjectStructure from AbstractFirMultiModuleLazyResolveTest
This commit is contained in:
+41
-2
@@ -5,12 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.fir.low.level.api
|
package org.jetbrains.kotlin.idea.fir.low.level.api
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement
|
||||||
|
import com.google.gson.JsonObject
|
||||||
import com.intellij.openapi.vfs.VirtualFileManager
|
import com.intellij.openapi.vfs.VirtualFileManager
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getResolveState
|
||||||
|
import org.jetbrains.kotlin.idea.jsonUtils.getString
|
||||||
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
|
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
|
||||||
import org.jetbrains.kotlin.idea.util.sourceRoots
|
import org.jetbrains.kotlin.idea.util.sourceRoots
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -23,7 +25,7 @@ abstract class AbstractFirMultiModuleLazyResolveTest : AbstractMultiModuleTest()
|
|||||||
"${KotlinTestUtils.getHomeDirectory()}/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/multiModuleLazyResolve/"
|
"${KotlinTestUtils.getHomeDirectory()}/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/multiModuleLazyResolve/"
|
||||||
|
|
||||||
fun doTest(path: String) {
|
fun doTest(path: String) {
|
||||||
val testStructure = TestProjectStructureReader.read(Paths.get(path))
|
val testStructure = MultiModuleTestProjectStructure.fromTestProjectStructure(TestProjectStructureReader.read(Paths.get(path)))
|
||||||
val modulesByNames = testStructure.modules.associate { moduleData ->
|
val modulesByNames = testStructure.modules.associate { moduleData ->
|
||||||
moduleData.name to module(moduleData.name)
|
moduleData.name to module(moduleData.name)
|
||||||
}
|
}
|
||||||
@@ -55,3 +57,40 @@ abstract class AbstractFirMultiModuleLazyResolveTest : AbstractMultiModuleTest()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private data class FileToResolve(val moduleName: String, val relativeFilePath: String) {
|
||||||
|
val filePath get() = "$moduleName/$relativeFilePath"
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun parse(json: JsonElement): FileToResolve {
|
||||||
|
require(json is JsonObject)
|
||||||
|
return FileToResolve(
|
||||||
|
moduleName = json.getString("module"),
|
||||||
|
relativeFilePath = json.getString("file")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private data class MultiModuleTestProjectStructure(
|
||||||
|
val modules: List<TestProjectModule>,
|
||||||
|
val fileToResolve: FileToResolve,
|
||||||
|
val fails: Boolean
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
fun fromTestProjectStructure(testProjectStructure: TestProjectStructure): MultiModuleTestProjectStructure {
|
||||||
|
val json = testProjectStructure.json
|
||||||
|
|
||||||
|
val fails = if (json.has(FAILS_FIELD)) json.get(FAILS_FIELD).asBoolean else false
|
||||||
|
val fileToResolve = FileToResolve.parse(json.getAsJsonObject("fileToResolve"))
|
||||||
|
|
||||||
|
return MultiModuleTestProjectStructure(
|
||||||
|
testProjectStructure.modules,
|
||||||
|
fileToResolve,
|
||||||
|
fails
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private const val FAILS_FIELD = "fails"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+8
-32
@@ -13,46 +13,22 @@ import com.intellij.openapi.util.io.FileUtil
|
|||||||
import org.jetbrains.kotlin.idea.jsonUtils.getString
|
import org.jetbrains.kotlin.idea.jsonUtils.getString
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
sealed class TestProjectStructure {
|
internal data class TestProjectStructure(
|
||||||
abstract val modules: List<TestProjectModule>
|
val modules: List<TestProjectModule>,
|
||||||
abstract val fileToResolve: FileToResolve
|
val json: JsonObject,
|
||||||
abstract val fails: Boolean
|
) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun parse(json: JsonElement): TestProjectStructure {
|
fun parse(json: JsonElement): TestProjectStructure {
|
||||||
require(json is JsonObject)
|
require(json is JsonObject)
|
||||||
val fails = if (json.has(FAILS_FIELD)) json.get(FAILS_FIELD).asBoolean else false
|
|
||||||
|
|
||||||
return MultiModuleTestProjectStructure(
|
return TestProjectStructure(
|
||||||
json.getAsJsonArray("modules").map { TestProjectModule.parse(it) },
|
json.getAsJsonArray("modules").map(TestProjectModule::parse),
|
||||||
FileToResolve.parse(json.getAsJsonObject("fileToResolve")),
|
json,
|
||||||
fails
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private const val FAILS_FIELD = "fails"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data class FileToResolve(val moduleName: String, val relativeFilePath: String) {
|
|
||||||
val filePath get() = "$moduleName/$relativeFilePath"
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun parse(json: JsonElement): FileToResolve {
|
|
||||||
require(json is JsonObject)
|
|
||||||
return FileToResolve(
|
|
||||||
moduleName = json.getString("module"),
|
|
||||||
relativeFilePath = json.getString("file")
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class MultiModuleTestProjectStructure(
|
|
||||||
override val modules: List<TestProjectModule>,
|
|
||||||
override val fileToResolve: FileToResolve,
|
|
||||||
override val fails: Boolean
|
|
||||||
) : TestProjectStructure()
|
|
||||||
|
|
||||||
data class TestProjectModule(val name: String, val dependsOnModules: List<String>) {
|
data class TestProjectModule(val name: String, val dependsOnModules: List<String>) {
|
||||||
companion object {
|
companion object {
|
||||||
@@ -71,7 +47,7 @@ data class TestProjectModule(val name: String, val dependsOnModules: List<String
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object TestProjectStructureReader {
|
internal object TestProjectStructureReader {
|
||||||
fun read(testDirectory: Path, jsonFileName: String = "structure.json"): TestProjectStructure {
|
fun read(testDirectory: Path, jsonFileName: String = "structure.json"): TestProjectStructure {
|
||||||
val jsonFile = testDirectory.resolve(jsonFileName)
|
val jsonFile = testDirectory.resolve(jsonFileName)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user