[Testing] Support test roots in dependencies.txt
diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt
index 47cce10..9f7109b 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt
+++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt
@@ -52,12 +52,23 @@
 fun AbstractMultiModuleTest.doSetup(projectModel: ProjectResolveModel) {
     val resolveModulesToIdeaModules = projectModel.modules.map { resolveModule ->
         val ideaModule = createModule(resolveModule.name)
+
         addRoot(
             ideaModule,
             resolveModule.root,
             isTestRoot = false,
             transformContainedFiles = { if (it.extension == "kt") clearFileFromDiagnosticMarkup(it) }
         )
+
+        if (resolveModule.testRoot != null) {
+            addRoot(
+                ideaModule,
+                resolveModule.testRoot,
+                isTestRoot = true,
+                transformContainedFiles = { if (it.extension == "kt") clearFileFromDiagnosticMarkup(it) }
+            )
+        }
+
         resolveModule to ideaModule
     }.toMap()
 
diff --git a/idea/tests/org/jetbrains/kotlin/projectModel/Model.kt b/idea/tests/org/jetbrains/kotlin/projectModel/Model.kt
index 7d3ac5f8..fd7ffad 100644
--- a/idea/tests/org/jetbrains/kotlin/projectModel/Model.kt
+++ b/idea/tests/org/jetbrains/kotlin/projectModel/Model.kt
@@ -29,7 +29,8 @@
     val name: String,
     val root: File,
     val platform: TargetPlatform,
-    val dependencies: List<ResolveDependency>
+    val dependencies: List<ResolveDependency>,
+    val testRoot: File? = null
 ) {
     final override fun toString(): String {
         return buildString { renderDescription(Printer(this)) }
@@ -40,6 +41,7 @@
         printer.pushIndent()
         printer.println("platform=$platform")
         printer.println("root=${root.absolutePath}")
+        if (testRoot != null) printer.println("testRoot=${testRoot.absolutePath}")
         printer.println("dependencies=${dependencies.joinToString { it.to.name }}")
     }
 
@@ -66,6 +68,7 @@
         var root: File? = null
         var platform: TargetPlatform? = null
         val dependencies: MutableList<ResolveDependency.Builder> = mutableListOf()
+        var testRoot: File? = null
 
         open fun build(): ResolveModule {
             if (state == State.BUILT) return cachedResult!!
@@ -74,7 +77,7 @@
             state = State.BUILDING
 
             val builtDependencies = dependencies.map { it.build() }
-            cachedResult = ResolveModule(name!!, root!!, platform!!, builtDependencies)
+            cachedResult = ResolveModule(name!!, root!!, platform!!, builtDependencies, testRoot)
             state = State.BUILT
 
             return cachedResult!!
diff --git a/idea/tests/org/jetbrains/kotlin/projectModel/Parser.kt b/idea/tests/org/jetbrains/kotlin/projectModel/Parser.kt
index 610f49c..f263419 100644
--- a/idea/tests/org/jetbrains/kotlin/projectModel/Parser.kt
+++ b/idea/tests/org/jetbrains/kotlin/projectModel/Parser.kt
@@ -68,6 +68,9 @@
 
         val root = attributes["root"] ?: builder.name!!
         builder.root = File(projectRoot, root)
+
+        val testRoot = attributes["testRoot"]
+        if (testRoot != null) builder.testRoot = File(projectRoot, testRoot)
     }
 
     private fun Reader.parseDependenciesDefinition(fromName: String) {