FELIX-5015 Unit tests (for NPE in ResolverImpl)


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1705686 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
index cf7daa0..211e5e2 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -40,7 +40,6 @@
 
 import org.apache.felix.resolver.util.ArrayMap;
 import org.apache.felix.resolver.util.OpenHashMap;
-
 import org.osgi.framework.namespace.BundleNamespace;
 import org.osgi.framework.namespace.ExecutionEnvironmentNamespace;
 import org.osgi.framework.namespace.HostNamespace;
@@ -1730,12 +1729,12 @@
         }
 
         Set<Capability> packageSources = sources.get(cap);
-        if(packageSources == null) 
+        if(packageSources == null)
         {
             return new HashSet<Capability>();
         }
 
-        return packageSources;  
+        return packageSources;
     }
 
     private static void getPackageSourcesInternal(
@@ -2074,7 +2073,7 @@
         }
     }
 
-    private static class Packages
+    public static class Packages
     {
         public final OpenHashMap<String, Blame> m_exportedPkgs;
         public final OpenHashMap<String, List<Blame>> m_importedPkgs;
diff --git a/resolver/src/test/java/org/apache/felix/resolver/test/ResolverTest.java b/resolver/src/test/java/org/apache/felix/resolver/test/ResolverTest.java
index 55580fd..11e518f 100644
--- a/resolver/src/test/java/org/apache/felix/resolver/test/ResolverTest.java
+++ b/resolver/src/test/java/org/apache/felix/resolver/test/ResolverTest.java
@@ -23,6 +23,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -30,6 +31,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.felix.resolver.Logger;
 import org.apache.felix.resolver.ResolverImpl;
@@ -42,6 +44,7 @@
 import org.apache.felix.resolver.test.util.ResolveContextImpl;
 import org.apache.felix.resolver.test.util.ResourceImpl;
 import org.junit.Test;
+import org.mockito.Mockito;
 import org.osgi.framework.Constants;
 import org.osgi.framework.namespace.BundleNamespace;
 import org.osgi.framework.namespace.HostNamespace;
@@ -577,6 +580,37 @@
         assertEquals(0, wireMap.size());
     }
 
+    @Test
+    public void testPackageSources() throws Exception {
+        Method m = ResolverImpl.class.getDeclaredMethod("getPackageSources",
+                Capability.class, Map.class);
+        m.setAccessible(true);
+
+        Capability cap = Mockito.mock(Capability.class);
+        assertEquals(Collections.emptySet(),
+                m.invoke(null, cap, new HashMap<Resource, ResolverImpl.Packages>()));
+
+        Capability cap2 = Mockito.mock(Capability.class);
+        Resource res2 = Mockito.mock(Resource.class);
+        Mockito.when(cap2.getResource()).thenReturn(res2);
+        Map<Resource, ResolverImpl.Packages> map2 = new HashMap<Resource, ResolverImpl.Packages>();
+        map2.put(res2, new ResolverImpl.Packages(res2));
+        assertEquals(Collections.emptySet(), m.invoke(null, cap2, map2));
+
+        Capability cap3 = Mockito.mock(Capability.class);
+        Resource res3 = Mockito.mock(Resource.class);
+        Mockito.when(cap3.getResource()).thenReturn(res3);
+        Map<Resource, ResolverImpl.Packages> map3 = new HashMap<Resource, ResolverImpl.Packages>();
+        ResolverImpl.Packages pkgs3 = new ResolverImpl.Packages(res3);
+        Set<Capability> srcCaps3 = Collections.singleton(Mockito.mock(Capability.class));
+        Map<Capability, Set<Capability>> srcMap3 = Collections.singletonMap(
+                cap3, srcCaps3);
+        pkgs3.m_sources.putAll(srcMap3);
+        map3.put(res3, pkgs3);
+        assertEquals(srcCaps3, m.invoke(null, cap3, map3));
+
+    }
+
     private static String getResourceName(Resource r)
     {
         return r.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE).get(0).getAttributes()