diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/ModuleCompletionTest.kt b/java/java-tests/testSrc/com/intellij/codeInsight/completion/ModuleCompletionTest.kt index 9fcd9c2fc2a0..444f2738f98d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/ModuleCompletionTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/ModuleCompletionTest.kt @@ -15,15 +15,27 @@ */ package com.intellij.codeInsight.completion -import com.intellij.testFramework.LightPlatformTestCase import com.intellij.testFramework.LightProjectDescriptor -import com.intellij.testFramework.MultiModuleJava9ProjectDescriptor import com.intellij.testFramework.VfsTestUtil +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.M2 +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.MAIN import org.assertj.core.api.Assertions.assertThat class ModuleCompletionTest : LightFixtureCompletionTestCase() { override fun getProjectDescriptor(): LightProjectDescriptor = MultiModuleJava9ProjectDescriptor + override fun setUp() { + super.setUp() + addFile("module-info.java", "module M2 { }", M2) + } + + override fun tearDown() { + MultiModuleJava9ProjectDescriptor.cleanupSourceRoots() + super.tearDown() + } + fun testFileHeader() = complete("", "module ") fun testStatements1() = variants("module M { }", "requires", "exports", "uses", "provides") fun testStatements2() = complete("module M { requires X; ex }", "module M { requires X; exports }") @@ -52,7 +64,7 @@ class ModuleCompletionTest : LightFixtureCompletionTestCase() { } // - private fun addFile(path: String, text: String) = VfsTestUtil.createFile(LightPlatformTestCase.getSourceRoot(), path, text) + private fun addFile(path: String, text: String, module: ModuleDescriptor = MAIN) = VfsTestUtil.createFile(module.root(), path, text) private fun complete(text: String, expected: String) { myFixture.configureByText("module-info.java", text) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/ModuleHighlightingTest.kt b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/ModuleHighlightingTest.kt index e7ae0a212d75..a23e8aaa7747 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/ModuleHighlightingTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/ModuleHighlightingTest.kt @@ -16,9 +16,11 @@ package com.intellij.codeInsight.daemon import com.intellij.psi.PsiJavaModule -import com.intellij.testFramework.LightPlatformTestCase import com.intellij.testFramework.LightProjectDescriptor -import com.intellij.testFramework.MultiModuleJava9ProjectDescriptor +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.M2 +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.MAIN import com.intellij.testFramework.VfsTestUtil import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl @@ -26,6 +28,16 @@ import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl class ModuleHighlightingTest : LightCodeInsightFixtureTestCase() { override fun getProjectDescriptor(): LightProjectDescriptor = MultiModuleJava9ProjectDescriptor + override fun setUp() { + super.setUp() + addFile("module-info.java", "module M2 { }", M2) + } + + override fun tearDown() { + MultiModuleJava9ProjectDescriptor.cleanupSourceRoots() + super.tearDown() + } + fun testWrongFileName() { myFixture.configureByText("M.java", """/* ... */ module M { }""") myFixture.checkHighlighting() @@ -68,6 +80,7 @@ class ModuleHighlightingTest : LightCodeInsightFixtureTestCase() { } fun testRequires() { + addFile("module-info.java", "module M2 { requires M1 }", M2) doTest(""" module M1 { requires M.missing; @@ -119,7 +132,7 @@ class ModuleHighlightingTest : LightCodeInsightFixtureTestCase() { } // - private fun addFile(path: String, text: String) = VfsTestUtil.createFile(LightPlatformTestCase.getSourceRoot(), path, text) + private fun addFile(path: String, text: String, module: ModuleDescriptor = MAIN) = VfsTestUtil.createFile(module.root(), path, text) private fun doTest(text: String, filter: Boolean = false) { myFixture.configureByText("module-info.java", text) diff --git a/java/testFramework/src/com/intellij/testFramework/MultiModuleJava9ProjectDescriptor.kt b/java/java-tests/testSrc/com/intellij/testFramework/fixtures/MultiModuleJava9ProjectDescriptor.kt similarity index 50% rename from java/testFramework/src/com/intellij/testFramework/MultiModuleJava9ProjectDescriptor.kt rename to java/java-tests/testSrc/com/intellij/testFramework/fixtures/MultiModuleJava9ProjectDescriptor.kt index 687a04ced041..60948c2ca36b 100644 --- a/java/testFramework/src/com/intellij/testFramework/MultiModuleJava9ProjectDescriptor.kt +++ b/java/java-tests/testSrc/com/intellij/testFramework/fixtures/MultiModuleJava9ProjectDescriptor.kt @@ -13,35 +13,63 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.testFramework +package com.intellij.testFramework.fixtures import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.module.Module +import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.ContentEntry import com.intellij.openapi.roots.LanguageLevelModuleExtension import com.intellij.openapi.roots.ModifiableRootModel +import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.util.io.FileUtil -import com.intellij.openapi.vfs.VfsUtil +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.openapi.vfs.ex.temp.TempFileSystem import com.intellij.pom.java.LanguageLevel -import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor +import com.intellij.testFramework.IdeaTestUtil +import com.intellij.testFramework.LightPlatformTestCase +/** + * Dependencies: 'main' -> 'm2' + */ object MultiModuleJava9ProjectDescriptor : DefaultLightProjectDescriptor() { + enum class ModuleDescriptor(internal val moduleName: String, internal val rootName: String) { + MAIN(TEST_MODULE_NAME, "/not_used/"), + M2("${TEST_MODULE_NAME}_m2", "src_m2"); + + fun root(): VirtualFile = + if (this == MAIN) LightPlatformTestCase.getSourceRoot() else TempFileSystem.getInstance().findFileByPath("/$rootName")!! + } + override fun getSdk(): Sdk = IdeaTestUtil.getMockJdk18() override fun setUpProject(project: Project, handler: SetupHandler) { super.setUpProject(project, handler) runWriteAction { - val m2 = createModule(project, FileUtil.join(FileUtil.getTempDirectory(), "light_idea_test_case_m2.iml")) - val src2 = createSourceRoot(m2, "src2") - createContentEntry(m2, src2) - - VfsUtil.saveText(src2.createChildData(this, "module-info.java"), "module M2 { requires M1; }") + val main = ModuleManager.getInstance(project).findModuleByName(TEST_MODULE_NAME)!! + val m2 = makeModule(project, ModuleDescriptor.M2) + ModuleRootModificationUtil.addDependency(main, m2) } } + private fun makeModule(project: Project, descriptor: ModuleDescriptor): Module { + val path = FileUtil.join(FileUtil.getTempDirectory(), "${descriptor.moduleName}.iml") + val module = createModule(project, path) + val sourceRoot = createSourceRoot(module, descriptor.rootName) + createContentEntry(module, sourceRoot) + return module + } + override fun configureModule(module: Module, model: ModifiableRootModel, contentEntry: ContentEntry) { model.getModuleExtension(LanguageLevelModuleExtension::class.java).languageLevel = LanguageLevel.JDK_1_9 } + + fun cleanupSourceRoots() = runWriteAction { + ModuleDescriptor.values().asSequence() + .filter { it != ModuleDescriptor.MAIN } + .flatMap { it.root().children.asSequence() } + .forEach { it.delete(this) } + } } \ No newline at end of file