//============================================================================= // Copyright 2006-2010 Daniel W. Dyer // // 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. //============================================================================= package org.uncommons.watchmaker.swing.evolutionmonitor; import java.awt.BorderLayout; import javax.swing.JFrame; import org.fest.swing.core.BasicRobot; import org.fest.swing.core.Robot; import org.fest.swing.fixture.FrameFixture; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.uncommons.watchmaker.framework.PopulationData; /** * Unit test for the {@link StatusBar} class. * @author Daniel Dyer */ public class StatusBarTest { private Robot robot; @BeforeMethod public void prepare() { robot = BasicRobot.robotWithNewAwtHierarchy(); } @AfterMethod public void cleanUp() { robot.cleanUp(); robot = null; } @Test(groups = "display-required") // Will fail if run in a headless environment. public void testFieldUpdates() { StatusBar statusBar = new StatusBar(); JFrame frame = new JFrame(); frame.add(statusBar, BorderLayout.CENTER); FrameFixture frameFixture = new FrameFixture(robot, frame); frame.setSize(400, 30); frame.validate(); frameFixture.show(); assert frameFixture.label("Population").text().equals("N/A") : "Wrong initial text for population label."; assert frameFixture.label("Elitism").text().equals("N/A") : "Wrong initial text for elitism label."; assert frameFixture.label("Generations").text().equals("N/A") : "Wrong initial text for generations label."; assert frameFixture.label("Time").text().equals("N/A") : "Wrong initial text for elapsed time label."; statusBar.populationUpdate(new PopulationData<Object>(new Object(), 10, 8, 2, true, 10, 1, 0, 36610000)); assert frameFixture.label("Population").text().equals("10") : "Wrong value for popluation label."; assert frameFixture.label("Elitism").text().equals("1") : "Wrong value for elitism label."; // Generation count is number + 1 (because generations start at zero). assert frameFixture.label("Generations").text().equals("1") : "Wrong value for generations label."; assert frameFixture.label("Time").text().equals("10:10:10") : "Wrong value for elapsed time label."; } @Test(groups = "display-required") // Will fail if run in a headless environment. public void testFieldUpdatesForIslandMode() { StatusBar statusBar = new StatusBar(true); JFrame frame = new JFrame(); frame.add(statusBar, BorderLayout.CENTER); FrameFixture frameFixture = new FrameFixture(robot, frame); frame.setSize(400, 30); frame.validate(); frameFixture.show(); assert frameFixture.label("Population").text().equals("N/A") : "Wrong initial text for population label."; assert frameFixture.label("Elitism").text().equals("N/A") : "Wrong initial text for elitism label."; assert frameFixture.label("Generations").text().equals("N/A") : "Wrong initial text for generations label."; assert frameFixture.label("Time").text().equals("N/A") : "Wrong initial text for elapsed time label."; statusBar.islandPopulationUpdate(0, new PopulationData<Object>(new Object(), 10, 8, 2, true, 10, 1, 0, 36610000)); statusBar.populationUpdate(new PopulationData<Object>(new Object(), 10, 8, 2, true, 50, 1, 0, 36610000)); assert frameFixture.label("Population").text().equals("5x10") : "Wrong value for popluation label."; assert frameFixture.label("Elitism").text().equals("5x1") : "Wrong value for elitism label."; // Generation count is number + 1 (because generations start at zero). assert frameFixture.label("Generations").text().equals("1") : "Wrong value for generations label."; assert frameFixture.label("Time").text().equals("10:10:10") : "Wrong value for elapsed time label."; } @Test(groups = "display-required") // Will fail if run in a headless environment. public void testTimeFormat() { StatusBar statusBar = new StatusBar(); JFrame frame = new JFrame(); frame.add(statusBar, BorderLayout.CENTER); FrameFixture frameFixture = new FrameFixture(robot, frame); frame.setSize(400, 30); frame.validate(); frameFixture.show(); // Previous test checks two-digit field values, this test checks that single-digit // values and zeros are correctly padded. statusBar.populationUpdate(new PopulationData<Object>(new Object(), 10, 8, 2, true, 10, 1, 0, 1000)); assert frameFixture.label("Time").text().equals("00:00:01"); } }