[tests] generalizes module-info tests

This commit is contained in:
Roman Shevchenko
2016-09-08 20:11:06 +03:00
parent 5f4654cedf
commit c11ddd6215
3 changed files with 67 additions and 14 deletions
@@ -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)
@@ -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) }
}
}