Package gov.nasa.arc.mct.gui.menu

Source Code of gov.nasa.arc.mct.gui.menu.DynamicMenuTest$MockHousing

/*******************************************************************************
* 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.gui.menu;

import gov.nasa.arc.mct.component.MockComponent;
import gov.nasa.arc.mct.components.AbstractComponent;
import gov.nasa.arc.mct.defaults.view.MCTHousingViewManifestation;
import gov.nasa.arc.mct.gui.ContextAwareMenu;
import gov.nasa.arc.mct.gui.GroupAction.RadioAction;
import gov.nasa.arc.mct.gui.MenuItemInfo;
import gov.nasa.arc.mct.gui.MenuItemInfo.MenuItemType;
import gov.nasa.arc.mct.gui.MenuSection;
import gov.nasa.arc.mct.gui.View;
import gov.nasa.arc.mct.gui.housing.MCTAbstractHousing;
import gov.nasa.arc.mct.gui.housing.MCTStandardHousing;
import gov.nasa.arc.mct.gui.housing.registry.UserEnvironmentRegistry;
import gov.nasa.arc.mct.gui.impl.ActionContextImpl;
import gov.nasa.arc.mct.gui.impl.ActionManager;
import gov.nasa.arc.mct.gui.impl.MenuExtensionManager;
import gov.nasa.arc.mct.gui.menu.actions.DoExtraAction;
import gov.nasa.arc.mct.gui.menu.actions.DoSubtask;
import gov.nasa.arc.mct.gui.menu.actions.DoThatAction;
import gov.nasa.arc.mct.gui.menu.actions.DoTheseAction;
import gov.nasa.arc.mct.gui.menu.actions.DoThisAction;
import gov.nasa.arc.mct.platform.spi.MockPlatform;
import gov.nasa.arc.mct.platform.spi.PersistenceProvider;
import gov.nasa.arc.mct.platform.spi.Platform;
import gov.nasa.arc.mct.platform.spi.PlatformAccess;
import gov.nasa.arc.mct.registry.ExternalComponentRegistryImpl.ExtendedComponentProvider;
import gov.nasa.arc.mct.services.component.AbstractComponentProvider;
import gov.nasa.arc.mct.services.component.ViewInfo;
import gov.nasa.arc.mct.services.component.ViewType;
import gov.nasa.arc.mct.services.internal.component.ComponentInitializer;

import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import javax.swing.Action;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;

import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

/**
* Unit test for dynamic menu.
*
* @author nshi
*
*/
public class DynamicMenuTest {

  private static final String MY_MODEL_B = "My Model B";
    private static final String MY_MODEL_A = "My Model A";
    private static final String TEST_BUNDLE = "Test Bundle";
    private static final String DO_EXTRA = "DO_EXTRA";
    private static final String DONT_DO_THIS_YET = "DONT_DO_THIS_YET";
    private static final String DO_SUBTASK = "DO_SUBTASK";
    private static final String TEST_SUBMENU = "TEST_SUBMENU";
    private static final String DO_THESE = "DO_THESE";
    private static final String DO_THAT = "DO_THAT";
    private static final String DO_THIS = "DO_THIS";
    private static final String TEST_MENU = "TEST_MENU";
    private AbstractComponent componentA;
  private AbstractComponent componentB;
  private MockHousing housingA;
    private MockHousing housingB;
  private TestMenu testMenu;
  List<ContextAwareMenu> popupMenus;
 
  private final PlatformAccess access = new PlatformAccess();
  private final Platform mockPlatform = new MockPlatform();
 
  @BeforeTest
  public void setup() {
      if (GraphicsEnvironment.isHeadless()) {
          return;
      }
        ActionManager.registerMenu(TestMenu.class, TEST_MENU);
    ActionManager.registerAction(DoThisAction.class,  DO_THIS);
    ActionManager.registerAction(DoThatAction.class, DO_THAT);
    ActionManager.registerAction(DoTheseAction.class, DO_THESE);
    ActionManager.registerMenu(SubMenu.class, TEST_SUBMENU);
    ActionManager.registerAction(DoSubtask.class, DO_SUBTASK);
    MenuExtensionManager.getInstance().refreshExtendedMenus(
            Collections.<ExtendedComponentProvider>singletonList(
                    new ExtendedComponentProvider(new TestProvider(), TEST_BUNDLE)));
           
    popupMenus = new ArrayList<ContextAwareMenu>();
   
    access.setPlatform(mockPlatform);
   
      componentA = new MockComponent();
      componentB = new MockComponent();
     
      componentA.setDisplayName(MY_MODEL_A);
      componentA.getCapability(ComponentInitializer.class).initialize();
      componentB.setDisplayName(MY_MODEL_B);
      componentB.getCapability(ComponentInitializer.class).initialize();

      ViewInfo housingInfo = new ViewInfo(MCTHousingViewManifestation.class,"Housing",ViewType.LAYOUT);
    housingA = new MockHousing(new MCTHousingViewManifestation(componentA, housingInfo));
    housingB = new MockHousing(new MCTHousingViewManifestation(componentB, housingInfo));
    access.releasePlatform();
  }
 
  @Test(enabled=true)
  public void testRegisteredActions() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
       
    testMenu = (TestMenu) ActionManager.getMenu(TEST_MENU, ActionContextImpl.NULL_CONTEXT);
    List<MenuSection> sections = testMenu.getMenuSections();
   
    Assert.assertNotNull(sections);
    Assert.assertEquals(sections.size(), 2);
   
      MenuSection allSection = sections.get(0);
      List<MenuItemInfo> allMenus = allSection.getMenuItemInfoList();
      Assert.assertNotNull(allMenus);
      Assert.assertEquals(allMenus.size(), 5);

      MenuItemInfo info = allMenus.get(0);
      Assert.assertEquals(info.getCommandKey(), DO_THIS);
      
        info = allMenus.get(1);
        Assert.assertEquals(info.getCommandKey(), DO_THAT);
     
        info = allMenus.get(2);
        Assert.assertEquals(info.getCommandKey(), DO_THESE);

        info = allMenus.get(3);
        Assert.assertEquals(info.getCommandKey(), DONT_DO_THIS_YET);

        info = allMenus.get(4);
        Assert.assertEquals(info.getCommandKey(), TEST_SUBMENU);

       
      MenuSection additionsSection = sections.get(1);
      List<MenuItemInfo> addtionsMenus = additionsSection.getMenuItemInfoList();
     
        info = addtionsMenus.get(0);
        Assert.assertEquals(info.getCommandKey(), DO_EXTRA);
  }
 
  @Test(enabled=true, dependsOnMethods = { "testRegisteredActions" })
  public void testMenuSelected() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
        setTargetComponent(housingB);
    testMenu.fireMenuSelected();
    Assert.assertEquals(testMenu.getMenuComponentCount(), 6);
   
    JMenuItem menuItem = (JMenuItem) testMenu.getMenuComponent(0);
    Assert.assertEquals(menuItem.getActionCommand(), DO_THIS);
    Action action = menuItem.getAction();
    Assert.assertNotNull(action);
    Assert.assertTrue(action.isEnabled());
       
    menuItem = (JMenuItem) testMenu.getMenuComponent(5);
    action = menuItem.getAction();
        Assert.assertNotNull(action);
    Assert.assertEquals(menuItem.getActionCommand(), DO_EXTRA);
    Assert.assertFalse(action.isEnabled());

    testMenu.fireMenuDeselected();
    resetTargetComponent(housingB);
  }
 
  @Test(enabled=true, dependsOnMethods = { "testRegisteredActions" })
  public void testPopupMenu() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
    ActionContextImpl context = new ActionContextImpl();
    context.setTargetComponent(null);
   
    popupMenus.add(testMenu);
   
    JPopupMenu popupMenu = MenuFactory.createPopupMenu(context, popupMenus);
    Assert.assertNotNull(popupMenu);
   
    Assert.assertEquals(popupMenu.getComponentCount(),4);
   
    JMenuItem menuItem = (JMenuItem) popupMenu.getComponent(0);
        Action action = menuItem.getAction();
        Assert.assertNotNull(action);
    Assert.assertEquals(menuItem.getActionCommand(), DO_THIS);
        Assert.assertFalse(action.isEnabled());
   
        Assert.assertTrue(popupMenu.getComponent(2) instanceof JSeparator);
       
    menuItem = (JMenuItem) popupMenu.getComponent(3);
    Assert.assertEquals(menuItem.getActionCommand(), DO_EXTRA);
    action = menuItem.getAction();
    Assert.assertNotNull(action);
    Assert.assertFalse(action.isEnabled());
  }
 
  @Test(enabled=true, dependsOnMethods = { "testMenuSelected" })
  public void testSubMenu() {
        setTargetComponent(housingB);
        testMenu.fireMenuSelected();
       
        Assert.assertTrue(testMenu.getMenuComponent(3) instanceof ContextAwareMenu);
        SubMenu subMenu = (SubMenu) testMenu.getMenuComponent(3);

        subMenu.fireMenuSelected();
        Assert.assertEquals(subMenu.getMenuComponentCount(), 1);
        JMenuItem menuItem = (JMenuItem) subMenu.getMenuComponent(0);
        Action action = menuItem.getAction();
        Assert.assertNotNull(action);
        Assert.assertEquals(menuItem.getActionCommand(), DO_SUBTASK);
        Assert.assertFalse(action.isEnabled());
        subMenu.fireMenuDeselected();
       
        testMenu.fireMenuDeselected();
        resetTargetComponent(housingB);

  }
 
  @Test(enabled=true, dependsOnMethods = { "testPopupMenu" })
  public void testTargetContextPopup() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
    ActionContextImpl context = new ActionContextImpl();
    context.setTargetComponent(componentA);
   
    JPopupMenu popupMenu = MenuFactory.createPopupMenu(context, popupMenus);
    Assert.assertNotNull(popupMenu);
   
    Assert.assertEquals(popupMenu.getComponentCount(), 4);

    JMenuItem menuItem = (JMenuItem) popupMenu.getComponent(0);
    Assert.assertEquals(menuItem.getActionCommand(), DO_THIS);
        Action action = menuItem.getAction();
    Assert.assertNotNull(action);
    Assert.assertTrue(action.isEnabled());

        menuItem = (JMenuItem) popupMenu.getComponent(3);
        Assert.assertEquals(menuItem.getActionCommand(), DO_EXTRA);
        action = menuItem.getAction();
        Assert.assertNotNull(action);
        Assert.assertTrue(action.isEnabled());   
  }
 
  @Test(enabled=true, dependsOnMethods = { "testPopupMenu" })
  public void testTargetContextMenuSelected() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
        setTargetComponent(housingB);
   
    testMenu.fireMenuSelected();
    Assert.assertEquals(testMenu.getMenuComponentCount(), 6);

    JMenuItem menuItem = (JMenuItem) testMenu.getMenuComponent(0);
      Action action = menuItem.getAction();
      Assert.assertNotNull(action);
      Assert.assertEquals(action.getValue(Action.ACTION_COMMAND_KEY), DO_THIS);
      Assert.assertTrue(action.isEnabled());

    Assert.assertTrue(testMenu.getMenuComponent(4) instanceof JSeparator);
     
    menuItem = (JMenuItem) testMenu.getMenuComponent(5);
    action = menuItem.getAction();
    Assert.assertNotNull(action);
    Assert.assertEquals(action.getValue(Action.ACTION_COMMAND_KEY), DO_EXTRA);
    Assert.assertFalse(action.isEnabled());
   
    action.actionPerformed(new ActionEvent(testMenu, 0, null));
   
    testMenu.fireMenuDeselected();
    resetTargetComponent(housingB);
  }

  @Test(enabled=true, dependsOnMethods = { "testTargetContextMenuSelected" })
  public void testTargetContextFirstRadioMenuSelected() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
        setTargetComponent(housingB);
    testMenu.fireMenuSelected();
    Assert.assertEquals(testMenu.getMenuComponentCount(), 6);

    JMenuItem menuItem = (JMenuItem) testMenu.getMenuComponent(1);
    RadioAction radioActionThis = (RadioAction) menuItem.getAction();
    Assert.assertNotNull(radioActionThis);
    Assert.assertTrue(radioActionThis.isEnabled());
    Assert.assertFalse(radioActionThis.isSelected());

    menuItem = (JMenuItem) testMenu.getMenuComponent(2);
    RadioAction radioActionThat = (RadioAction) menuItem.getAction();
    Assert.assertNotNull(radioActionThat);
    Assert.assertTrue(radioActionThat.isEnabled());
    Assert.assertFalse(radioActionThat.isSelected());

    radioActionThat.actionPerformed(new ActionEvent(testMenu, 0, null));
    testMenu.fireMenuDeselected();
    resetTargetComponent(housingB);
  }
 
  @Test(enabled=true, dependsOnMethods = { "testTargetContextFirstRadioMenuSelected" })
  public void testTargetContextSecondRadioMenuSelected() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
        setTargetComponent(housingB);
    testMenu.fireMenuSelected();
    Assert.assertEquals(testMenu.getMenuComponentCount(), 6);

    JMenuItem menuItem = (JMenuItem) testMenu.getMenuComponent(2);
    RadioAction radioActionThat = (RadioAction) menuItem.getAction();
    Assert.assertNotNull(radioActionThat);
    Assert.assertTrue(radioActionThat.isEnabled());
    Assert.assertFalse(radioActionThat.isSelected());

    testMenu.fireMenuDeselected();
    resetTargetComponent(housingB);
  }

  @Test(enabled=true, dependsOnMethods = { "testRegisteredActions" })
  public void testCheckboxMenuSelected_1() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
        setTargetComponent(housingA);
    testMenu.fireMenuSelected();
    Assert.assertEquals(testMenu.getMenuComponentCount(), 4);
   
    PlatformAccess access = new PlatformAccess();
    Platform mockPlatform = Mockito.mock(Platform.class);
    PersistenceProvider mockPersistenceProvider = Mockito.mock(PersistenceProvider.class);
    access.setPlatform(mockPlatform);
    Mockito.when(mockPlatform.getPersistenceProvider()).thenReturn(mockPersistenceProvider);

    JMenuItem menuItem = (JMenuItem) testMenu.getMenuComponent(3);
    JCheckBoxMenuItem checkBoxMenuItem = (JCheckBoxMenuItem) menuItem;
    Action action = menuItem.getAction();
    Assert.assertNotNull(action);
    checkBoxMenuItem.doClick();
   
    testMenu.fireMenuDeselected();
    resetTargetComponent(housingA);
    access.setPlatform(null);
  }
 
  @Test(enabled=true, dependsOnMethods = { "testCheckboxMenuSelected_1" })
  public void testCheckboxMenuSelected_2() {
        if (GraphicsEnvironment.isHeadless()) {
            return;
        }
        setTargetComponent(housingA);
   
    testMenu.fireMenuSelected();
    Assert.assertEquals(testMenu.getMenuComponentCount(), 4);
   
    JMenuItem menuItem = (JMenuItem) testMenu.getMenuComponent(3);
    Assert.assertTrue(menuItem instanceof JCheckBoxMenuItem);
    Assert.assertTrue(((JCheckBoxMenuItem) menuItem).isSelected());

    testMenu.fireMenuDeselected();
    resetTargetComponent(housingA);
  }
 
  private void setTargetComponent(MCTAbstractHousing housing) {
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(testMenu);
        housing.setJMenuBar(menuBar);
        UserEnvironmentRegistry.registerHousing(housing);
  }
 
  private void resetTargetComponent(MCTAbstractHousing housing) {
      housing.getJMenuBar().removeAll();
        UserEnvironmentRegistry.removeHousing(housing);
    }

 
    @SuppressWarnings("serial")
    private class MockHousing extends MCTStandardHousing {
       
        public MockHousing(View housingView) {
            super("Mock", 0, 0, 0, housingView);       
        }

        public MockHousing(int width, int height, int closeAction, byte areaSelection, View housingView) {
            super("Mock", width, height, closeAction, housingView);
        }
       
    }
   
    private class TestProvider extends AbstractComponentProvider {

        @Override
        public Collection<MenuItemInfo> getMenuItemInfos() {
            return Collections.<MenuItemInfo>singleton(new MenuItemInfo("test/additions", DO_EXTRA, MenuItemType.CHECKBOX, DoExtraAction.class));
        }

    }
}
TOP

Related Classes of gov.nasa.arc.mct.gui.menu.DynamicMenuTest$MockHousing

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.