blob: d7972ddbb3fc26f837d4ccce3c9ded5920f5e6f8 [file] [log] [blame]
/*
* Copyright 2000-2010 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.
*/
/*
* User: anna
* Date: 28-Nov-2008
*/
package org.jetbrains.idea.eclipse;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.JavadocOrderRootType;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.util.ArrayUtil;
public class EclipseLibrariesModificationsTest extends EclipseVarsTest {
private void doTestCreate(final String[] classRoots, final String[] sourceRoots) throws Exception {
final Project project = getProject();
final String path = project.getBaseDir().getPath() + "/test";
final Module module = EclipseClasspathTest.setUpModule(path, project);
PsiTestUtil.addLibrary(module, "created", ModuleRootManager.getInstance(module).getContentRoots()[0].getParent().getPath(), classRoots,
sourceRoots);
EclipseClasspathTest.checkModule(project.getBaseDir().getPath() + "/expected", module);
}
public void testReplacedWithVariables() throws Exception {
doTestCreate(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
}
public void testCantReplaceWithVariables() throws Exception {
doTestCreate(new String[]{"/variableidea1/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
}
public void testReplacedWithVariablesNoSrcExistOnDisc() throws Exception {
doTestCreate(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
}
public void testReplacedWithVariablesCantReplaceSrc() throws Exception {
doTestCreate(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea1/test.jar!/"});
}
public void testReplacedWithVariablesNoSources() throws Exception {
doTestCreate(new String[]{"/variableidea/test.jar!/"}, new String[]{});
}
public void testReplacedExistingWithVariablesCantReplaceSrc() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea1/test.jar!/"}, ArrayUtil.EMPTY_STRING_ARRAY);
}
public void testReplacedExistingWithMultipleJavadocs() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"}, new String[]{},
new String[]{"/srcvariableidea1/test.jar!/", "/srcvariableidea11/test.jar!/"});
}
public void testLibAddLibSource() throws Exception {
doTestExisting(new String[]{"/jars/test.jar!/"},
new String[]{"/jars/test.jar!/", "/jars/test-2.jar!/"},
new String[]{});
}
public void testLibAddVarSource() throws Exception {
doTestExisting(new String[]{"/jars/test.jar!/"},
new String[]{"/jars/test.jar!/", "/srcvariableidea/test.jar!/"},
new String[]{});
}
public void testLibReplaceVarSource() throws Exception {
doTestExisting(new String[]{"/jars/test.jar!/"},
new String[]{"/srcvariableidea/test.jar!/"},
new String[]{});
}
public void testLibvarAddLibSource() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/jars/test.jar!/"},
new String[]{});
}
public void testLibvarAddVarSource() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/jars/test.jar!/", "/srcvariableidea/test.jar!/"},
new String[]{});
}
public void testLibvarReplaceLibSource() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/jars/test.jar!/"},
new String[]{});
}
public void testLibvarReplaceVarSource() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/srcvariableidea/test.jar!/"},
new String[]{});
}
public void testVarAddLibSource() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/jars/test.jar!/"},
new String[]{});
}
public void testVarAddJavadoc() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/variableidea/test.jar!/"},
new String[]{"/jars/test.jar!/"});
}
public void testVarAddVarSource() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/variableidea/test.jar!/", "/srcvariableidea/test.jar!/"},
new String[]{});
}
public void testVarReplaceLibSource() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/jars/test.jar!/"},
new String[]{});
}
public void testVarReplaceVarSource() throws Exception {
doTestExisting(new String[]{"/variableidea/test.jar!/"},
new String[]{"/srcvariableidea/test.jar!/"},
new String[]{});
}
private void doTestExisting(final String[] classRoots, final String[] sourceRoots, final String[] javadocs) throws Exception {
final Project project = getProject();
final String path = project.getBaseDir().getPath() + "/test";
final Module module = EclipseClasspathTest.setUpModule(path, project);
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
final ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel();
final String parentUrl = VirtualFileManager.constructUrl(JarFileSystem.PROTOCOL, model.getContentRoots()[0].getParent().getPath());
final Library library = model.getModuleLibraryTable().getLibraryByName("test.jar");
final Library.ModifiableModel libModifiableModel = library.getModifiableModel();
final String[] oldClsRoots = libModifiableModel.getUrls(OrderRootType.CLASSES);
for (String oldClsRoot : oldClsRoots) {
libModifiableModel.removeRoot(oldClsRoot, OrderRootType.CLASSES);
}
final String[] oldSrcRoots = libModifiableModel.getUrls(OrderRootType.SOURCES);
for (String oldSrcRoot : oldSrcRoots) {
libModifiableModel.removeRoot(oldSrcRoot, OrderRootType.SOURCES);
}
final String[] oldJdcRoots = libModifiableModel.getUrls(JavadocOrderRootType.getInstance());
for (String oldJavadocRoot : oldJdcRoots) {
libModifiableModel.removeRoot(oldJavadocRoot, JavadocOrderRootType.getInstance());
}
for (String classRoot : classRoots) {
libModifiableModel.addRoot(parentUrl + classRoot, OrderRootType.CLASSES);
}
for (String sourceRoot : sourceRoots) {
libModifiableModel.addRoot(parentUrl + sourceRoot, OrderRootType.SOURCES);
}
for (String javadocRoot : javadocs) {
libModifiableModel.addRoot(parentUrl + javadocRoot, JavadocOrderRootType.getInstance());
}
libModifiableModel.commit();
model.commit();
}
});
EclipseClasspathTest.checkModule(project.getBaseDir().getPath() + "/expected", module);
EclipseEmlTest.checkModule(project.getBaseDir().getPath() + "/expected", module);
}
@Override
protected String getRelativeTestPath() {
return "modification";
}
}