diff --git a/intellij.idea.community.main.iml b/intellij.idea.community.main.iml index 02eb547b9d63..f7b83e53ddfb 100644 --- a/intellij.idea.community.main.iml +++ b/intellij.idea.community.main.iml @@ -189,6 +189,7 @@ + diff --git a/platform/workspaceModel/codegen/test/testSrc/com/intellij/workspaceModel/codegen/EntityCodeGenTest.kt b/platform/workspaceModel/codegen/test/testSrc/com/intellij/workspaceModel/codegen/EntityCodeGenTest.kt index ba1d26081253..9257ef980cb4 100644 --- a/platform/workspaceModel/codegen/test/testSrc/com/intellij/workspaceModel/codegen/EntityCodeGenTest.kt +++ b/platform/workspaceModel/codegen/test/testSrc/com/intellij/workspaceModel/codegen/EntityCodeGenTest.kt @@ -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 { - 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)) + } + } } \ No newline at end of file