SLING-7550 Return services even when class param is null in
MockBundleContext.getServiceReferences api
diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceRegistration.java b/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceRegistration.java
index 7a2e87d..095d3dc 100644
--- a/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceRegistration.java
+++ b/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceRegistration.java
@@ -93,7 +93,7 @@
boolean matches(final String clazz, final String filter) throws InvalidSyntaxException {
// ignore filter for now
- return this.clazzes.contains(clazz)
+ return (clazz == null || this.clazzes.contains(clazz))
&& (filter == null || new FilterImpl(filter).match(properties));
}
diff --git a/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java b/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java
index 1760ced..e031f72 100644
--- a/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java
@@ -297,6 +297,18 @@
bundleContext.ungetService(ref);
}
+
+ @Test
+ public void testGetServicesWithNoClassOnlyFilter() throws InvalidSyntaxException {
+ bundleContext.registerService(String.class, "service1", testProperty());
+ bundleContext.registerService(Long.class, new Long(2), testProperty());
+ bundleContext.registerService(Integer.class, new Integer(9), testProperty());
+
+ // should return service with lowest service id = which was registered first
+ ServiceReference[] refs = bundleContext.getServiceReferences((String)null, "(prop1=value1)");
+ assertNotNull(refs);
+ assertEquals(3, refs.length);
+ }
private static Dictionary<String, Object> ranking(final Integer serviceRanking) {
Dictionary<String, Object> props = new Hashtable<String, Object>();
@@ -305,5 +317,11 @@
}
return props;
}
+
+ private static Dictionary<String, Object> testProperty() {
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ props.put("prop1", "value1");
+ return props;
+ }
}