package org.handwerkszeug.mvnhack.repository.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import org.handwerkszeug.common.util.Streams; import org.handwerkszeug.common.util.UrlUtil; import org.handwerkszeug.common.util.XMLEventParser; import org.handwerkszeug.common.util.XMLEventParser.DefaultHandler; import org.handwerkszeug.common.util.XMLEventParser.Handler; import org.handwerkszeug.mvnhack.repository.Artifact; import org.handwerkszeug.mvnhack.repository.impl.DefaultArtifact; import org.handwerkszeug.mvnhack.repository.impl.DefaultContext; import org.handwerkszeug.mvnhack.repository.impl.PropertiesConfiguration; import org.handwerkszeug.mvnhack.repository.impl.StAXArtifactBuilder; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class ArtifactBuilderTest { InputStream in; @BeforeClass public static void setUpClass() { UrlUtil.setDefaultUseCaches(); } @Before public void setUp() throws Exception { ClassLoader cl = Thread.currentThread().getContextClassLoader(); String pom = getClass().getName().replace('.', '/') + ".pom"; in = cl.getResourceAsStream(pom); } @After public void tearDown() { Streams.close(in); } @Test public void testBuild() { assertNotNull(in); StAXArtifactBuilder builder = new StAXArtifactBuilder(); Artifact a = builder.build(new DefaultContext( new PropertiesConfiguration()), in); assertNotNull(a); assertEquals("groupId", a.getGroupId()); assertEquals("artifactId", a.getArtifactId()); assertEquals("1.0.0", a.getVersion()); Set<Artifact> set = a.getDependencies(); assertEquals(2, set.size()); Artifact[] ary = set.toArray(new Artifact[set.size()]); assertEquals("dependencyGroupId", ary[0].getGroupId()); assertEquals("dependencyArtifactId", ary[0].getArtifactId()); assertEquals("2.0.0", ary[0].getVersion()); assertEquals("dependencyGroupId2", ary[1].getGroupId()); assertEquals("dependencyArtifactId2", ary[1].getArtifactId()); assertEquals("3.0.0", ary[1].getVersion()); } @Test public void testArtifactBuild() throws Exception { DefaultArtifact a = new DefaultArtifact(); StAXArtifactBuilder builder = new StAXArtifactBuilder(); XMLEventParser parser = new XMLEventParser(in); builder.addArtifactParseHandlers(parser, a); parser.add(new DefaultHandler("project")); parser.parse(); assertEquals("groupId", a.getGroupId()); assertEquals("artifactId", a.getArtifactId()); assertEquals("1.0.0", a.getVersion()); } @Test public void testReconcile() throws Exception { DefaultArtifact a = new DefaultArtifact(); a.setGroupId("groupId"); a.setArtifactId("artifactId"); a.setVersion("1.0.0"); Map<String, String> m = new HashMap<String, String>(); StAXArtifactBuilder builder = new StAXArtifactBuilder(); builder.reconcile(a, a, m); assertEquals("groupId", a.getGroupId()); assertEquals("artifactId", a.getArtifactId()); assertEquals("1.0.0", a.getVersion()); } @Test public void testSkip() throws Exception { XMLEventParser parser = new XMLEventParser(in); parser.add(new DefaultHandler("project")); final int[] groupIdTimes = { 0 }; parser.add(new Handler() { @Override public String getTagName() { return "groupId"; } @Override public void handle(XMLStreamReader reader) throws XMLStreamException { assertEquals("groupId", reader.getElementText()); groupIdTimes[0]++; } }); final int[] dependenciesTimes = { 0 }; parser.add(new Handler() { @Override public String getTagName() { return "dependencies"; } @Override public void handle(XMLStreamReader reader) { dependenciesTimes[0]++; } }); parser.parse(); assertEquals(1, groupIdTimes[0]); assertEquals(1, dependenciesTimes[0]); } }