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"));
}
}