package org.codehaus.mojo.jaxb2.shared.version;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Collections;
import java.util.List;
import java.util.SortedMap;
/**
* @author <a href="mailto:lj@jguru.se">Lennart Jörelid</a>
*/
public class DependencyFileParserTest {
// Internal state
private URL urlToTestJar;
private static final String DEPS1_PROPERTYFILE = "/testdata/shared/deps1.properties";
private ClassLoader originalThreadContextClassLoader;
@Before
public void setupSharedState() throws Exception {
// Stash the original ClassLoader
originalThreadContextClassLoader = Thread.currentThread().getContextClassLoader();
// Add the local test JAR to the ClassLoader path
final String jarPath = "testdata/shared/nazgul-tools-validation-aspect-4.0.1.jar";
final URL extraURL = getClass().getClassLoader().getResource(jarPath);
Assert.assertNotNull("No resource found for path [" + jarPath + "]", extraURL);
final URLClassLoader decoratedClassLoader = new URLClassLoader(
new URL[]{extraURL},
originalThreadContextClassLoader);
Assert.assertNotNull("Could not create decorated ClassLoader", decoratedClassLoader);
Thread.currentThread().setContextClassLoader(decoratedClassLoader);
// Assert that the decorated ClassLoader can load resource within the extraURL JAR.
final String internalResourcePath = "META-INF/maven/se.jguru.nazgul.tools.validation.aspect/"
+ "nazgul-tools-validation-aspect/pom.properties";
final List<URL> resourceList = Collections.list(decoratedClassLoader.getResources(internalResourcePath));
Assert.assertNotNull(resourceList);
Assert.assertNotEquals(0, resourceList.size());
for (URL current : resourceList) {
if (current.getPath().contains("testdata")) {
urlToTestJar = current;
break;
}
}
Assert.assertNotNull(
"Expected resource not found for internal resource path [" + internalResourcePath + "] ",
urlToTestJar);
}
@After
public void teardownSharedState() {
// Restore the original ClassLoader
Thread.currentThread().setContextClassLoader(originalThreadContextClassLoader);
}
@Test
public void validateParsingDependencyPropertiesFile() {
// Assemble
final URL depsPropResource = getClass().getResource(DEPS1_PROPERTYFILE);
// Act
final SortedMap<String, String> versionMap = DependsFileParser.getVersionMap(depsPropResource);
// Assert
Assert.assertEquals("Wed Nov 19 20:11:15 CET 2014", versionMap.get(DependsFileParser.BUILDTIME_KEY));
Assert.assertEquals("compile", versionMap.get("javax.xml.bind/jaxb-api/scope"));
Assert.assertEquals("jar", versionMap.get("javax.xml.bind/jaxb-api/type"));
Assert.assertEquals("2.2.11", versionMap.get("javax.xml.bind/jaxb-api/version"));
/*
for(Map.Entry<String, String> current : versionMap.entrySet()) {
System.out.println(" [" + current.getKey() + "]: " + current.getValue());
}
*/
}
@Test
public void validateCreatingDependencyInformationMapFromDependencyPropertiesFile() {
// Assemble
final String jaxbApiKey = "javax.xml.bind/jaxb-api";
final URL depsPropResource = getClass().getResource(DEPS1_PROPERTYFILE);
// Act
final SortedMap<String, String> versionMap = DependsFileParser.getVersionMap(depsPropResource);
final SortedMap<String, DependencyInfo> diMap = DependsFileParser.createDependencyInfoMap(versionMap);
// Assert
final DependencyInfo dependencyInfo = diMap.get(jaxbApiKey);
Assert.assertNotNull(dependencyInfo);
Assert.assertEquals("javax.xml.bind", dependencyInfo.getGroupId());
Assert.assertEquals("jaxb-api", dependencyInfo.getArtifactId());
Assert.assertEquals("2.2.11", dependencyInfo.getVersion());
Assert.assertEquals("jar", dependencyInfo.getType());
Assert.assertEquals("compile", dependencyInfo.getScope());
/*
for(Map.Entry<String, DependencyInfo> current : diMap.entrySet()) {
System.out.println(" [" + current.getKey() + "]: " + current.getValue());
}
*/
}
@Test
public void validateParsingDependencyInformationPackagedInJarFileInClassPath() {
// Assemble
final String artifactId = "nazgul-tools-validation-aspect";
final String groupId = "se.jguru.nazgul.tools.validation.aspect";
final String slf4jApiKey = "org.slf4j/slf4j-api";
// Act
final SortedMap<String, String> versionMap = DependsFileParser.getVersionMap(artifactId);
final SortedMap<String, DependencyInfo> diMap = DependsFileParser.createDependencyInfoMap(versionMap);
// Assert
Assert.assertEquals("Mon Oct 06 07:51:23 CEST 2014", versionMap.get(DependsFileParser.BUILDTIME_KEY));
Assert.assertEquals(groupId, versionMap.get(DependsFileParser.OWN_GROUPID_KEY));
Assert.assertEquals(artifactId, versionMap.get(DependsFileParser.OWN_ARTIFACTID_KEY));
Assert.assertEquals("4.0.1", versionMap.get(DependsFileParser.OWN_VERSION_KEY));
final DependencyInfo dependencyInfo = diMap.get(slf4jApiKey);
Assert.assertNotNull(dependencyInfo);
Assert.assertEquals("org.slf4j", dependencyInfo.getGroupId());
Assert.assertEquals("slf4j-api", dependencyInfo.getArtifactId());
Assert.assertEquals("1.7.7", dependencyInfo.getVersion());
Assert.assertEquals("jar", dependencyInfo.getType());
Assert.assertEquals("compile", dependencyInfo.getScope());
/*
for(Map.Entry<String, DependencyInfo> current : diMap.entrySet()) {
System.out.println(" [" + current.getKey() + "]: " + current.getValue());
}
*/
}
@Test(expected = IllegalArgumentException.class)
public void validateExceptionOnAttemptingToParseIncorrectlyFormedPropertiesFile() {
// Assemble
final String resourcePath = "testdata/shared/not_a_dependency.properties";
final URL incorrectResource = Thread.currentThread().getContextClassLoader().getResource(resourcePath);
// Act & Assert
DependsFileParser.getVersionMap(incorrectResource);
}
}