Author: clopes
Date: 2012-05-11 14:24:21 -0700 (Fri, 11 May 2012)
New Revision: 29247

Added:
   
core3/impl/trunk/application-impl/src/test/java/org/cytoscape/application/internal/CyApplicationManagerImplTest.java
Modified:
   core3/impl/trunk/application-impl/pom.xml
   
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
Log:
Fixes a bug that could add null to selected networks/views lists. Adds unit 
tests for CyApplicationManagerImpl

Modified: core3/impl/trunk/application-impl/pom.xml
===================================================================
--- core3/impl/trunk/application-impl/pom.xml   2012-05-11 20:56:16 UTC (rev 
29246)
+++ core3/impl/trunk/application-impl/pom.xml   2012-05-11 21:24:21 UTC (rev 
29247)
@@ -85,5 +85,41 @@
                        <groupId>org.cytoscape</groupId>
                        <artifactId>session-api</artifactId>
                </dependency>
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.mockito</groupId>
+                       <artifactId>mockito-all</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>model-impl</artifactId>
+                       <version>${project.version}</version>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>model-impl</artifactId>
+                       <version>${project.version}</version>
+                       <type>test-jar</type>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>ding-presentation-impl</artifactId>
+                       <version>${project.version}</version>
+                       <type>test-jar</type>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>ding-presentation-impl</artifactId>
+                       <version>${project.version}</version>
+                       <scope>test</scope>
+               </dependency>
        </dependencies>
 </project>

Modified: 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
===================================================================
--- 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
    2012-05-11 20:56:16 UTC (rev 29246)
+++ 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
    2012-05-11 21:24:21 UTC (rev 29247)
@@ -33,6 +33,7 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
@@ -275,7 +276,7 @@
 
                        CyNetworkView cv = getCurrentNetworkView();
 
-                       if (!selectedNetworkViews.contains(cv)) {
+                       if (cv != null && !selectedNetworkViews.contains(cv)) {
                                selectedNetworkViews.add(cv);
                        }
                }
@@ -301,13 +302,14 @@
 
        @Override
        public void setSelectedNetworks(final List<CyNetwork> networks) {
-               final Set<CyNetwork> selectedNetworks;
+               Set<CyNetwork> selectedNetworks = networks != null ? new 
LinkedHashSet<CyNetwork>(networks)
+                               : new LinkedHashSet<CyNetwork>();
                
                synchronized (this) {
-                       selectedNetworks = selectNetworks(networks);
-                       
                        if (currentNetwork != null)
                                selectedNetworks.add(currentNetwork);
+                       
+                       selectedNetworks = selectNetworks(selectedNetworks);
                }
 
                cyEventHelper.fireEvent(new SetSelectedNetworksEvent(this, new 
ArrayList<CyNetwork>(selectedNetworks)));

Added: 
core3/impl/trunk/application-impl/src/test/java/org/cytoscape/application/internal/CyApplicationManagerImplTest.java
===================================================================
--- 
core3/impl/trunk/application-impl/src/test/java/org/cytoscape/application/internal/CyApplicationManagerImplTest.java
                                (rev 0)
+++ 
core3/impl/trunk/application-impl/src/test/java/org/cytoscape/application/internal/CyApplicationManagerImplTest.java
        2012-05-11 21:24:21 UTC (rev 29247)
@@ -0,0 +1,291 @@
+package org.cytoscape.application.internal;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.cytoscape.ding.NetworkViewTestSupport;
+import org.cytoscape.event.CyEventHelper;
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyIdentifiable;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyRow;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyEdge.Type;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.CyNetworkViewManager;
+import org.cytoscape.view.presentation.RenderingEngine;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class CyApplicationManagerImplTest {
+
+       @Mock
+       private CyEventHelper evtHelper;
+       @Mock
+       private CyNetworkManager netMgr;
+       @Mock
+       private CyNetworkViewManager netViewMgr;
+       
+       private CyApplicationManagerImpl appMgr;
+       private NetworkViewTestSupport nvtSupport;
+       
+       @Before
+       public void setUp() throws Exception {
+               MockitoAnnotations.initMocks(this);
+               
+               nvtSupport = new NetworkViewTestSupport();
+               final Set<CyNetworkView> views = new HashSet<CyNetworkView>();
+               final Set<CyNetwork> networks = new HashSet<CyNetwork>();
+               
+               when(netMgr.getNetworkSet()).thenReturn(networks);
+               when(netMgr.networkExists(anyLong())).thenReturn(false);
+               when(netViewMgr.getNetworkViewSet()).thenReturn(views);
+               
when(netViewMgr.viewExists(any(CyNetwork.class))).thenReturn(false);
+               
when(netViewMgr.getNetworkViews(any(CyNetwork.class))).thenReturn(new 
HashSet<CyNetworkView>());
+               
+               appMgr = new CyApplicationManagerImpl(evtHelper, netMgr, 
netViewMgr);
+       }
+
+       @Test
+       public void testCyApplicationManagerImpl() {
+               assertNull(appMgr.getCurrentNetwork());
+               assertNull(appMgr.getCurrentNetworkView());
+               assertNull(appMgr.getCurrentRenderingEngine());
+               assertNull(appMgr.getCurrentTable());
+               assertTrue(appMgr.getSelectedNetworks().isEmpty());
+               assertTrue(appMgr.getSelectedNetworkViews().isEmpty());
+       }
+
+       @Test
+       public void testSetNullCurrentNetwork() {
+               try {
+                       appMgr.setCurrentNetwork(null);
+                       fail("Should hgave thrown NullPointerException");
+               } catch (NullPointerException e) { }
+       }
+       
+       @Test
+       public void testSetNullCurrentNetworkView() {
+               final CyNetworkView view = newNetworkView();
+               appMgr.setCurrentNetworkView(view);
+               assertNotNull(appMgr.getCurrentNetworkView());
+               appMgr.setCurrentNetworkView(null);
+               assertEquals(view, appMgr.getCurrentNetworkView());
+       }
+       
+       @Test
+       public void testSetNullCurrentTable() {
+               appMgr.setCurrentTable(mock(CyTable.class));
+               assertNotNull(appMgr.getCurrentTable());
+               appMgr.setCurrentTable(null);
+               assertNull(appMgr.getCurrentTable());
+       }
+       
+       @Test
+       @SuppressWarnings("unchecked")
+       public void testSetNullCurrentRenderingEngine() {
+               appMgr.setCurrentRenderingEngine(mock(RenderingEngine.class));
+               assertNotNull(appMgr.getCurrentRenderingEngine());
+               appMgr.setCurrentRenderingEngine(null);
+               assertNull(appMgr.getCurrentRenderingEngine());
+       }
+       
+       @Test
+       public void testSetNullSelectedNetworks() {
+               appMgr.setSelectedNetworks(null);
+               assertTrue(appMgr.getSelectedNetworks().isEmpty());
+       }
+       
+       @Test
+       public void testSetNullSelectedNetworkViews() {
+               appMgr.setSelectedNetworkViews(null);
+               assertTrue(appMgr.getSelectedNetworkViews().isEmpty());
+       }
+       
+       @Test
+       public void testSetEmptySelectedNetworks() {
+               appMgr.setSelectedNetworks(new ArrayList<CyNetwork>());
+               assertTrue(appMgr.getSelectedNetworks().isEmpty());
+               assertTrue(appMgr.getSelectedNetworkViews().isEmpty());
+       }
+       
+       @Test
+       public void testSetEmptySelectedNetworkViews() {
+               appMgr.setSelectedNetworkViews(new ArrayList<CyNetworkView>());
+               assertTrue(appMgr.getSelectedNetworkViews().isEmpty());
+               assertTrue(appMgr.getSelectedNetworks().isEmpty());
+       }
+       
+       @Test
+       public void testSetCurrentNetwork() {
+               CyNetworkView view = newNetworkView();
+               CyNetwork net = view.getModel();
+               appMgr.setCurrentNetwork(net);
+               assertEquals(net, appMgr.getCurrentNetwork());
+               assertEquals(view, appMgr.getCurrentNetworkView());
+               // The current network is selected
+               List<CyNetwork> selNets = appMgr.getSelectedNetworks();
+               assertEquals(1, selNets.size());
+               assertTrue(selNets.contains(net));
+       }
+       
+       @Test
+       public void testSetCurrentNetworkView() {
+               CyNetworkView view = newNetworkView();
+               appMgr.setCurrentNetworkView(view);
+               assertEquals(view, appMgr.getCurrentNetworkView());
+               assertEquals(view.getModel(), appMgr.getCurrentNetwork());
+               // The current view is selected
+               List<CyNetwork> selNets = appMgr.getSelectedNetworks();
+               assertEquals(1, selNets.size());
+               assertTrue(selNets.contains(view.getModel()));
+               // The current view is selected
+               List<CyNetworkView> selViews = appMgr.getSelectedNetworkViews();
+               assertEquals(1, selViews.size());
+               assertTrue(selViews.contains(view));
+       }
+       
+       @Test
+       public void testSetSelectedNetworks() {
+               final CyNetworkView v1 = newNetworkView();
+               final CyNetworkView v2 = newNetworkView();
+               final CyNetworkView v3 = newNetworkView();
+               final List<CyNetwork> nets = Arrays.asList(new 
CyNetwork[]{v1.getModel(), v3.getModel()});
+               
+               appMgr.setSelectedNetworks(nets);
+               final List<CyNetwork> selectedNets = 
appMgr.getSelectedNetworks();
+               final List<CyNetworkView> selectedViews = 
appMgr.getSelectedNetworkViews();
+               
+               assertEquals(2, selectedNets.size());
+               assertTrue(selectedNets.containsAll(nets));
+               assertSelected(true, v1.getModel(), v3.getModel());
+               assertSelected(false, v2.getModel());
+               assertEquals(0, selectedViews.size()); // Selecting networks 
does NOT select the views!
+               assertNull(appMgr.getCurrentNetwork()); // Shouldn't change the 
current network either
+               assertNull(appMgr.getCurrentNetworkView());
+       }
+       
+       @Test
+       public void testSetSelectedNetworksIncludesCurrent() {
+               final CyNetwork n1 = newNetwork();
+               final CyNetwork n2 = newNetwork();
+               final CyNetwork n3 = newNetwork();
+               final List<CyNetwork> nets = Arrays.asList(new CyNetwork[]{n1, 
n2});
+               
+               appMgr.setCurrentNetwork(n3);
+               appMgr.setSelectedNetworks(nets);
+               final List<CyNetwork> selectedNets = 
appMgr.getSelectedNetworks();
+               
+               assertEquals(3, selectedNets.size());
+               assertTrue(selectedNets.containsAll(nets));
+               assertTrue(selectedNets.contains(n3));
+               assertEquals(n3, appMgr.getCurrentNetwork()); // Shouldn't 
change the current network
+       }
+       
+       @Test
+       public void testSetSelectedNetworkViews() {
+               final CyNetworkView v1 = newNetworkView();
+               final CyNetworkView v2 = newNetworkView();
+               final CyNetworkView v3 = newNetworkView();
+               final List<CyNetworkView> views = Arrays.asList(new 
CyNetworkView[]{v1, v3});
+               
+               appMgr.setSelectedNetworkViews(views);
+               final List<CyNetwork> selectedNets = 
appMgr.getSelectedNetworks();
+               final List<CyNetworkView> selectedViews = 
appMgr.getSelectedNetworkViews();
+               
+               assertEquals(2, selectedViews.size());
+               assertTrue(selectedViews.containsAll(views));
+//             assertEquals(2, selectedNets.size()); // Selecting views also 
selects their models!
+//             assertTrue(selectedNets.containsAll(Arrays.asList(new 
CyNetwork[]{v1.getModel(), v3.getModel()})));
+               assertNull(appMgr.getCurrentNetwork()); // Shouldn't change the 
current network
+               assertNull(appMgr.getCurrentNetworkView());
+       }
+       
+       @Test
+       public void testSetSelectedNetworkViewsIncludesCurrent() {
+               final CyNetworkView v1 = newNetworkView();
+               final CyNetworkView v2 = newNetworkView();
+               final CyNetworkView v3 = newNetworkView();
+               final List<CyNetworkView> views = Arrays.asList(new 
CyNetworkView[]{v1, v2});
+               
+               appMgr.setCurrentNetworkView(v3);
+               appMgr.setSelectedNetworkViews(views);
+               final List<CyNetworkView> selectedViews = 
appMgr.getSelectedNetworkViews();
+               
+               assertEquals(3, selectedViews.size());
+               assertTrue(selectedViews.containsAll(views));
+               assertTrue(selectedViews.contains(v3));
+               assertEquals(v3, appMgr.getCurrentNetworkView()); // Shouldn't 
change the current network view
+       }
+       
+       @Test
+       @SuppressWarnings("unchecked")
+       public void testSetCurrentRenderingEngine() {
+               final RenderingEngine<CyNetwork> re = 
mock(RenderingEngine.class);
+               appMgr.setCurrentRenderingEngine(re);
+               assertEquals(re, appMgr.getCurrentRenderingEngine());
+       }
+
+       @Test
+       public void testSetCurrentTable() {
+               final CyTable tbl = mock(CyTable.class);
+               appMgr.setCurrentTable(tbl);
+               assertEquals(tbl, appMgr.getCurrentTable());
+       }
+
+       // PRIVATE METHODS
+       
+       /**
+        * @return A registered network view
+        */
+       private CyNetworkView newNetworkView() {
+               CyNetworkView view = nvtSupport.getNetworkView();
+               registerNetwork(view.getModel());
+               registerNetworkView(view);
+               return view;
+       }
+       
+       /**
+        * @return A registered network
+        */
+       private CyNetwork newNetwork() {
+               CyNetwork net = nvtSupport.getNetwork();
+               registerNetwork(net);
+               return net;
+       }
+       
+       private void registerNetwork(CyNetwork net) {
+               netMgr.getNetworkSet().add(net);
+               when(netMgr.getNetwork(net.getSUID())).thenReturn(net);
+               when(netMgr.networkExists(net.getSUID())).thenReturn(true);
+       }
+       
+       private void registerNetworkView(CyNetworkView view) {
+               netViewMgr.getNetworkViewSet().add(view);
+               when(netViewMgr.viewExists(view.getModel())).thenReturn(true);
+               Set<CyNetworkView> views = new 
HashSet<CyNetworkView>(netViewMgr.getNetworkViews(view.getModel()));
+               views.add(view);
+               
when(netViewMgr.getNetworkViews(view.getModel())).thenReturn(views);
+       }
+       
+       private void assertSelected(boolean selected, CyNetwork... networks) {
+               for (CyNetwork n : networks)
+                       assertEquals("Network: " + n, selected, 
n.getRow(n).get(CyNetwork.SELECTED, Boolean.class));
+       }
+       
+       private void assertSelected(boolean selected, Collection<CyNetwork> 
networks) {
+               for (CyNetwork n : networks)
+                       assertEquals("Network: " + n, selected, 
n.getRow(n).get(CyNetwork.SELECTED, Boolean.class));
+       }
+}

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to