Extended the test case.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1022565 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java b/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java
index af70bb9..0da9b37 100644
--- a/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java
+++ b/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java
@@ -33,10 +33,10 @@
 
 import junit.framework.Assert;
 
+import org.apache.felix.dm.Component;
 import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.ResourceHandler;
 import org.apache.felix.dm.ResourceUtil;
-import org.apache.felix.dm.Component;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Option;
@@ -70,14 +70,15 @@
             .setImplementation(c)
             .add(m.createResourceDependency()
                 .setFilter("(&(path=/path/to/*.txt)(host=localhost))")
-                .setCallbacks("add", "remove"));
+                .setCallbacks("add", "change", "remove"));
         Component dynamicProxyConsumer = m.createComponent()
             .setFactory(new ResourceConsumerFactory(e), "create")
             .add(m.createResourceDependency()
                     .setFilter("(path=*.doc)")
                     .setCallbacks("add", null)); 
+        ResourceProvider provider = new ResourceProvider(e);
         Component resourceProvider = m.createComponent()
-            .setImplementation(new ResourceProvider(e))
+            .setImplementation(provider)
             .add(m.createServiceDependency()
                 .setService(ResourceHandler.class)
                 .setCallbacks("add", "remove"));
@@ -97,6 +98,13 @@
         // ensure the resource was injected properly
         e.waitForStep(4, 5000);
         
+        // now change a resource and see if it gets propagated to the consumer
+        provider.changeResource();
+        
+        // wait for change callback
+        e.waitForStep(5, 5000);
+        e.step(6);
+        
         // cleanup
         m.remove(dynamicProxyConsumer);
         m.remove(resourceProvider);
@@ -118,6 +126,9 @@
             m_counter++;
             m_ensure.step();
         }
+        public void change(URL resource) {
+            m_ensure.step();
+        }
         public void remove(URL resource) {
             m_counter--;
         }
@@ -129,7 +140,7 @@
     static class ResourceProvider {
         private volatile BundleContext m_context;
         private final Ensure m_ensure;
-        private final Map m_handlers = new HashMap();
+        private final Map<ResourceHandler, Filter> m_handlers = new HashMap<ResourceHandler, Filter>();
         private URL[] m_resources;
         
         public ResourceProvider(Ensure ensure) {
@@ -159,13 +170,26 @@
             synchronized (m_handlers) {
                 m_handlers.put(handler, filter);
             }
+            for (int i = 0; i < m_resources.length; i++) {
+                if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+                    handler.added(m_resources[i]);
+                }
+            }
+        }
+
+        public void changeResource() {
+            Filter filter;
+            for (Entry<ResourceHandler, Filter> entry : m_handlers.entrySet()) {
                 for (int i = 0; i < m_resources.length; i++) {
-                    if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
-                        handler.added(m_resources[i]);
+                    if (i == 0) {
+                        if (entry.getValue().match(ResourceUtil.createProperties(m_resources[i]))) {
+                            entry.getKey().changed(m_resources[i]); 
+                        }
                     }
                 }
             }
-
+        }
+        
         public void remove(ServiceReference ref, ResourceHandler handler) {
             Filter filter;
             synchronized (m_handlers) {
@@ -175,12 +199,12 @@
         }
 
         private void removeResources(ResourceHandler handler, Filter filter) {
-                for (int i = 0; i < m_resources.length; i++) {
-                    if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
-                        handler.removed(m_resources[i]);
-                    }
+            for (int i = 0; i < m_resources.length; i++) {
+                if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+                    handler.removed(m_resources[i]);
                 }
             }
+        }
 
         public void destroy() {
             Entry[] handlers;
@@ -190,8 +214,6 @@
             for (int i = 0; i < handlers.length; i++) {
                 removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
             }
-            
-            System.out.println("DESTROY..." + m_handlers.size());
         }
     }
     
@@ -201,7 +223,6 @@
             m_ensure = ensure;
         }
         public Object create() {
-            System.out.println("create");
             ResourceConsumer resourceConsumer = new ResourceConsumer(m_ensure);
             // create a dynamic proxy for the ResourceProvider
             return Proxy.newProxyInstance(resourceConsumer.getClass().getClassLoader(), resourceConsumer.getClass().getInterfaces(), new DynamicProxyHandler(resourceConsumer, m_ensure));
@@ -219,7 +240,6 @@
 
         public void add(URL resource) {
             m_ensure.step(4);
-            System.out.println("Add resource: " + resource);
         }
 
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {