/* * Copyright 2014 Bernd Vogt and others. * * 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.sourcepit.b2.internal.maven.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.sourcepit.b2.internal.maven.util.TychoXpp3Utils.addExtraRequirements; import java.util.ArrayList; import java.util.List; import org.apache.maven.model.Dependency; import org.apache.maven.model.Plugin; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.junit.Test; import org.sourcepit.common.maven.util.Xpp3Utils; public class TychoXpp3UtilsTest { @Test public void testAddExtraRequirements() { Plugin plugin = new Plugin(); // test empty requirements List<Dependency> requirements = new ArrayList<Dependency>(); addExtraRequirements(plugin, requirements); assertNull(plugin.getConfiguration()); // test simple requirement requirements.add(createRequirement("org.sourcepit.foo", "1.0.0", "eclipse-plugin")); addExtraRequirements(plugin, requirements); Xpp3Dom requirementsNode = getRequirementsNode(plugin); assertEquals(1, requirementsNode.getChildCount()); Xpp3Dom requirementNode = requirementsNode.getChild(0); assertEquals("requirement", requirementNode.getName()); Dependency requirement = TychoXpp3Utils.toRequirement(requirementNode); assertEquals("org.sourcepit.foo", requirement.getArtifactId()); assertEquals("1.0.0", requirement.getVersion()); assertEquals("eclipse-plugin", requirement.getType()); // test equal requirements requirements.add(createRequirement("org.sourcepit.foo", "1.0.0", "eclipse-plugin")); addExtraRequirements(plugin, requirements); requirementsNode = getRequirementsNode(plugin); assertEquals(1, requirementsNode.getChildCount()); requirementNode = requirementsNode.getChild(0); assertEquals("requirement", requirementNode.getName()); requirement = TychoXpp3Utils.toRequirement(requirementNode); assertEquals("org.sourcepit.foo", requirement.getArtifactId()); assertEquals("1.0.0", requirement.getVersion()); assertEquals("eclipse-plugin", requirement.getType()); // test requirement with conflicting version. expected existing survives requirements.clear(); requirements.add(createRequirement("org.sourcepit.foo", "2.0.0", "eclipse-plugin")); addExtraRequirements(plugin, requirements); requirementsNode = getRequirementsNode(plugin); assertEquals(1, requirementsNode.getChildCount()); requirementNode = requirementsNode.getChild(0); assertEquals("requirement", requirementNode.getName()); requirement = TychoXpp3Utils.toRequirement(requirementNode); assertEquals("org.sourcepit.foo", requirement.getArtifactId()); assertEquals("1.0.0", requirement.getVersion()); assertEquals("eclipse-plugin", requirement.getType()); requirements.clear(); requirements.add(createRequirement("org.sourcepit.foo", "1.0.0", "eclipse-feature")); addExtraRequirements(plugin, requirements); requirementsNode = getRequirementsNode(plugin); assertEquals(2, requirementsNode.getChildCount()); requirementNode = requirementsNode.getChild(0); assertEquals("requirement", requirementNode.getName()); requirement = TychoXpp3Utils.toRequirement(requirementNode); assertEquals("org.sourcepit.foo", requirement.getArtifactId()); assertEquals("1.0.0", requirement.getVersion()); assertEquals("eclipse-plugin", requirement.getType()); requirementNode = requirementsNode.getChild(1); assertEquals("requirement", requirementNode.getName()); requirement = TychoXpp3Utils.toRequirement(requirementNode); assertEquals("org.sourcepit.foo", requirement.getArtifactId()); assertEquals("1.0.0", requirement.getVersion()); assertEquals("eclipse-feature", requirement.getType()); } private static Xpp3Dom getRequirementsNode(Plugin plugin) { Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration(); assertNotNull(configuration); assertEquals(1, configuration.getChildCount()); Xpp3Dom resolutionNode = configuration.getChild(0); assertEquals("dependency-resolution", resolutionNode.getName()); assertEquals(1, resolutionNode.getChildCount()); Xpp3Dom requirementsNode = resolutionNode.getChild(0); assertEquals("extraRequirements", requirementsNode.getName()); return requirementsNode; } private static Dependency createRequirement(String id, String version, String type) { final Dependency dependency = new Dependency(); dependency.setArtifactId(id); dependency.setVersion(version); dependency.setType(type); return dependency; } @Test public void testToRequirement() { Xpp3Dom requirmentNode = new Xpp3Dom("requirement"); Dependency requirement = TychoXpp3Utils.toRequirement(requirmentNode); assertNotNull(requirement); assertNull(requirement.getGroupId()); assertNull(requirement.getArtifactId()); assertNull(requirement.getVersion()); Xpp3Utils.addValueNode(requirmentNode, "id", "org.sourcepit.foo"); Xpp3Utils.addValueNode(requirmentNode, "versionRange", "1.0.0"); Xpp3Utils.addValueNode(requirmentNode, "type", "eclipse-feature"); requirement = TychoXpp3Utils.toRequirement(requirmentNode); assertNotNull(requirement); assertNull(requirement.getGroupId()); assertEquals("org.sourcepit.foo", requirement.getArtifactId()); assertEquals("1.0.0", requirement.getVersion()); assertEquals("eclipse-feature", requirement.getType()); } }