| /* |
| * 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()); |
| } |
| } |