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
+}