package org.springframework.roo.project; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.springframework.roo.project.DependencyScope.PROVIDED; import static org.springframework.roo.project.DependencyType.ZIP; import org.junit.Test; import org.w3c.dom.Element; /** * Unit test of the {@link Dependency} class * * @author Andrew Swan * @since 1.2.0 */ public class DependencyTest extends XmlTestCase { private static final String DEPENDENCY_ARTIFACT_ID = "foo-api"; private static final String DEPENDENCY_GROUP_ID = "com.bar"; private static final String DEPENDENCY_VERSION = "6.6.6"; private static final String EXCLUSION_ARTIFACT_ID = "ugly-api"; private static final String EXCLUSION_GROUP_ID = "com.ugliness"; private static final String EXPECTED_ELEMENT_FOR_MINIMAL_DEPENDENCY = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<dependency>\n" + " <groupId>" + DEPENDENCY_GROUP_ID + "</groupId>\n" + " <artifactId>" + DEPENDENCY_ARTIFACT_ID + "</artifactId>\n" + " <version>" + DEPENDENCY_VERSION + "</version>\n" + "</dependency>"; @Test public void testAddExclusion() { // Set up final Dependency dependency = new Dependency(DEPENDENCY_GROUP_ID, DEPENDENCY_ARTIFACT_ID, DEPENDENCY_VERSION); final int originalExclusionCount = dependency.getExclusions().size(); // Invoke dependency.addExclusion(EXCLUSION_GROUP_ID, EXCLUSION_ARTIFACT_ID); // Check assertEquals(originalExclusionCount + 1, dependency.getExclusions().size()); } @Test public void testConstructFromGav() { // Set up final GAV mockGav = mock(GAV.class); when(mockGav.getGroupId()).thenReturn(DEPENDENCY_GROUP_ID); when(mockGav.getArtifactId()).thenReturn(DEPENDENCY_ARTIFACT_ID); when(mockGav.getVersion()).thenReturn(DEPENDENCY_VERSION); // Invoke final Dependency dependency = new Dependency(mockGav, DependencyType.ZIP, DependencyScope.SYSTEM); // Check assertEquals(DEPENDENCY_GROUP_ID, dependency.getGroupId()); assertEquals(DEPENDENCY_ARTIFACT_ID, dependency.getArtifactId()); assertEquals(DEPENDENCY_VERSION, dependency.getVersion()); assertEquals(DependencyScope.SYSTEM, dependency.getScope()); assertEquals(DependencyType.ZIP, dependency.getType()); } @Test public void testConstructWithCustomTypeAndScope() { // Set up final Dependency dependency = new Dependency(DEPENDENCY_GROUP_ID, DEPENDENCY_ARTIFACT_ID, DEPENDENCY_VERSION, ZIP, PROVIDED); // Invoke and check assertEquals(ZIP, dependency.getType()); assertEquals(PROVIDED, dependency.getScope()); } @Test public void testDependenciesWithDifferentVersionsAreNotEqual() { // Set up final Dependency dependency1 = new Dependency(DEPENDENCY_GROUP_ID, DEPENDENCY_ARTIFACT_ID, DEPENDENCY_VERSION); final Dependency dependency2 = new Dependency(dependency1.getGroupId(), dependency1.getArtifactId(), dependency1.getVersion() + "x"); // Invoke final boolean equal = dependency1.equals(dependency2); // Check assertFalse(equal); } @Test public void testDependenciesWithDifferentVersionsHaveSameCoordinates() { // Set up final Dependency dependency1 = new Dependency(DEPENDENCY_GROUP_ID, DEPENDENCY_ARTIFACT_ID, DEPENDENCY_VERSION); final Dependency dependency2 = new Dependency(dependency1.getGroupId(), dependency1.getArtifactId(), dependency1.getVersion() + "x"); // Invoke final boolean same = dependency1.hasSameCoordinates(dependency2); // Check assertTrue(same); } @Test public void testDependenciesWithSameVersionAreEqual() { // Set up final Dependency dependency1 = new Dependency(DEPENDENCY_GROUP_ID, DEPENDENCY_ARTIFACT_ID, DEPENDENCY_VERSION); final Dependency dependency2 = new Dependency(dependency1.getGroupId(), dependency1.getArtifactId(), dependency1.getVersion()); // Invoke final boolean equal = dependency1.equals(dependency2); // Check assertTrue(equal); } @Test public void testDependenciesWithSameVersionHaveSameCoordinates() { // Set up final Dependency dependency1 = new Dependency(DEPENDENCY_GROUP_ID, DEPENDENCY_ARTIFACT_ID, DEPENDENCY_VERSION); final Dependency dependency2 = new Dependency(dependency1.getGroupId(), dependency1.getArtifactId(), dependency1.getVersion()); // Invoke final boolean same = dependency1.hasSameCoordinates(dependency2); // Check assertTrue(same); } @Test public void testEarIsHigherThanJar() { assertTrue(Dependency.isHigherLevel("ear", "jar")); } @Test public void testEarIsHigherThanWar() { assertTrue(Dependency.isHigherLevel("ear", "war")); } @Test public void testGetElementForMinimalDependency() { // Set up final Dependency dependency = new Dependency(DEPENDENCY_GROUP_ID, DEPENDENCY_ARTIFACT_ID, DEPENDENCY_VERSION); // Invoke final Element element = dependency.getElement(DOCUMENT_BUILDER.newDocument()); // Check assertXmlEquals(EXPECTED_ELEMENT_FOR_MINIMAL_DEPENDENCY, element); } @Test public void testJarIsNotHigherThanItself() { assertFalse(Dependency.isHigherLevel("jar", "jar")); } @Test public void testJarIsNotHigherThanWar() { assertFalse(Dependency.isHigherLevel("jar", "war")); } @Test public void testNullDependencyDoesNotHaveSameCoordinates() { // Set up final Dependency dependency = new Dependency(DEPENDENCY_GROUP_ID, DEPENDENCY_ARTIFACT_ID, DEPENDENCY_VERSION); // Invoke final boolean same = dependency.hasSameCoordinates(null); // Check assertFalse(same); } @Test public void testPomIsHigherThanWar() { assertTrue(Dependency.isHigherLevel("ear", "war")); } @Test public void testWarIsHigherThanJar() { assertTrue(Dependency.isHigherLevel("war", "jar")); } }