Files
2024-01-05 12:03:29 +00:00

165 lines
6.9 KiB
Java

// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.ide.projectWizard;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.projectRoots.*;
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.search.FilenameIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.util.SystemProperties;
import static com.intellij.ide.projectWizard.NewProjectWizardConstants.Language.JAVA;
import static com.intellij.ide.projectWizard.generators.IntelliJJavaNewProjectWizardData.getJavaData;
/**
* @author Dmitry Avdeev
*/
public class NewProjectWizardTest extends NewProjectWizardTestCase {
public void testCreateProject() throws Exception {
Project project = createProjectFromTemplate(JAVA, step -> {});
assertNotNull(project);
Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk();
assertNotNull(sdk);
JavaSdkVersion version = JavaSdk.getInstance().getVersion(sdk);
assertNotNull(version);
assertEquals(version.getMaxLanguageLevel(), LanguageLevelProjectExtension.getInstance(project).getLanguageLevel());
}
public void testModuleJdk() throws Exception {
configureJdk();
Project project = createProjectFromTemplate(JAVA, step -> {});
final var manager = ModuleManager.getInstance(project);
// Default module should have null JDK
assertSize(1, manager.getModules());
final var module = manager.getModules()[0];
assertTrue(ModuleRootManager.getInstance(module).isSdkInherited());
}
public void testNewModuleJdk() throws Exception {
final Sdk otherSdk = new SimpleJavaSdkType().createJdk("_other", SystemProperties.getJavaHome());
final Sdk defaultSdk = ProjectJdkTable.getInstance().findJdk(DEFAULT_SDK);
final String moduleName = "new_module";
ApplicationManager.getApplication().runWriteAction(() -> {
addSdk(defaultSdk);
addSdk(otherSdk);
});
// Project with default JDK
Project project = createProjectFromTemplate(JAVA, step -> {
getJavaData(step).setSdk(defaultSdk);
});
assertEquals(ProjectRootManager.getInstance(project).getProjectSdk().getName(), defaultSdk.getName());
// Module with custom JDK
createModuleFromTemplate(project, JAVA, step -> {
getJavaData(step).setSdk(otherSdk);
getJavaData(step).setModuleName(moduleName);
});
final var manager = ModuleManager.getInstance(project);
assertSize(2, manager.getModules());
// Module JDK should be _other
final var module = manager.findModuleByName(moduleName);
assertNotNull(module);
assertFalse(ModuleRootManager.getInstance(module).isSdkInherited());
assertEquals(ModuleRootManager.getInstance(module).getSdk().getName(), otherSdk.getName());
}
public void testDefaultLanguageLevel13() throws Exception {
Project project = doLanguageLevelTest(LanguageLevel.JDK_1_3, false);
assertFalse(LanguageLevelProjectExtension.getInstance(project).getDefault());
}
public void testDefaultLanguageLevel19() throws Exception {
Project project = doLanguageLevelTest(LanguageLevel.JDK_1_9, false);
assertFalse(LanguageLevelProjectExtension.getInstance(project).getDefault());
}
public void testDefaultLanguageLevel() throws Exception {
final Sdk defaultSdk = ProjectJdkTable.getInstance().findJdk(DEFAULT_SDK);
setProjectSdk(ProjectManager.getInstance().getDefaultProject(), defaultSdk);
JavaSdkVersion version = JavaSdk.getInstance().getVersion(defaultSdk);
assertNotNull(version);
Project project = doLanguageLevelTest(version.getMaxLanguageLevel(), true);
Boolean def = LanguageLevelProjectExtension.getInstance(project).getDefault();
assertNotNull(def);
assertTrue(def);
}
public void testChangeSdk() throws Exception {
Project project = createProjectFromTemplate(JAVA, step -> {});
Sdk jdk17 = IdeaTestUtil.getMockJdk17();
addSdk(jdk17);
setProjectSdk(project, jdk17);
LanguageLevelProjectExtension extension = LanguageLevelProjectExtension.getInstance(project);
assertTrue(extension.isDefault());
assertNotSame(LanguageLevel.JDK_1_8, extension.getLanguageLevel());
Sdk jdk18 = IdeaTestUtil.getMockJdk18();
addSdk(jdk18);
setProjectSdk(project, jdk18);
assertEquals(LanguageLevel.JDK_1_8, extension.getLanguageLevel());
}
public void testMigrateFromOldDefaults() throws Exception {
LanguageLevelProjectExtension defaultExt = LanguageLevelProjectExtension.getInstance(ProjectManager.getInstance().getDefaultProject());
defaultExt.setLanguageLevel(LanguageLevel.JDK_1_4);
defaultExt.setDefault(null); // emulate migration from previous build
Project project = createProjectFromTemplate(JAVA, step -> {});
LanguageLevelProjectExtension extension = LanguageLevelProjectExtension.getInstance(project);
Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk();
JavaSdkVersion version = JavaSdk.getInstance().getVersion(sdk);
assertEquals(version.getMaxLanguageLevel(), extension.getLanguageLevel());
}
public void testSampleCode() throws Exception {
Project project = createProjectFromTemplate(JAVA, step -> {
getJavaData(step).setAddSampleCode(true);
});
final var mainSearch = FilenameIndex.getVirtualFilesByName("Main.java", GlobalSearchScope.projectScope(project));
assertFalse(mainSearch.isEmpty());
}
private static void setProjectSdk(final Project project, final Sdk jdk17) {
ApplicationManager.getApplication().runWriteAction(() -> ProjectRootManager.getInstance(project).setProjectSdk(jdk17));
}
private Project doLanguageLevelTest(LanguageLevel languageLevel, boolean detect) throws Exception {
ProjectManager projectManager = ProjectManager.getInstance();
Project defaultProject = projectManager.getDefaultProject();
LanguageLevel old = LanguageLevelProjectExtension.getInstance(defaultProject).getLanguageLevel();
try {
LanguageLevelProjectExtension.getInstance(defaultProject).setLanguageLevel(languageLevel);
LanguageLevelProjectExtension.getInstance(defaultProject).setDefault(detect);
Project project = createProjectFromTemplate(JAVA, step -> {});
assertEquals(languageLevel, LanguageLevelProjectExtension.getInstance(project).getLanguageLevel());
return project;
}
finally {
LanguageLevelProjectExtension.getInstance(defaultProject).setLanguageLevel(old);
LanguageLevelProjectExtension.getInstance(defaultProject).setDefault(true);
}
}
@Override
protected void setUp() throws Exception {
super.setUp();
configureJdk();
}
}