Package gov.nasa.arc.mct.graphics.view

Source Code of gov.nasa.arc.mct.graphics.view.GraphicalControlPanelTest

/*******************************************************************************
* 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.graphics.view;

import gov.nasa.arc.mct.components.AbstractComponent;
import gov.nasa.arc.mct.components.ExtendedProperties;

import java.awt.event.KeyEvent;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JFrame;

import org.fest.swing.core.BasicRobot;
import org.fest.swing.core.KeyPressInfo;
import org.fest.swing.core.Robot;
import org.fest.swing.edt.GuiActionRunner;
import org.fest.swing.edt.GuiTask;
import org.fest.swing.finder.WindowFinder;
import org.fest.swing.fixture.FrameFixture;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;


public class GraphicalControlPanelTest {
  private static final String WINDOW_TITLE = "GraphicalControlPanel test";
 
  private Robot robot;
 
  private final Map<String, String> defaultMap = new HashMap<String, String>();   
 
  private JFrame testFrame;
  private GraphicalSettings settings;
  private GraphicalControlPanel controls;

  private AbstractComponent mockComponent = new AbstractComponent() {
   
    @Override
    public Collection<AbstractComponent> getReferencingComponents() {
      return Collections.<AbstractComponent> emptyList();
    }
   
  };
  @Mock private GraphicalManifestation mockView;
  private ExtendedProperties           viewProperties;
 
 
  @BeforeClass
  public void setupClass() {

    defaultMap.put(GraphicalSettings.GRAPHICAL_SHAPE,            GraphicalSettings.DEFAULT_SHAPE);
    defaultMap.put(GraphicalSettings.GRAPHICAL_BACKGROUND_COLOR, GraphicalSettings.DEFAULT_BACKGROUND_COLOR);
    defaultMap.put(GraphicalSettings.GRAPHICAL_OUTLINE_COLOR,    GraphicalSettings.DEFAULT_OUTLINE_COLOR);
    defaultMap.put(GraphicalSettings.GRAPHICAL_OUTLINE_WEIGHT,   GraphicalSettings.DEFAULT_OUTLINE_WEIGHT);
    defaultMap.put(GraphicalSettings.GRAPHICAL_FOREGROUND_FILL,  GraphicalSettings.DEFAULT_FOREGROUND_FILL);
    defaultMap.put(GraphicalSettings.GRAPHICAL_FOREGROUND_COLOR, GraphicalSettings.DEFAULT_FOREGROUND_COLOR);
    defaultMap.put(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN,   GraphicalSettings.DEFAULT_FOREGROUND_MIN);
    defaultMap.put(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX,   GraphicalSettings.DEFAULT_FOREGROUND_MAX);
    defaultMap.put(GraphicalSettings.GRAPHICAL_EVALUATOR,        GraphicalSettings.DEFAULT_EVALUATOR);
    defaultMap.put(GraphicalSettings.GRAPHICAL_EVALUATOR_MAP,    GraphicalSettings.DEFAULT_EVALUATOR_MAP);
  }
 

  @BeforeMethod
  public void setupTest() {
   
    testFrame = new JFrame(WINDOW_TITLE);

    MockitoAnnotations.initMocks(this);
   
    viewProperties = new ExtendedProperties();
    Mockito.when(mockView.getManifestedComponent()).thenReturn(mockComponent);
    Mockito.when(mockView.getViewProperties()).thenReturn(viewProperties)
   
    mockComponent.setDisplayName("Test Component");
   
    //Mockito.when(mockComponent.getCapability(Evaluator.class)).thenReturn(null);
    //Mockito.when(mockComponent.getMasterComponent()).thenReturn(null);
    //Mockito.when(mockComponent.getReferencingComponents()).thenReturn(Collections.<AbstractComponent>emptyList());
   
    settings  = new GraphicalSettings(mockView) {

      @Override
      public Collection<String> getSupportedEnumerations() {
        return Collections.<String> emptyList();
      }


      @Override
      public Collection<Object> getSupportedEvaluators() {
        return Collections.<Object> singleton(mockComponent);
     
     

      @Override
      public Object getSetting(String name) {       
        return this.getNamedObject(defaultMap.get(name));
      }
     
    };
 
    Mockito.when(mockView.getSettings()).thenReturn(settings);
    controls =  new GraphicalControlPanel(mockView);
   
    GuiActionRunner.execute( new GuiTask() {

      @Override
      protected void executeInEDT() throws Throwable {    
   
        testFrame.setName(WINDOW_TITLE);
        testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        testFrame.getContentPane().add(controls);
        testFrame.setSize(800, 600);
        testFrame.pack();
        testFrame.setVisible(true);
       
      }
    });
   
    robot = BasicRobot.robotWithCurrentAwtHierarchy()
 
  }
 
  @AfterMethod
  public void cleanUpTest() {
    robot.cleanUp();
  }
 
 
  @Test
  public void testDropDowns() {
    String[] dropDowns = { GraphicalSettings.GRAPHICAL_SHAPE,
                       GraphicalSettings.GRAPHICAL_OUTLINE_COLOR,
                       GraphicalSettings.GRAPHICAL_BACKGROUND_COLOR,
                       GraphicalSettings.GRAPHICAL_FOREGROUND_FILL,
                       GraphicalSettings.GRAPHICAL_FOREGROUND_COLOR };
   
    FrameFixture window = WindowFinder.findFrame(WINDOW_TITLE).using(robot);
     
    for (String propertyName : dropDowns) {
      Assert.assertNull   (viewProperties.getProperty(propertyName, String.class));
      // Note, this is sensitive to defaults (only calls on change)
      // So, we do it at least twice every time
      window.comboBox(propertyName).selectItem(1);
      window.comboBox(propertyName).selectItem(2);
      Assert.assertNotNull(viewProperties.getProperty(propertyName, String.class));         
    }

  }
 
  @Test
  public void testMinMax() {
    FrameFixture window = WindowFinder.findFrame(WINDOW_TITLE).using(robot);

    verifyMinMax(null, null);   
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).enterText("10");
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX).enterText("20");
    // Just changing text shouldn't change property
    verifyMinMax(null, null);
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX).pressAndReleaseKey(KeyPressInfo.keyCode(KeyEvent.VK_ENTER));   
    verifyMinMax("10", "20");   

    // Bad data should not make changes
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).deleteText();
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).enterText("cat");
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX).deleteText();
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX).enterText("dog");   
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).pressAndReleaseKey(KeyPressInfo.keyCode(KeyEvent.VK_ENTER));
    verifyMinMax("10", "20");
   
    // Min > Max should not change settings
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).deleteText();
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).enterText("30");
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX).deleteText();
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX).enterText("20");   
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).pressAndReleaseKey(KeyPressInfo.keyCode(KeyEvent.VK_ENTER));
    verifyMinMax("10", "20");
   
    // But now settings change should work
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).deleteText();
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).enterText("30");
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX).deleteText();
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX).enterText("40");   
    window.textBox(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN).pressAndReleaseKey(KeyPressInfo.keyCode(KeyEvent.VK_ENTER));
    verifyMinMax("30", "40");    
  }
 
  /**
   * Min and Max should always have the same number of setViewProperty calls
   * @param times
   */
  private void verifyMinMax(String min, String max) {
    Assert.assertEquals(viewProperties.getProperty(GraphicalSettings.GRAPHICAL_FOREGROUND_MIN, String.class), min);
    Assert.assertEquals(viewProperties.getProperty(GraphicalSettings.GRAPHICAL_FOREGROUND_MAX, String.class), max);
  }
 

}

TOP

Related Classes of gov.nasa.arc.mct.graphics.view.GraphicalControlPanelTest

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.