blob: 03d5f3e090927e45b24ceafe3fb408f258bae9ad [file] [log] [blame]
package com.intellij.ide.util.frameworkSupport;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetManager;
import com.intellij.facet.FacetTypeId;
import com.intellij.facet.ui.FacetBasedFrameworkSupportProvider;
import com.intellij.framework.*;
import com.intellij.framework.addSupport.FrameworkSupportInModuleConfigurable;
import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider;
import com.intellij.ide.util.newProjectWizard.FrameworkSupportNode;
import com.intellij.ide.util.newProjectWizard.OldFrameworkSupportProviderWrapper;
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportCommunicator;
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelBase;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.IdeaModifiableModelsProvider;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.IdeaTestCase;
import com.intellij.testFramework.PsiTestUtil;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.util.*;
/**
* @author nik
*/
public abstract class FrameworkSupportProviderTestCase extends IdeaTestCase {
private FrameworkSupportModelBase myFrameworkSupportModel;
private Map<FrameworkType, FrameworkSupportInModuleConfigurable> myConfigurables;
private Map<FrameworkType, FrameworkSupportNode> myNodes;
@Override
protected void setUp() throws Exception {
super.setUp();
final Project project = getProject();
myFrameworkSupportModel = new FrameworkSupportModelImpl(project, "", LibrariesContainerFactory.createContainer(project));
myNodes = new HashMap<FrameworkType, FrameworkSupportNode>();
final List<FrameworkSupportInModuleProvider> providers = FrameworkSupportUtil.getAllProviders();
Collections.sort(providers, FrameworkSupportUtil.getFrameworkSupportProvidersComparator(providers));
for (FrameworkSupportInModuleProvider provider : providers) {
final FrameworkSupportNode node = new FrameworkSupportNode(provider, null, myFrameworkSupportModel, getTestRootDisposable());
myNodes.put(provider.getFrameworkType(), node);
myFrameworkSupportModel.registerComponent(provider, node);
}
myConfigurables = new HashMap<FrameworkType, FrameworkSupportInModuleConfigurable>();
}
protected void addSupport() throws IOException {
new WriteCommandAction.Simple(getProject()) {
@Override
protected void run() throws Throwable {
final VirtualFile root = getVirtualFile(createTempDir("contentRoot"));
PsiTestUtil.addContentRoot(myModule, root);
final ModifiableRootModel model = ModuleRootManager.getInstance(myModule).getModifiableModel();
try {
List<FrameworkSupportConfigurable> selectedConfigurables = new ArrayList<FrameworkSupportConfigurable>();
final IdeaModifiableModelsProvider modelsProvider = new IdeaModifiableModelsProvider();
for (FrameworkSupportNode node : myNodes.values()) {
if (node.isChecked()) {
final FrameworkSupportInModuleConfigurable configurable = getOrCreateConfigurable(node.getUserObject());
configurable.addSupport(myModule, model, modelsProvider);
if (configurable instanceof OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper) {
selectedConfigurables.add(((OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper)configurable).getConfigurable());
}
}
}
for (FrameworkSupportCommunicator communicator : FrameworkSupportCommunicator.EP_NAME.getExtensions()) {
communicator.onFrameworkSupportAdded(myModule, model, selectedConfigurables, myFrameworkSupportModel);
}
}
finally {
model.commit();
}
for (FrameworkSupportInModuleConfigurable configurable : myConfigurables.values()) {
Disposer.dispose(configurable);
}
}
}.execute().throwException();
}
protected FrameworkSupportInModuleConfigurable selectFramework(@NotNull FacetTypeId<?> id) {
return selectFramework(FacetBasedFrameworkSupportProvider.getProviderId(id));
}
protected FrameworkSupportInModuleConfigurable selectFramework(@NotNull String id) {
final FrameworkSupportInModuleProvider provider = FrameworkSupportUtil.findProvider(id, FrameworkSupportUtil.getAllProviders());
if (provider != null) {
return selectFramework(provider);
}
fail("Framework provider with id='" + id + "' not found");
return null;
}
protected FrameworkSupportInModuleConfigurable selectFramework(@NotNull FrameworkSupportInModuleProvider provider) {
final FrameworkSupportInModuleConfigurable configurable = getOrCreateConfigurable(provider);
myNodes.get(provider.getFrameworkType()).setChecked(true);
configurable.onFrameworkSelectionChanged(true);
return configurable;
}
private FrameworkSupportInModuleConfigurable getOrCreateConfigurable(FrameworkSupportInModuleProvider provider) {
FrameworkSupportInModuleConfigurable configurable = myConfigurables.get(provider.getFrameworkType());
if (configurable == null) {
configurable = provider.createConfigurable(myFrameworkSupportModel);
myConfigurables.put(provider.getFrameworkType(), configurable);
}
return configurable;
}
protected void selectVersion(FrameworkType frameworkType, com.intellij.framework.FrameworkVersion version) {
myFrameworkSupportModel.setSelectedVersion(frameworkType.getId(), version);
}
@NotNull
protected <F extends Facet> F getFacet(FacetTypeId<F> id) {
final F facet = FacetManager.getInstance(myModule).getFacetByType(id);
assertNotNull(id + " facet not found", facet);
return facet;
}
protected VirtualFile getContentRoot() {
return ModuleRootManager.getInstance(myModule).getContentRoots()[0];
}
}