blob: a1b30ea85dbdc2dae964a2978bc76a9b6119def0 [file] [log] [blame]
package org.eclipse.equinox.p2.cudf.tests;
import java.util.Iterator;
import junit.framework.TestCase;
import org.eclipse.equinox.p2.cudf.Parser;
import org.eclipse.equinox.p2.cudf.metadata.*;
import org.eclipse.equinox.p2.cudf.solver.ProfileChangeRequest;
public class ParserTest extends TestCase {
private ProfileChangeRequest pcr = null;
protected void setUp() throws Exception {
pcr = new Parser().parse(this.getClass().getClassLoader().getResource("testData/parsingTest.cudf").openStream());
}
private InstallableUnit getIU(String id) {
Iterator it = pcr.getInitialState().iterator();
while (it.hasNext()) {
InstallableUnit iu = (InstallableUnit) it.next();
if (id.equals(iu.getId()))
return iu;
}
fail("Can't find: " + id);
return null;
}
public void testCheckPackageA() {
InstallableUnit iu = getIU("a");
assertRequirement(new RequiredCapability("b", new VersionRange(new Version(2), true, Version.maxVersion, true)), iu.getRequiredCapabilities());
assertRequirement(new RequiredCapability("c", VersionRange.emptyRange), iu.getRequiredCapabilities());
assertRequirement(new NotRequirement(new RequiredCapability("d", new VersionRange(new Version(2)))), iu.getRequiredCapabilities());
assertRequirement(new RequiredCapability("e", VersionRange.emptyRange), iu.getRequiredCapabilities());
assertRequirement(new NotRequirement(new RequiredCapability("f", VersionRange.emptyRange)), iu.getRequiredCapabilities());
}
public void testCheckPackageB() {
InstallableUnit iu = getIU("b");
assertRequirement(new RequiredCapability("a", new VersionRange(new Version(5), true, Version.maxVersion, true)), iu.getRequiredCapabilities());
IRequiredCapability[] reqs = iu.getRequiredCapabilities();
for (int i = 0; i < reqs.length; i++) {
if (reqs[i] instanceof ORRequirement) {
assertRequirement(new RequiredCapability("c", VersionRange.emptyRange), ((ORRequirement) reqs[i]).getRequirements());
assertRequirement(new RequiredCapability("d", new VersionRange(new Version(2), false, Version.maxVersion, true)), ((ORRequirement) reqs[i]).getRequirements());
}
}
assertRequirement(new RequiredCapability("f", new VersionRange(new Version(5), true, Version.maxVersion, true)), iu.getRequiredCapabilities());
assertRequirement(new NotRequirement(new RequiredCapability("g", VersionRange.emptyRange)), iu.getRequiredCapabilities());
}
public void testCheckPackageLibcbin() {
InstallableUnit iu = getIU("libc-bin");
assertEquals(true, iu.isSingleton());
assertRequirement(new NotRequirement(new RequiredCapability("libc0.1", new VersionRange(Version.emptyVersion, true, new Version(1), false))), iu.getRequiredCapabilities());
assertRequirement(new NotRequirement(new RequiredCapability("libc0.3", new VersionRange(Version.emptyVersion, true, new Version(1), false))), iu.getRequiredCapabilities());
assertRequirement(new NotRequirement(new RequiredCapability("libc6", new VersionRange(Version.emptyVersion, true, new Version(17), false))), iu.getRequiredCapabilities());
assertRequirement(new NotRequirement(new RequiredCapability("libc6.1", new VersionRange(Version.emptyVersion, true, new Version(1), false))), iu.getRequiredCapabilities());
}
public void testCheckLibx11data() {
InstallableUnit iu = getIU("libx11-data");
assertEquals(true, iu.isSingleton());
}
public void testlibtextCharwidthPerl() {
InstallableUnit iu = getIU("libtext-charwidth-perl");
assertEquals(true, iu.isSingleton());
assertRequirement(new RequiredCapability("libc6", new VersionRange(new Version(1), true, Version.maxVersion, true)), iu.getRequiredCapabilities());
assertRequirement(new RequiredCapability("perl-base", new VersionRange(new Version(12), true, Version.maxVersion, true)), iu.getRequiredCapabilities());
IRequiredCapability[] reqs = iu.getRequiredCapabilities();
for (int i = 0; i < reqs.length; i++) {
if (reqs[i] instanceof ORRequirement) {
assertRequirement(new RequiredCapability("perlapi-5.10.0--virtual", VersionRange.emptyRange), ((ORRequirement) reqs[i]).getRequirements());
assertRequirement(new RequiredCapability("perlapi-5.10.0", VersionRange.emptyRange), ((ORRequirement) reqs[i]).getRequirements());
}
}
assertNotRequirement(new NotRequirement(new RequiredCapability("libtext-charwidth-perl", VersionRange.emptyRange)), iu.getRequiredCapabilities());
}
public void testFoo() {
InstallableUnit iu = getIU("foo");
assertEquals(false, iu.isSingleton());
assertProvide(new ProvidedCapability("x", VersionRange.emptyRange), iu.getProvidedCapabilities());
assertRequirement(new NotRequirement(new RequiredCapability("x", VersionRange.emptyRange)), iu.getRequiredCapabilities());
}
private void assertNotRequirement(IRequiredCapability asserted, IRequiredCapability[] reqs) {
for (int i = 0; i < reqs.length; i++) {
if (asserted.getName().equals(reqs[i].getName())) {
if (asserted.getRange().equals(reqs[i].getRange()) && asserted.getArity() == reqs[i].getArity() && asserted.isNegation() == reqs[i].isNegation())
fail("Requirement not expected:" + asserted);
}
}
}
private void assertRequirement(IRequiredCapability asserted, IRequiredCapability[] reqs) {
boolean found = true;
for (int i = 0; i < reqs.length; i++) {
if (asserted.getName().equals(reqs[i].getName())) {
assertEquals(asserted.getRange(), reqs[i].getRange());
assertEquals(asserted.getArity(), reqs[i].getArity());
assertEquals(asserted.isNegation(), reqs[i].isNegation());
}
}
assertEquals(true, found);
}
private void assertProvide(IProvidedCapability asserted, IProvidedCapability[] caps) {
boolean found = true;
for (int i = 0; i < caps.length; i++) {
if (asserted.getName().equals(caps[i].getName())) {
assertEquals(asserted.getVersion(), caps[i].getVersion());
}
}
assertEquals(true, found);
}
public void testCheckPackageNegatedDepends() {
InstallableUnit iu = getIU("negatedDepends");
assertRequirement(new NotRequirement(new RequiredCapability("a", new VersionRange(new Version(2)))), iu.getRequiredCapabilities());
}
}