mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[tests] generalizes module-info tests
This commit is contained in:
+15
-3
@@ -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("<caret>", "module <caret>")
|
||||
fun testStatements1() = variants("module M { <caret> }", "requires", "exports", "uses", "provides")
|
||||
fun testStatements2() = complete("module M { requires X; ex<caret> }", "module M { requires X; exports <caret> }")
|
||||
@@ -52,7 +64,7 @@ class ModuleCompletionTest : LightFixtureCompletionTestCase() {
|
||||
}
|
||||
|
||||
//<editor-fold desc="Helpers.">
|
||||
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)
|
||||
|
||||
@@ -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", """/* ... */ <error descr="Module declaration should be in a file named 'module-info.java'">module M</error> { }""")
|
||||
myFixture.checkHighlighting()
|
||||
@@ -68,6 +80,7 @@ class ModuleHighlightingTest : LightCodeInsightFixtureTestCase() {
|
||||
}
|
||||
|
||||
fun testRequires() {
|
||||
addFile("module-info.java", "module M2 { requires M1 }", M2)
|
||||
doTest("""
|
||||
module M1 {
|
||||
requires <error descr="Module not found: M.missing">M.missing</error>;
|
||||
@@ -119,7 +132,7 @@ class ModuleHighlightingTest : LightCodeInsightFixtureTestCase() {
|
||||
}
|
||||
|
||||
//<editor-fold desc="Helpers.">
|
||||
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)
|
||||
|
||||
+36
-8
@@ -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) }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user