Skip to content

Commit

Permalink
FIR IDE: separate logic of TestProjectStructure from AbstractFirMulti…
Browse files Browse the repository at this point in the history
…ModuleLazyResolveTest
  • Loading branch information
darthorimar committed Nov 27, 2020
1 parent 3515cd5 commit 519f154
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@

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.psi.PsiManager
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
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.getResolveState
import org.jetbrains.kotlin.idea.jsonUtils.getString
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
import org.jetbrains.kotlin.idea.util.sourceRoots
import org.jetbrains.kotlin.psi.KtFile
Expand All @@ -23,7 +25,7 @@ abstract class AbstractFirMultiModuleLazyResolveTest : AbstractMultiModuleTest()
"${KotlinTestUtils.getHomeDirectory()}/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/multiModuleLazyResolve/"

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 ->
moduleData.name to module(moduleData.name)
}
Expand Down Expand Up @@ -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"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,46 +13,22 @@ import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.idea.jsonUtils.getString
import java.nio.file.Path

sealed class TestProjectStructure {
abstract val modules: List<TestProjectModule>
abstract val fileToResolve: FileToResolve
abstract val fails: Boolean

internal data class TestProjectStructure(
val modules: List<TestProjectModule>,
val json: JsonObject,
) {
companion object {
fun parse(json: JsonElement): TestProjectStructure {
require(json is JsonObject)
val fails = if (json.has(FAILS_FIELD)) json.get(FAILS_FIELD).asBoolean else false

return MultiModuleTestProjectStructure(
json.getAsJsonArray("modules").map { TestProjectModule.parse(it) },
FileToResolve.parse(json.getAsJsonObject("fileToResolve")),
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")
return TestProjectStructure(
json.getAsJsonArray("modules").map(TestProjectModule::parse),
json,
)
}
}
}

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>) {
companion object {
Expand All @@ -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 {
val jsonFile = testDirectory.resolve(jsonFileName)

Expand Down

0 comments on commit 519f154

Please sign in to comment.