blob: 438090741fda01785c4bfe195ae0c36a9f0c9f6b [file] [log] [blame]
/*
* Copyright 2000-2012 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.jps.model;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.ContainerUtilRt;
import org.jetbrains.jps.model.java.*;
import org.jetbrains.jps.model.library.JpsLibrary;
import org.jetbrains.jps.model.library.sdk.JpsSdk;
import org.jetbrains.jps.model.module.*;
import java.util.List;
/**
* @author nik
*/
public class JpsModuleTest extends JpsModelTestCase {
public void testAddSourceRoot() {
final JpsModule module = myProject.addModule("m", JpsJavaModuleType.INSTANCE);
JavaSourceRootProperties properties = JpsJavaExtensionService.getInstance().createSourceRootProperties("com.xxx");
final JpsModuleSourceRoot sourceRoot = module.addSourceRoot("file://url", JavaSourceRootType.SOURCE, properties);
assertSameElements(myDispatcher.retrieveAdded(JpsModule.class), module);
assertSameElements(myDispatcher.retrieveAdded(JpsModuleSourceRoot.class), sourceRoot);
final JpsModuleSourceRoot root = assertOneElement(module.getSourceRoots());
assertEquals("file://url", root.getUrl());
assertSameElements(ContainerUtilRt.newArrayList(module.getSourceRoots(JavaSourceRootType.SOURCE)), root);
assertEmpty(ContainerUtil.newArrayList(module.getSourceRoots(JavaSourceRootType.TEST_SOURCE)));
JpsTypedModuleSourceRoot<JavaSourceRootProperties> typedRoot = root.asTyped(JavaSourceRootType.SOURCE);
assertNotNull(typedRoot);
assertEquals("com.xxx", typedRoot.getProperties().getPackagePrefix());
}
public void testGetModulesOfType() {
JpsProject project = myProject;
JpsModule module = project.addModule("m", JpsJavaModuleType.INSTANCE);
Iterable<JpsTypedModule<JpsDummyElement>> modules = project.getModules(JpsJavaModuleType.INSTANCE);
assertSameElements(ContainerUtil.newArrayList(modules), module);
}
public void testModifiableModel() {
final JpsModule module = myProject.addModule("m", JpsJavaModuleType.INSTANCE);
final JpsModuleSourceRoot root0 = module.addSourceRoot("url1", JavaSourceRootType.SOURCE);
myDispatcher.clear();
final JpsModel modifiableModel = myModel.createModifiableModel(new TestJpsEventDispatcher());
final JpsModule modifiableModule = assertOneElement(modifiableModel.getProject().getModules());
modifiableModule.addSourceRoot("url2", JavaSourceRootType.TEST_SOURCE);
modifiableModel.commit();
assertEmpty(myDispatcher.retrieveAdded(JpsModule.class));
assertEmpty(myDispatcher.retrieveRemoved(JpsModule.class));
final List<? extends JpsModuleSourceRoot> roots = module.getSourceRoots();
assertEquals(2, roots.size());
assertSame(root0, roots.get(0));
final JpsModuleSourceRoot root1 = roots.get(1);
assertEquals("url2", root1.getUrl());
assertOrderedEquals(myDispatcher.retrieveAdded(JpsModuleSourceRoot.class), root1);
assertEmpty(myDispatcher.retrieveChanged(JpsModuleSourceRoot.class));
}
public void testAddDependency() {
final JpsModule module = myProject.addModule("m", JpsJavaModuleType.INSTANCE);
final JpsLibrary library = myProject.addLibrary("l", JpsJavaLibraryType.INSTANCE);
final JpsModule dep = myProject.addModule("dep", JpsJavaModuleType.INSTANCE);
module.getDependenciesList().addLibraryDependency(library);
module.getDependenciesList().addModuleDependency(dep);
final List<? extends JpsDependencyElement> dependencies = module.getDependenciesList().getDependencies();
assertEquals(3, dependencies.size());
assertInstanceOf(dependencies.get(0), JpsModuleSourceDependency.class);
assertSame(library, assertInstanceOf(dependencies.get(1), JpsLibraryDependency.class).getLibrary());
assertSame(dep, assertInstanceOf(dependencies.get(2), JpsModuleDependency.class).getModule());
}
public void testChangeElementInModifiableModel() {
final JpsModule module = myProject.addModule("m", JpsJavaModuleType.INSTANCE);
final JpsModule dep = myProject.addModule("dep", JpsJavaModuleType.INSTANCE);
final JpsLibrary library = myProject.addLibrary("l", JpsJavaLibraryType.INSTANCE);
module.getDependenciesList().addLibraryDependency(library);
myDispatcher.clear();
final JpsModel modifiableModel = myModel.createModifiableModel(new TestJpsEventDispatcher());
final JpsModule m = modifiableModel.getProject().getModules().get(0);
assertEquals("m", m.getName());
m.getDependenciesList().getDependencies().get(1).remove();
m.getDependenciesList().addModuleDependency(dep);
modifiableModel.commit();
assertOneElement(myDispatcher.retrieveRemoved(JpsLibraryDependency.class));
assertSame(dep, assertOneElement(myDispatcher.retrieveAdded(JpsModuleDependency.class)).getModuleReference().resolve());
List<JpsDependencyElement> dependencies = module.getDependenciesList().getDependencies();
assertEquals(2, dependencies.size());
assertSame(dep, assertInstanceOf(dependencies.get(1), JpsModuleDependency.class).getModuleReference().resolve());
}
public void testCreateReferenceByModule() {
final JpsModule module = myProject.addModule("m", JpsJavaModuleType.INSTANCE);
final JpsModuleReference reference = module.createReference().asExternal(myModel);
assertEquals("m", reference.getModuleName());
assertSame(module, reference.resolve());
}
public void testCreateReferenceByName() {
final JpsModuleReference reference = JpsElementFactory.getInstance().createModuleReference("m").asExternal(myModel);
assertEquals("m", reference.getModuleName());
assertNull(reference.resolve());
final JpsModule module = myProject.addModule("m", JpsJavaModuleType.INSTANCE);
assertSame(module, reference.resolve());
}
public void testSdkDependency() {
JpsSdk<JpsDummyElement> sdk = myModel.getGlobal().addSdk("sdk", null, null, JpsJavaSdkType.INSTANCE).getProperties();
final JpsModule module = myProject.addModule("m", JpsJavaModuleType.INSTANCE);
module.getSdkReferencesTable().setSdkReference(JpsJavaSdkType.INSTANCE, sdk.createReference());
module.getDependenciesList().addSdkDependency(JpsJavaSdkType.INSTANCE);
List<JpsDependencyElement> dependencies = module.getDependenciesList().getDependencies();
assertEquals(2, dependencies.size());
final JpsSdkDependency dependency = assertInstanceOf(dependencies.get(1), JpsSdkDependency.class);
assertSame(sdk.getParent(), dependency.resolveSdk());
}
}