SLING-7193 MockServiceReference.compareTo needs to implement lowest-first ranking
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1811972 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java b/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
index 1c3033e..0340a55 100644
--- a/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
+++ b/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
@@ -22,6 +22,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
+import java.util.Comparator;
import java.util.Dictionary;
import java.util.List;
import java.util.Map;
@@ -283,7 +284,13 @@
@SuppressWarnings("unchecked")
@Override
public ServiceReference[] getServiceReferences(final String clazz, final String filter) throws InvalidSyntaxException {
- Set<ServiceReference> result = new TreeSet<ServiceReference>();
+ Set<ServiceReference> result = new TreeSet<ServiceReference>(new Comparator<ServiceReference>() {
+ @Override
+ public int compare(ServiceReference o1, ServiceReference o2) {
+ // reverse sort order to get highest ranking first
+ return o2.compareTo(o1);
+ }
+ });
for (MockServiceRegistration serviceRegistration : this.registeredServices) {
if (serviceRegistration.matches(clazz, filter)) {
result.add(serviceRegistration.getReference());
diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java b/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java
index 32ebd02..ed01402 100644
--- a/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java
+++ b/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java
@@ -45,7 +45,8 @@
private Comparable<Object> buildComparable() {
Map<String,Object> props = MapUtil.toMap(serviceRegistration.getProperties());
- return ServiceUtil.getComparableForServiceRanking(props, Order.DESCENDING);
+ // use ascending order as defined in ServiceReference#compareTo()
+ return ServiceUtil.getComparableForServiceRanking(props, Order.ASCENDING);
}
@Override
diff --git a/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java b/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java
index e60622b..2c83bcf 100644
--- a/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java
@@ -34,7 +34,9 @@
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
-/** Test the service-ranking based sorting of mock service references */
+/**
+ * Test the service-ranking based sorting of mock service references
+ */
public class MockServiceReferencesSortTest {
private BundleContext bundleContext;
@@ -57,7 +59,7 @@
registerStringServiceWithRanking("D", 1);
registerStringServiceWithRanking("E", 2);
- assertEquals("BCAED", getSortedServicesString());
+ assertEquals("DEACB", getSortedServicesString());
assertEquals("B", bundleContext.getService(bundleContext.getServiceReference(String.class)));
}
@@ -69,7 +71,7 @@
registerStringServiceWithoutRanking("D");
registerStringServiceWithoutRanking("E");
- assertEquals("ABCDE", getSortedServicesString());
+ assertEquals("EDCBA", getSortedServicesString());
assertEquals("A", bundleContext.getService(bundleContext.getServiceReference(String.class)));
}
@@ -81,7 +83,7 @@
registerStringServiceWithRanking("D", 10);
registerStringServiceWithoutRanking("E");
- assertEquals("DBACE", getSortedServicesString());
+ assertEquals("ECABD", getSortedServicesString());
assertEquals("D", bundleContext.getService(bundleContext.getServiceReference(String.class)));
}
@@ -104,7 +106,7 @@
try {
refs = bundleContext.getServiceReferences(String.class.getName(), null);
}
- catch(InvalidSyntaxException ise) {
+ catch (InvalidSyntaxException ise) {
fail("Unexpected InvalidSyntaxException");
}
assertNotNull("Expecting our service references", refs);
@@ -119,4 +121,4 @@
return sb.toString();
}
-}
\ No newline at end of file
+}