diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java index c657dc6574e6..22ee36f03ba9 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java @@ -252,19 +252,20 @@ public class AddModuleWizard extends AbstractWizard { return null; } - protected final int getNextStep(int step) { - ModuleWizardStep nextStep = null; - final StepSequence stepSequence = getSequence(); - if (stepSequence != null) { - if (myRootStep == mySteps.get(step)) { - return mySteps.indexOf(stepSequence.getFirstStep()); - } - nextStep = stepSequence.getNextStep(mySteps.get(step)); - while (nextStep != null && !nextStep.isStepVisible()) { - nextStep = stepSequence.getNextStep(nextStep); - } + protected final int getNextStep(final int step) { + ModuleWizardStep nextStep = null; + final StepSequence stepSequence = getSequence(); + if (stepSequence != null) { + ModuleWizardStep current = mySteps.get(step); + if (myRootStep == current) { + return mySteps.indexOf(stepSequence.getFirstStep()); } - return nextStep == null ? step : mySteps.indexOf(nextStep); + nextStep = stepSequence.getNextStep(current); + while (nextStep != null && !nextStep.isStepVisible()) { + nextStep = stepSequence.getNextStep(nextStep); + } + } + return nextStep == null ? step : mySteps.indexOf(nextStep); } private StepSequence getSequence() { diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectNameStep.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectNameStep.java index 57a1fc83f100..82d05531620d 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectNameStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectNameStep.java @@ -67,7 +67,7 @@ public class ProjectNameStep extends ModuleWizardStep { myNamePathComponent.add(myFormatPanel.getStorageFormatComboBox(), new GridBagConstraints(1, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); } - myNamePathComponent.setVisible(myWizardContext.getProject() == null); + myNamePathComponent.setVisible(isStepVisible()); myAdditionalContentPanel = new JPanel(new GridBagLayout()); myPanel.add(myAdditionalContentPanel, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); } @@ -76,6 +76,11 @@ public class ProjectNameStep extends ModuleWizardStep { return myPanel; } + @Override + public boolean isStepVisible() { + return myWizardContext.getProject() == null; + } + public void updateDataModel() { myWizardContext.setProjectName(getProjectName()); final String projectFileDirectory = getProjectFileDirectory(); diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectNameWithTypeStep.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectNameWithTypeStep.java index 9478ef63b1ac..772fa5dcd8f7 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectNameWithTypeStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/ProjectNameWithTypeStep.java @@ -335,6 +335,11 @@ public class ProjectNameWithTypeStep extends ProjectNameStep { } } + @Override + public boolean isStepVisible() { + return true; + } + public JComponent getPreferredFocusedComponent() { return myWizardContext.isCreatingNewProject() ? super.getPreferredFocusedComponent() : myModuleName; } diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkStep.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkStep.java index f13f8b4d2952..7c6462f8d905 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkStep.java @@ -23,6 +23,7 @@ package com.intellij.ide.util.projectWizard; import com.intellij.ide.IdeBundle; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.projectRoots.Sdk; @@ -88,7 +89,7 @@ public class ProjectJdkStep extends ModuleWizardStep { public boolean validate() throws ConfigurationException { final Sdk jdk = myProjectJdksConfigurable.getSelectedJdk(); - if (jdk == null) { + if (jdk == null && !ApplicationManager.getApplication().isUnitTestMode()) { int result = Messages.showOkCancelDialog(IdeBundle.message("prompt.confirm.project.no.jdk"), IdeBundle.message("title.no.jdk.specified"), Messages.getWarningIcon()); if (result != 0) { diff --git a/java/testFramework/src/com/intellij/ide/projectWizard/ProjectWizardTestCase.java b/java/testFramework/src/com/intellij/ide/projectWizard/ProjectWizardTestCase.java new file mode 100644 index 000000000000..40e2c3f76146 --- /dev/null +++ b/java/testFramework/src/com/intellij/ide/projectWizard/ProjectWizardTestCase.java @@ -0,0 +1,161 @@ +package com.intellij.ide.projectWizard; + +import com.intellij.ide.impl.NewProjectUtil; +import com.intellij.ide.util.newProjectWizard.AddModuleWizard; +import com.intellij.ide.util.newProjectWizard.SelectTemplateStep; +import com.intellij.ide.util.projectWizard.ModuleWizardStep; +import com.intellij.ide.wizard.Step; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ui.configuration.DefaultModulesProvider; +import com.intellij.openapi.roots.ui.configuration.actions.NewModuleAction; +import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.platform.ProjectTemplate; +import com.intellij.projectImport.ProjectImportProvider; +import com.intellij.testFramework.PlatformTestCase; +import com.intellij.util.Consumer; +import com.intellij.util.Function; +import com.intellij.util.ui.UIUtil; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.io.IOException; + +/** + * @author Dmitry Avdeev + * Date: 10/29/12 + */ +public abstract class ProjectWizardTestCase extends PlatformTestCase { + + protected TestWizard myWizard; + @Nullable + private Project myCreatedProject; + + protected Project createProjectFromTemplate(String group, String name, @Nullable Consumer adjuster) { + runWizard(group, name, adjuster); + try { + myCreatedProject = NewProjectUtil.doCreate(myWizard, null); + } + catch (IOException e) { + fail(e.getMessage()); + } + assertNotNull(myCreatedProject); + + Project[] projects = myProjectManager.getOpenProjects(); + assertEquals(2, projects.length); + System.out.println(myCreatedProject.getBasePath()); + return myCreatedProject; + } + + @Nullable + protected Module createModuleFromTemplate(String group, String name, @Nullable Consumer adjuster) { + runWizard(group, name, adjuster); + return createModuleFromWizard(); + } + + protected Module createModuleFromWizard() { + return new NewModuleAction().createModuleFromWizard(myProject, null, myWizard); + } + + protected void runWizard(String group, String name, @Nullable Consumer adjuster) { + SelectTemplateStep step = (SelectTemplateStep)myWizard.getCurrentStepObject(); + assertTrue(step.setSelectedTemplate(group, name)); + ProjectTemplate template = step.getSelectedTemplate(); + assertNotNull(template); + System.out.println(template.getName()); + + if (adjuster != null) { + adjuster.consume(step); + } + + runWizard(adjuster); + } + + protected void runWizard(Consumer adjuster) { + while (!myWizard.isLast()) { + myWizard.doNextAction(); + if (adjuster != null) { + adjuster.consume(myWizard.getCurrentStepObject()); + } + } + myWizard.doOk(); + } + + @Override + public void setUp() throws Exception { + super.setUp(); + File directory = FileUtil.createTempDirectory(getName(), "new", false); + myFilesToDelete.add(directory); + + myWizard = createWizard(directory.getPath()); + + if (myWizard != null) { + myWizard.navigateToStep(new Function() { + @Override + public Boolean fun(Step step) { + return step instanceof SelectTemplateStep; + } + }); + UIUtil.dispatchAllInvocationEvents(); // to make default selection applied + } + } + + @Nullable + protected TestWizard createWizard(String directory) { + return new TestWizard(null, directory); + } + + @Override + public void tearDown() throws Exception { + if (myWizard != null) { + Disposer.dispose(myWizard.getDisposable()); + } + if (myCreatedProject != null) { + myProjectManager.closeProject(myCreatedProject); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + Disposer.dispose(myCreatedProject); + } + }); + } + super.tearDown(); + } + + protected Module importFrom(ProjectImportProvider provider, String path) { + VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByPath(path); + assertNotNull("Can't find " + path, file); + assertTrue(provider.canImport(file, getProject())); + myWizard = new TestWizard(getProject(), path, provider); + runWizard(null); + return createModuleFromWizard(); + } + + protected static class TestWizard extends AddModuleWizard { + + public TestWizard(@Nullable Project project, String defaultPath) { + super(project, DefaultModulesProvider.createForProject(project), defaultPath); + } + + public TestWizard(Project project, String filePath, ProjectImportProvider... importProvider) { + super(null, project, filePath, importProvider); + } + + void doOk() { + doOKAction(); + } + + boolean isLast() { + return isLastStep(); + } + + void commit() { + commitStepData(getCurrentStepObject()); + } + } + +} diff --git a/java/testFramework/testFramework-java.iml b/java/testFramework/testFramework-java.iml index d37693273732..408e30db13f3 100644 --- a/java/testFramework/testFramework-java.iml +++ b/java/testFramework/testFramework-java.iml @@ -20,7 +20,7 @@ - + diff --git a/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleWizardStep.java b/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleWizardStep.java index 52ed1451dcd5..e8857c07e88c 100644 --- a/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleWizardStep.java +++ b/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleWizardStep.java @@ -70,4 +70,9 @@ public abstract class ModuleWizardStep extends StepAdapter { fieldPanel.getFieldLabel().setFont(UIUtil.getLabelFont().deriveFont(Font.BOLD)); return fieldPanel; } + + @Override + public String toString() { + return getName(); + } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java index 7e8aabdad02a..8cef8e5cb138 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java @@ -285,4 +285,10 @@ public class MavenProjectBuilder extends ProjectImportBuilder { } return null; } + + @Override + public void setFileToImport(String path) { + VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByPath(path); + getParameters().myImportRoot = file == null || file.isDirectory() ? file : file.getParent(); + } } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java index 928842136a2f..88f5be3ed97d 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java @@ -365,7 +365,7 @@ public abstract class MavenTestCase extends UsefulTestCase { } @NonNls @Language(value="XML") - protected static String createPomXml(@NonNls @Language(value="XML", prefix="", suffix="") String xml) { + public static String createPomXml(@NonNls @Language(value="XML", prefix="", suffix="") String xml) { return "" + "test" + + "project" + + "1")); + importFrom(new MavenProjectImportProvider(new MavenProjectBuilder()), pom.getPath()); + + } +}