From a743835011fbde06608cc8b4d81d799a669c364d Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 16 Oct 2019 15:02:55 +0300 Subject: [PATCH] 193: Fix compilation because method replace in 193 --- .../KotlinLightProjectDescriptor.java.193 | 51 ++++++ ...onfigureProjectByChangingFileTest.java.193 | 168 ++++++++++++++++++ 2 files changed, 219 insertions(+) create mode 100644 idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightProjectDescriptor.java.193 create mode 100644 idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureProjectByChangingFileTest.java.193 diff --git a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightProjectDescriptor.java.193 b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightProjectDescriptor.java.193 new file mode 100644 index 00000000000..07fd6548c28 --- /dev/null +++ b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightProjectDescriptor.java.193 @@ -0,0 +1,51 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.test; + +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleTypeId; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.roots.ContentEntry; +import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.testFramework.LightProjectDescriptor; +import org.jetbrains.annotations.NotNull; + +public class KotlinLightProjectDescriptor extends LightProjectDescriptor { + protected KotlinLightProjectDescriptor() { + } + + public static final KotlinLightProjectDescriptor INSTANCE = new KotlinLightProjectDescriptor(); + + @NotNull + @Override + public String getModuleTypeId() { + return ModuleTypeId.JAVA_MODULE; + } + + @Override + public Sdk getSdk() { + return PluginTestCaseBase.mockJdk(); + } + + @Override + public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) { + configureModule(module, model); + } + + public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model) { + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureProjectByChangingFileTest.java.193 b/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureProjectByChangingFileTest.java.193 new file mode 100644 index 00000000000..d994922d0b1 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/AbstractConfigureProjectByChangingFileTest.java.193 @@ -0,0 +1,168 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.configuration; + +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.fileTypes.FileTypeManager; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.roots.OrderRootType; +import com.intellij.openapi.util.io.FileUtilRt; +import com.intellij.openapi.vfs.CharsetToolkit; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiJavaModule; +import com.intellij.psi.search.FilenameIndex; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.testFramework.LightCodeInsightTestCase; +import com.intellij.testFramework.LightProjectDescriptor; +import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.idea.core.script.ScriptUtilsKt; +import org.jetbrains.kotlin.test.InTextDirectivesUtils; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.plugins.groovy.GroovyFileType; + +import java.io.File; +import java.io.IOException; +import java.util.Objects; + +public abstract class AbstractConfigureProjectByChangingFileTest extends LightCodeInsightTestCase { + private static final String DEFAULT_VERSION = "default_version"; + + private PsiFile moduleInfoFile; + + @Override + protected void setUp() throws Exception { + super.setUp(); + ApplicationManager.getApplication().runWriteAction( + () -> FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle") + ); + ScriptUtilsKt.setScriptDependenciesUpdaterDisabled(ApplicationManager.getApplication(), true); + } + + @Override + protected void tearDown() throws Exception { + ScriptUtilsKt.setScriptDependenciesUpdaterDisabled(ApplicationManager.getApplication(), false); + moduleInfoFile = null; + super.tearDown(); + } + + protected void doTest(@NotNull String beforeFile, @NotNull String afterFile, @NotNull C configurator) throws Exception { + configureByFile(beforeFile); + + prepareModuleInfoFile(beforeFile); + + String versionFromFile = InTextDirectivesUtils.findStringWithPrefixes(getFile().getText(), "// VERSION:"); + String version = versionFromFile != null ? versionFromFile : DEFAULT_VERSION; + + NotificationMessageCollector collector = NotificationMessageCollectorKt.createConfigureKotlinNotificationCollector(getProject()); + + runConfigurator(getModule(), getFile(), configurator, version, collector); + + collector.showNotification(); + + KotlinTestUtils.assertEqualsToFile(new File(afterFile), getFile().getText().replace(version, "$VERSION$")); + + checkModuleInfoFile(beforeFile); + } + + private void prepareModuleInfoFile(@NotNull String beforeFile) throws IOException { + File file = new File(beforeFile); + String parent = file.getParent(); + File moduleInfo = new File(parent, PsiJavaModule.MODULE_INFO_FILE); + moduleInfoFile = null; + if (moduleInfo.exists()) { + String fileText = FileUtilRt.loadFile(moduleInfo, CharsetToolkit.UTF8, true); + createAndSaveFile(PsiJavaModule.MODULE_INFO_FILE, fileText); + + PsiFile[] moduleInfoFiles = + FilenameIndex.getFilesByName(getProject(), PsiJavaModule.MODULE_INFO_FILE, GlobalSearchScope.allScope(getProject())); + assertTrue(PsiJavaModule.MODULE_INFO_FILE + " should be present in index", moduleInfoFiles.length == 1); + moduleInfoFile = moduleInfoFiles[0]; + } + } + + private void checkModuleInfoFile(@NotNull String beforeFile) { + File file = new File(beforeFile); + String parent = file.getParent(); + + if (moduleInfoFile != null) { + String afterFileName = PsiJavaModule.MODULE_INFO_FILE.replace(".java", "_after.java"); + commitAllDocuments(); + KotlinTestUtils.assertEqualsToFile(new File(parent, afterFileName), moduleInfoFile.getText()); + } + } + + protected abstract void runConfigurator( + Module module, @NotNull PsiFile file, + @NotNull C configurator, + @NotNull String version, + @NotNull NotificationMessageCollector collector + ); + + @NotNull + @Override + protected String getTestDataPath() { + return ""; + } + + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return new SimpleLightProjectDescriptor(getModuleTypeId(), getProjectJDK()); + } + + private static class SimpleLightProjectDescriptor extends LightProjectDescriptor { + @NotNull private final String myModuleTypeId; + @Nullable private final Sdk mySdk; + + SimpleLightProjectDescriptor(@NotNull String moduleTypeId, @Nullable Sdk sdk) { + myModuleTypeId = moduleTypeId; + mySdk = sdk; + } + + @NotNull + @Override + public String getModuleTypeId() { + return myModuleTypeId; + } + + @Nullable + @Override + public Sdk getSdk() { + return mySdk; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + SimpleLightProjectDescriptor that = (SimpleLightProjectDescriptor)o; + + if (!myModuleTypeId.equals(that.myModuleTypeId)) return false; + return areJdksEqual(that.getSdk()); + } + + @Override + public int hashCode() { + return myModuleTypeId.hashCode(); + } + + private boolean areJdksEqual(Sdk newSdk) { + if (mySdk == null || newSdk == null) return mySdk == newSdk; + + if (!Objects.equals(mySdk.getVersionString(), newSdk.getVersionString())) { + return false; + } + + String[] myUrls = mySdk.getRootProvider().getUrls(OrderRootType.CLASSES); + String[] newUrls = newSdk.getRootProvider().getUrls(OrderRootType.CLASSES); + return ContainerUtil.newHashSet(myUrls).equals(ContainerUtil.newHashSet(newUrls)); + } + } +}