Package gov.nasa.arc.mct.defaults.view

Source Code of gov.nasa.arc.mct.defaults.view.TestDefaultNodeView

/*******************************************************************************
* Mission Control Technologies, Copyright (c) 2009-2012, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* The MCT platform is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* MCT includes source code licensed under additional open source licenses. See
* the MCT Open Source Licenses file included with this distribution or the About
* MCT Licenses dialog available at runtime from the MCT Help menu for additional
* information.
*******************************************************************************/
package gov.nasa.arc.mct.defaults.view;

import static org.mockito.Mockito.when;
import gov.nasa.arc.mct.components.AbstractComponent;
import gov.nasa.arc.mct.gui.MCTMutableTreeNode;
import gov.nasa.arc.mct.gui.View;
import gov.nasa.arc.mct.platform.spi.MockPlatform;
import gov.nasa.arc.mct.platform.spi.PlatformAccess;
import gov.nasa.arc.mct.roles.events.PropertyChangeEvent;
import gov.nasa.arc.mct.roles.events.ReloadEvent;
import gov.nasa.arc.mct.services.component.ViewInfo;
import gov.nasa.arc.mct.services.component.ViewType;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collections;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;

import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class TestDefaultNodeView {

    private View nodeViewManifestation;
    @Mock AbstractComponent mockComponent;
    @Mock AbstractComponent comp1;
    @Mock AbstractComponent comp2;
    @Mock AbstractComponent comp3;
    @Mock View              view1;
    @Mock View              view2;
    @Mock View              view3;
    @Mock DefaultTreeModel  mockModel;
    View mockViewManifestation;
    private JTree tree;
    private MCTMutableTreeNode rootNode;
    private DefaultTreeModel model;

    @BeforeMethod
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mockViewManifestation = new View() {
            private static final long serialVersionUID = -3939874904884082433L;
        };

        when(mockComponent.getDisplayName()).thenReturn("XXX");
        when(mockComponent.getExtendedDisplayName()).thenReturn("XXX");
        // Set up JTree for updateMonitoredGUI() calls
        rootNode = new MCTMutableTreeNode(new View() {
            private static final long serialVersionUID = 3318467817844246495L;
           
        });
        model = new DefaultTreeModel(rootNode);
        tree = new JTree(model);
        rootNode.setParentTree(tree);
        // Set up tree's UI containers
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        frame.add(panel);
        panel.add(tree);
       
        nodeViewManifestation = new NodeViewManifestation(mockComponent, new ViewInfo(NodeViewManifestation.class,"", ViewType.NODE));
    }

    @Test
    public void testCreateManifestation() {
        // Should have been populated by BeforeMethod
        Assert.assertNotNull(nodeViewManifestation);
    }

    @Test
    public void testAddMonitoredGUI() {
        MCTMutableTreeNode treeNode = new MCTMutableTreeNode();
        treeNode.setAllowsChildren(false);
        nodeViewManifestation.addMonitoredGUI(treeNode);
        MCTMutableTreeNode retrievedNode = ((NodeViewManifestation) nodeViewManifestation).getMCTMutableTreeNode();
        Assert.assertFalse(retrievedNode.getAllowsChildren());

        nodeViewManifestation.addMonitoredGUI(Mockito.mock(MCTMutableTreeNode.class));
        Assert.assertNotNull(((NodeViewManifestation) nodeViewManifestation).getMCTMutableTreeNode());
    }
   
   
    @Test
    public void testUpdateMonitoredGUI_Reorder() {
      ViewInfo viewInfo = new ViewInfo(NodeViewManifestation.class, "", ViewType.NODE);
      Mockito.when(view1.getManifestedComponent()).thenReturn(comp1);
      Mockito.when(view2.getManifestedComponent()).thenReturn(comp2);
      Mockito.when(view3.getManifestedComponent()).thenReturn(comp3);
      Mockito.when(comp1.getViewInfos(ViewType.NODE)).thenReturn(Collections.singleton(viewInfo));
        Mockito.when(comp2.getViewInfos(ViewType.NODE)).thenReturn(Collections.singleton(viewInfo));
        Mockito.when(comp3.getViewInfos(ViewType.NODE)).thenReturn(Collections.singleton(viewInfo));
        Mockito.when(comp1.getComponentId()).thenReturn("COMP1_ID");
        Mockito.when(comp2.getComponentId()).thenReturn("COMP2_ID");
        Mockito.when(comp3.getComponentId()).thenReturn("COMP3_ID");
      Mockito.when(mockComponent.getComponents()).thenReturn(Arrays.asList(comp1, comp2, comp3));
        MCTMutableTreeNode treeNode = new MCTMutableTreeNode();
        treeNode.setParentTree(new JTree());
       
        MCTMutableTreeNode node1 = new MCTMutableTreeNode(view1, false);
        MCTMutableTreeNode node2 = new MCTMutableTreeNode(view2, false);
        MCTMutableTreeNode node3 = new MCTMutableTreeNode(view3, false);
      treeNode.add(node1);
      treeNode.add(node2);
      treeNode.add(node3);
     
      nodeViewManifestation.addMonitoredGUI(treeNode);     

        nodeViewManifestation.updateMonitoredGUI();
        for (int index = 0; index < mockComponent.getComponents().size(); index++) {
            String expected = mockComponent.getComponents().get(index).getComponentId();
            View   childView = (View) ((MCTMutableTreeNode) treeNode.getChildAt(index)).getUserObject();
            Assert.assertEquals(childView.getManifestedComponent().getComponentId(), expected);
        }

      Mockito.when(mockComponent.getComponents()).thenReturn(Arrays.asList(comp1, comp3, comp2));

        nodeViewManifestation.updateMonitoredGUI();
        for (int index = 0; index < mockComponent.getComponents().size(); index++) {
            String expected = mockComponent.getComponents().get(index).getComponentId();
            View   childView = (View) ((MCTMutableTreeNode) treeNode.getChildAt(index)).getUserObject();
            Assert.assertEquals(childView.getManifestedComponent().getComponentId(), expected);
        }
    }
   
    /*
     *  The component's name, because it is mocked, is always XXX.
     *  This will outdate the View's label.  Then we refresh the View and we verify
     *  that the View label has been updated to the component's name.
     */
    @Test
    public void testUpdateMonitoredGUI_None() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {

        nodeViewManifestation = new NodeViewManifestation(mockComponent, new ViewInfo(NodeViewManifestation.class,"", ViewType.NODE));

        Field field = nodeViewManifestation.getClass().getDeclaredField("label");
        field.setAccessible(true);
        JLabel label = (JLabel) field.get(nodeViewManifestation);// get label field of View under test
        String fixedName = "outdatedView";
        label.setText(fixedName);// outdate the label of the view under test
        Assert.assertFalse(label.getText().equals(mockComponent.getExtendedDisplayName()));
      
        MCTMutableTreeNode mockTreeNode = Mockito.mock(MCTMutableTreeNode.class);
        JTree mockTree = Mockito.mock(JTree.class);
        DefaultTreeModel mockModel = Mockito.mock(DefaultTreeModel.class);
       
        Mockito.when(mockTreeNode.getParentTree()).thenReturn(mockTree);
        Mockito.when(mockTree.getModel()).thenReturn(mockModel);
        Mockito.when(mockComponent.getComponents()).thenReturn(Collections.<AbstractComponent>emptyList());
        PlatformAccess access = new PlatformAccess();
        access.setPlatform(new MockPlatform());
       
        nodeViewManifestation.addMonitoredGUI(mockTreeNode);
        nodeViewManifestation.updateMonitoredGUI();
        Assert.assertTrue(label.getText().equals(mockComponent.getExtendedDisplayName()));
    }

    @Test
    public void testUpdateMonitoredGUI_PropertyChange() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
        Field field = nodeViewManifestation.getClass().getDeclaredField("label");
        field.setAccessible(true);
        JLabel label = (JLabel) field.get(nodeViewManifestation);

        PropertyChangeEvent event = new PropertyChangeEvent(mockComponent);
        String fixedString = "YYY";
        event.setProperty(PropertyChangeEvent.DISPLAY_NAME, fixedString);
        Mockito.when(mockComponent.getExtendedDisplayName()).thenReturn(fixedString);

        MCTMutableTreeNode mockTreeNode = Mockito.mock(MCTMutableTreeNode.class);
        JTree mockTree = Mockito.mock(JTree.class);
        Mockito.when(mockTreeNode.getParentTree()).thenReturn(mockTree);
        DefaultTreeModel mockModel = Mockito.mock(DefaultTreeModel.class);
        Mockito.when(mockTree.getModel()).thenReturn(mockModel);
        nodeViewManifestation.addMonitoredGUI(mockTreeNode);
        nodeViewManifestation.updateMonitoredGUI(event);
        Assert.assertTrue(label.getText().equals(fixedString));
    }

    @Test
    public void testUpdateMonitoredGUI_Reload() {
        PlatformAccess access = new PlatformAccess();
        access.setPlatform(new MockPlatform());
       
        ReloadEvent event = new ReloadEvent(mockComponent);
        Assert.assertFalse(rootNode.isProxy());
        nodeViewManifestation.addMonitoredGUI(rootNode);
        nodeViewManifestation.updateMonitoredGUI(event);
        Assert.assertTrue(rootNode.isProxy());
    }

    @Test
    public void testGetParentView() {
        MCTMutableTreeNode mockTreeNode = Mockito.mock(MCTMutableTreeNode.class);
        MCTMutableTreeNode mockParentNode = Mockito.mock(MCTMutableTreeNode.class);
        View mockView = Mockito.mock(View.class);
        Mockito.when(mockTreeNode.getParent()).thenReturn(mockParentNode);
        Mockito.when(mockParentNode.getUserObject()).thenReturn(mockView);
        nodeViewManifestation.addMonitoredGUI(mockTreeNode);
       
        // Should not matter whether or not node is a proxy
        // nasa/mct#261
        for (boolean truth : new boolean[]{false, true}) {
            Mockito.when(mockTreeNode.isProxy()).thenReturn(truth);
            Assert.assertNotNull(nodeViewManifestation.getParentView());
        }
    }
}

TOP

Related Classes of gov.nasa.arc.mct.defaults.view.TestDefaultNodeView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.