/******************************************************************************* * Copyright (c) 2008, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VMware Inc. - initial contribution *******************************************************************************/ package org.eclipse.virgo.kernel.userregion.internal.quasi; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.Map; import org.eclipse.osgi.service.resolver.BundleDescription; import org.eclipse.osgi.service.resolver.BundleSpecification; import org.eclipse.osgi.service.resolver.ExportPackageDescription; import org.eclipse.osgi.service.resolver.GenericDescription; import org.eclipse.osgi.service.resolver.GenericSpecification; import org.eclipse.osgi.service.resolver.HostSpecification; import org.eclipse.osgi.service.resolver.ImportPackageSpecification; import org.eclipse.osgi.service.resolver.NativeCodeSpecification; import org.eclipse.osgi.service.resolver.State; import org.junit.Test; import org.osgi.framework.Bundle; import org.osgi.framework.Version; import org.osgi.framework.wiring.BundleRequirement; import org.osgi.framework.wiring.BundleWiring; import org.osgi.framework.wiring.BundleCapability; import org.osgi.resource.Capability; import org.osgi.resource.Requirement; public class BundleDescriptionComparatorTests { private final BundleDescriptionComparator bundleDescriptionComparator = new BundleDescriptionComparator(); @Test public void matchingBundleSymbolicNameAndVersion() { StubBundleDescription bd1 = new StubBundleDescription("foo", new Version(1,2,3)); StubBundleDescription bd2 = new StubBundleDescription("foo", new Version(1,2,3)); assertEquals(0, bundleDescriptionComparator.compare(bd1, bd2)); } @Test public void differingBundleSymbolicName() { StubBundleDescription bd1 = new StubBundleDescription("foo", new Version(1,2,3)); StubBundleDescription bd2 = new StubBundleDescription("bar", new Version(1,2,3)); assertDifferent(bd1, bd2); } @Test public void differingVersion() { StubBundleDescription bd1 = new StubBundleDescription("foo", new Version(1,2,3)); StubBundleDescription bd2 = new StubBundleDescription("foo", new Version(2,3,4)); assertDifferent(bd1, bd2); } @Test public void differingBundleSymbolicNameAndVersion() { StubBundleDescription bd1 = new StubBundleDescription("foo", new Version(1,2,3)); StubBundleDescription bd2 = new StubBundleDescription("bar", new Version(2,3,4)); assertDifferent(bd1, bd2); } private void assertDifferent(StubBundleDescription bd1, StubBundleDescription bd2) { int bd1ToBd2Comparison = this.bundleDescriptionComparator.compare(bd1, bd2); assertTrue(bd1ToBd2Comparison != 0); int bd2ToBd1Comparison = this.bundleDescriptionComparator.compare(bd2, bd1); assertTrue(bd2ToBd1Comparison != 0); assertFalse(bd2ToBd1Comparison < 0 && bd1ToBd2Comparison < 0); } private static final class StubBundleDescription implements BundleDescription { private final String symbolicName; private final Version version; StubBundleDescription(String symbolicName, Version version) { this.symbolicName = symbolicName; this.version = version; } @Override public boolean attachFragments() { throw new UnsupportedOperationException(); } @Override public boolean dynamicFragments() { throw new UnsupportedOperationException(); } @Override public long getBundleId() { throw new UnsupportedOperationException(); } @Override public State getContainingState() { throw new UnsupportedOperationException(); } @Override public BundleDescription[] getDependents() { throw new UnsupportedOperationException(); } @Override public String[] getExecutionEnvironments() { throw new UnsupportedOperationException(); } @Override public ExportPackageDescription[] getExportPackages() { throw new UnsupportedOperationException(); } @Override public BundleDescription[] getFragments() { throw new UnsupportedOperationException(); } @Override public GenericDescription[] getGenericCapabilities() { throw new UnsupportedOperationException(); } @Override public GenericSpecification[] getGenericRequires() { throw new UnsupportedOperationException(); } @Override public HostSpecification getHost() { throw new UnsupportedOperationException(); } @Override public ImportPackageSpecification[] getImportPackages() { throw new UnsupportedOperationException(); } @Override public String getLocation() { throw new UnsupportedOperationException(); } @Override public NativeCodeSpecification getNativeCodeSpecification() { throw new UnsupportedOperationException(); } @Override public String getPlatformFilter() { throw new UnsupportedOperationException(); } @Override public BundleSpecification[] getRequiredBundles() { throw new UnsupportedOperationException(); } @Override public ExportPackageDescription[] getResolvedImports() { throw new UnsupportedOperationException(); } @Override public BundleDescription[] getResolvedRequires() { throw new UnsupportedOperationException(); } @Override public ExportPackageDescription[] getSelectedExports() { throw new UnsupportedOperationException(); } @Override public ExportPackageDescription[] getSubstitutedExports() { throw new UnsupportedOperationException(); } @Override public String getSymbolicName() { return this.symbolicName; } @Override public Object getUserObject() { throw new UnsupportedOperationException(); } @Override public boolean hasDynamicImports() { throw new UnsupportedOperationException(); } @Override public boolean isRemovalPending() { throw new UnsupportedOperationException(); } @Override public boolean isResolved() { throw new UnsupportedOperationException(); } @Override public boolean isSingleton() { throw new UnsupportedOperationException(); } @Override public void setUserObject(Object userObject) { throw new UnsupportedOperationException(); } @Override public String getName() { throw new UnsupportedOperationException(); } @Override public BundleDescription getSupplier() { throw new UnsupportedOperationException(); } @Override public Version getVersion() { return this.version; } @Override public Map<String, String> getDeclaredDirectives() { throw new UnsupportedOperationException(); } @Override public Map<String, Object> getDeclaredAttributes() { throw new UnsupportedOperationException(); } @Override public List<BundleCapability> getDeclaredCapabilities(String namespace) { throw new UnsupportedOperationException(); } @Override public int getTypes() { throw new UnsupportedOperationException(); } @Override public Bundle getBundle() { throw new UnsupportedOperationException(); } @Override public ImportPackageSpecification[] getAddedDynamicImportPackages() { throw new UnsupportedOperationException(); } @Override public GenericDescription[] getSelectedGenericCapabilities() { throw new UnsupportedOperationException(); } @Override public GenericDescription[] getResolvedGenericRequires() { throw new UnsupportedOperationException(); } @Override public BundleCapability getCapability() { throw new UnsupportedOperationException(); } @Override public Map<String, Object> getAttributes() { throw new UnsupportedOperationException(); } @Override public List<BundleRequirement> getDeclaredRequirements(String namespace) { throw new UnsupportedOperationException(); } @Override public BundleWiring getWiring() { throw new UnsupportedOperationException(); } @Override public List<Capability> getCapabilities(String arg0) { return null; } @Override public List<Requirement> getRequirements(String arg0) { return null; } } }