mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[workspace model codegen tests] ensure that EntityCodeGenTest doesn't change shared state
Project model for light project must not be changed in the test code because it's shared between tests, a new LightProjectDescriptor should be configured instead. Changes in global settings must be restored when test finishes to avoid problems in other tests. In order to execute test on TeamCity, its module must be added to dependencies of one of *.main modules. GitOrigin-RevId: c9d5f03d2a26402359785f0d3059e9184753bf9c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
42a9e7538a
commit
eb9313d7dc
@@ -189,6 +189,7 @@
|
||||
<orderEntry type="module" module-name="intellij.evaluationPlugin.languages.java" scope="RUNTIME" />
|
||||
<orderEntry type="module" module-name="intellij.vcs.gitlab" scope="RUNTIME" />
|
||||
<orderEntry type="module" module-name="intellij.platform.warmup" scope="RUNTIME" />
|
||||
<orderEntry type="module" module-name="intellij.platform.workspaceModel.codegen.test" scope="TEST" />
|
||||
<orderEntry type="module" module-name="intellij.platform.testFramework.junit5" scope="TEST" />
|
||||
<orderEntry type="module" module-name="intellij.remoteControl" scope="RUNTIME" />
|
||||
</component>
|
||||
|
||||
+28
-34
@@ -1,47 +1,45 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.workspaceModel.codegen
|
||||
|
||||
import com.intellij.openapi.application.WriteAction
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.ex.PathManagerEx
|
||||
import com.intellij.openapi.application.runWriteActionAndWait
|
||||
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.testFramework.PlatformTestUtil
|
||||
import com.intellij.util.io.assertMatches
|
||||
import com.intellij.util.io.directoryContentOf
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
|
||||
class EntityCodeGenTest: KotlinLightCodeInsightFixtureTestCase() {
|
||||
private var genFolder: VirtualFile? = null
|
||||
|
||||
override val testDataDirectory: File
|
||||
get() = File(PathManagerEx.getCommunityHomePath() + "/platform/workspaceModel/codegen/test/testData/$testDirectoryName")
|
||||
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
// Set strip trailing spaces
|
||||
val settings = EditorSettingsExternalizable.getInstance()
|
||||
val oldValue = settings.stripTrailingSpaces
|
||||
settings.stripTrailingSpaces = EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE
|
||||
|
||||
runWriteActionAndWait {
|
||||
genFolder = createGeneratedSourceFolder()
|
||||
}
|
||||
val entityFolderVfu = VirtualFileManager.getInstance().findFileByNioPath(testDataDirectory.toPath().resolve("before"))!!
|
||||
runWriteActionAndWait {
|
||||
VfsUtil.copyDirectory(this, entityFolderVfu, getSourceRootVfu(), null)
|
||||
}
|
||||
disposeOnTearDown(Disposable {
|
||||
settings.stripTrailingSpaces = oldValue
|
||||
})
|
||||
myFixture.copyDirectoryToProject("before", "")
|
||||
}
|
||||
|
||||
override fun getProjectDescriptor(): LightProjectDescriptor = entitiesProjectDescriptor
|
||||
|
||||
fun testSimpleCase() {
|
||||
doTest()
|
||||
}
|
||||
@@ -68,7 +66,7 @@ class EntityCodeGenTest: KotlinLightCodeInsightFixtureTestCase() {
|
||||
|
||||
private fun doTest() {
|
||||
runWriteActionAndWait {
|
||||
CodeWriter.generate(project, getSourceRootVfu(), false) { genFolder }
|
||||
CodeWriter.generate(project, myFixture.findFileInTempDir("."), false) { myFixture.tempDirFixture.findOrCreateDir("gen") }
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||
VirtualFileManager.getInstance().syncRefresh()
|
||||
}
|
||||
@@ -82,31 +80,27 @@ class EntityCodeGenTest: KotlinLightCodeInsightFixtureTestCase() {
|
||||
val expectedDir = FileUtil.createTempDirectory(EntityCodeGenTest::class.java.simpleName, "${testDirectoryName}_api", true)
|
||||
val expectedDirVfu = VirtualFileManager.getInstance().findFileByNioPath(expectedDir.toPath())!!
|
||||
runWriteActionAndWait {
|
||||
VfsUtil.copyDirectory(this, getSourceRootVfu(), expectedDirVfu, null)
|
||||
VfsUtil.copyDirectory(this, myFixture.findFileInTempDir("."), expectedDirVfu, null)
|
||||
}
|
||||
expectedDir.assertMatches(directoryContentOf(getExpectedDir()))
|
||||
}
|
||||
|
||||
private fun createGeneratedSourceFolder(): VirtualFile {
|
||||
val generatedFolder = WriteAction.compute<VirtualFile, RuntimeException> {
|
||||
VfsUtil.createDirectoryIfMissing(getSourceRootVfu(), "gen")
|
||||
}
|
||||
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
val contentEntry = modifiableModel.contentEntries.first()
|
||||
contentEntry.addSourceFolder(generatedFolder, JavaSourceRootType.SOURCE,
|
||||
JpsJavaExtensionService.getInstance().createSourceRootProperties("", true))
|
||||
modifiableModel.commit()
|
||||
module.project.save()
|
||||
return generatedFolder
|
||||
}
|
||||
|
||||
private fun getSourceRootVfu(): VirtualFile {
|
||||
val moduleRootManager = ModuleRootManager.getInstance(module)
|
||||
return moduleRootManager.contentEntries.first().sourceFolders.first().file!!
|
||||
}
|
||||
|
||||
private fun getExpectedDir(): Path {
|
||||
return testDataDirectory.toPath().resolve("after")
|
||||
}
|
||||
|
||||
companion object {
|
||||
val entitiesProjectDescriptor: EntitiesProjectDescriptor by lazy { EntitiesProjectDescriptor() }
|
||||
}
|
||||
|
||||
class EntitiesProjectDescriptor : KotlinLightProjectDescriptor() {
|
||||
override fun configureModule(module: Module, model: ModifiableRootModel) {
|
||||
val contentEntry = model.contentEntries.first()
|
||||
val genFolder = VfsUtil.createDirectoryIfMissing(contentEntry.file, "gen")
|
||||
|
||||
contentEntry.addSourceFolder(genFolder, JavaSourceRootType.SOURCE,
|
||||
JpsJavaExtensionService.getInstance().createSourceRootProperties("", true))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user