# HG changeset patch # User Lukasz Dracz # Date 1418412543 18000 # Node ID 0918853b8190cd1027c2f6df87a3b6bb79fa6b0c # Parent 7163ecc4e8ed4d5550d2471840f52d7818a692d7 Add RecentTimeControlPanelTest Reviewed-by: omajid Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2014-December/012263.html diff -r 7163ecc4e8ed -r 0918853b8190 client/swing/src/main/java/com/redhat/thermostat/client/swing/components/RecentTimeSeriesChartPanel.java --- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/RecentTimeSeriesChartPanel.java Thu Dec 11 13:49:11 2014 +0100 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/RecentTimeSeriesChartPanel.java Fri Dec 12 14:29:03 2014 -0500 @@ -102,6 +102,7 @@ recentTimeControlPanel.addTextComponent(label); } + label.setName("crossHair"); label.setText(text); } }); diff -r 7163ecc4e8ed -r 0918853b8190 client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/RecentTimeControlPanel.java --- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/RecentTimeControlPanel.java Thu Dec 11 13:49:11 2014 +0100 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/RecentTimeControlPanel.java Fri Dec 12 14:29:03 2014 -0500 @@ -100,6 +100,9 @@ durationSelector.setText(String.valueOf(duration.value)); unitSelector.setSelectedItem(duration.unit); + durationSelector.setName("durationSelector"); + unitSelector.setName("unitSelector"); + container.add(new JLabel(translator.localize(LocaleResources.CHART_DURATION_SELECTOR_LABEL).getContents())); container.add(durationSelector); container.add(unitSelector); diff -r 7163ecc4e8ed -r 0918853b8190 client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/SingleValueChartPanel.java --- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/SingleValueChartPanel.java Thu Dec 11 13:49:11 2014 +0100 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/components/experimental/SingleValueChartPanel.java Fri Dec 12 14:29:03 2014 -0500 @@ -135,6 +135,7 @@ recentTimeControlPanel.addTextComponent(label); } + label.setName("crossHair"); label.setText(text); } }); diff -r 7163ecc4e8ed -r 0918853b8190 client/swing/src/test/java/com/redhat/thermostat/client/swing/components/RecentTimeSeriesChartPanelTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/swing/src/test/java/com/redhat/thermostat/client/swing/components/RecentTimeSeriesChartPanelTest.java Fri Dec 12 14:29:03 2014 -0500 @@ -0,0 +1,131 @@ +/* + * Copyright 2012-2014 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.client.swing.components; + +import static org.junit.Assert.assertEquals; + +import java.util.concurrent.TimeUnit; +import javax.swing.JFrame; + +import com.redhat.thermostat.client.ui.RecentTimeSeriesChartController; +import net.java.openjdk.cacio.ctc.junit.CacioFESTRunner; +import org.fest.swing.annotation.GUITest; +import org.fest.swing.edt.FailOnThreadViolationRepaintManager; +import org.fest.swing.edt.GuiActionRunner; +import org.fest.swing.edt.GuiTask; +import org.fest.swing.fixture.FrameFixture; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.data.time.TimeSeriesCollection; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(CacioFESTRunner.class) +public class RecentTimeSeriesChartPanelTest { + + private RecentTimeSeriesChartPanel recentTimeSeriesChartPanel; + private RecentTimeSeriesChartController controller; + private JFreeChart chart; + private final TimeSeriesCollection dataset = new TimeSeriesCollection(); + private final int ESCAPE = 27; + + private JFrame frame; + private FrameFixture frameFixture; + + @BeforeClass + public static void setupOnce() { + FailOnThreadViolationRepaintManager.install(); + } + + @Before + public void setUp() { + chart = ChartFactory.createTimeSeriesChart( + null, + "Time Label", + "Value Label", + dataset, + false, false, false); + GuiActionRunner.execute(new GuiTask() { + @Override + protected void executeInEDT() throws Throwable { + controller = new RecentTimeSeriesChartController(chart); + recentTimeSeriesChartPanel = new RecentTimeSeriesChartPanel(controller); + frame = new JFrame(); + frame.add(recentTimeSeriesChartPanel); + } + }); + frameFixture = new FrameFixture(frame); + frameFixture.show(); + } + + @After + public void tearDown() { + recentTimeSeriesChartPanel = null; + frameFixture.cleanUp(); + frameFixture = null; + } + + @GUITest + @Test + public void testDurationChangeFiresPropertyChange() { + + frameFixture.textBox("durationSelector").selectAll(); + frameFixture.textBox("durationSelector").enterText("5"); + frameFixture.textBox("durationSelector").pressKey(ESCAPE); + assertEquals(5, controller.getTimeValue()); + assertEquals(TimeUnit.MINUTES, controller.getTimeUnit()); + } + + @GUITest + @Test + public void testTimeUnitChangeFiresPropertyChange() { + + frameFixture.comboBox("unitSelector").selectItem(1); + assertEquals(10, controller.getTimeValue()); + assertEquals(TimeUnit.HOURS, controller.getTimeUnit()); + } + + @GUITest + @Test + public void testSetDataInformationLabel() { + recentTimeSeriesChartPanel.setDataInformationLabel("15"); + assertEquals("15", frameFixture.textBox("crossHair").text()); + } +} diff -r 7163ecc4e8ed -r 0918853b8190 client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/RecentTimeControlPanelTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/RecentTimeControlPanelTest.java Fri Dec 12 14:29:03 2014 -0500 @@ -0,0 +1,177 @@ +/* + * Copyright 2012-2014 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.client.swing.components.experimental; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.concurrent.TimeUnit; + +import javax.swing.JFrame; +import javax.swing.JComboBox; + +import com.redhat.thermostat.client.core.experimental.Duration; +import net.java.openjdk.cacio.ctc.junit.CacioFESTRunner; +import org.fest.swing.annotation.GUITest; +import org.fest.swing.edt.FailOnThreadViolationRepaintManager; +import org.fest.swing.edt.GuiActionRunner; +import org.fest.swing.edt.GuiQuery; +import org.fest.swing.edt.GuiTask; +import org.fest.swing.fixture.FrameFixture; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(CacioFESTRunner.class) +public class RecentTimeControlPanelTest { + + private RecentTimeControlPanel recentTimeControlPanel; + private Duration duration; + private JFrame frame; + private FrameFixture frameFixture; + private final int ESCAPE = 27; + + @BeforeClass + public static void setupOnce() { + FailOnThreadViolationRepaintManager.install(); + } + + @Before + public void setUp() { + duration = new Duration(10, TimeUnit.MINUTES); + + GuiActionRunner.execute(new GuiTask() { + @Override + protected void executeInEDT() throws Throwable { + recentTimeControlPanel = new RecentTimeControlPanel(duration); + frame = new JFrame(); + frame.add(recentTimeControlPanel); + } + }); + frameFixture = new FrameFixture(frame); + frameFixture.show(); + } + + @After + public void tearDown() { + frameFixture.cleanUp(); + frameFixture = null; + } + + @GUITest + @Test + public void testComboBoxHasAppropriateValues() { + assertEquals(RecentTimeControlPanel.DEFAULT_TIMEUNITS.length, frameFixture.comboBox("unitSelector").contents().length); + int length = RecentTimeControlPanel.DEFAULT_TIMEUNITS.length; + for (int i = 0; i < length; i++) { + assertEquals(RecentTimeControlPanel.DEFAULT_TIMEUNITS[i].toString(), frameFixture.comboBox("unitSelector").valueAt(i)); + } + } + + @GUITest + @Test + public void testComboBoxSelecting() { + int length = RecentTimeControlPanel.DEFAULT_TIMEUNITS.length; + for (int i = 0; i < length; i++) { + frameFixture.comboBox("unitSelector").selectItem(i); + assertEquals(RecentTimeControlPanel.DEFAULT_TIMEUNITS[i].toString(), selectedItemOf(frameFixture.comboBox("unitSelector").component())); + } + } + + @GUITest + @Test + public void testTextFieldUpdates() { + frameFixture.textBox("durationSelector").selectAll(); + frameFixture.textBox("durationSelector").enterText("5"); + frameFixture.textBox("durationSelector").pressKey(ESCAPE); + assertEquals("5", frameFixture.textBox("durationSelector").text()); + } + + @GUITest + @Test + public void testTextFieldUpdatingFiresTimeChangeListener() { + final boolean[] b = new boolean[] {false}; + + recentTimeControlPanel.addPropertyChangeListener(SingleValueChartPanel.PROPERTY_VISIBLE_TIME_RANGE, new PropertyChangeListener() { + @Override + public void propertyChange(final PropertyChangeEvent evt) { + Duration d = (Duration) evt.getNewValue(); + if (d.unit.equals(TimeUnit.MINUTES) && d.value == 5) { + b[0] = true; + } + } + }); + + frameFixture.textBox("durationSelector").selectAll(); + frameFixture.textBox("durationSelector").enterText("5"); + frameFixture.textBox("durationSelector").pressKey(27); + + assertEquals("5", frameFixture.textBox("durationSelector").text()); + assertTrue(b[0]); + } + + @GUITest + @Test + public void testComboBoxUpdatingFiresTimeChangeListener() { + final boolean[] b = new boolean[] {false}; + + recentTimeControlPanel.addPropertyChangeListener(SingleValueChartPanel.PROPERTY_VISIBLE_TIME_RANGE, new PropertyChangeListener() { + @Override + public void propertyChange(final PropertyChangeEvent evt) { + Duration d = (Duration) evt.getNewValue(); + if (d.unit.equals(TimeUnit.HOURS) && d.value == 10) { + b[0] = true; + } + } + }); + + frameFixture.comboBox("unitSelector").selectItem(1); + + assertTrue(b[0]); + } + public static String selectedItemOf(final JComboBox comboBox) { + return GuiActionRunner.execute(new GuiQuery() { + public String executeInEDT() { + return comboBox.getSelectedItem().toString(); + } + }); + } +} diff -r 7163ecc4e8ed -r 0918853b8190 client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/SingleValueChartPanelTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/swing/src/test/java/com/redhat/thermostat/client/swing/components/experimental/SingleValueChartPanelTest.java Fri Dec 12 14:29:03 2014 -0500 @@ -0,0 +1,176 @@ +/* + * Copyright 2012-2014 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.client.swing.components.experimental; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.concurrent.TimeUnit; +import javax.swing.JFrame; + +import com.redhat.thermostat.client.core.experimental.Duration; +import net.java.openjdk.cacio.ctc.junit.CacioFESTRunner; +import org.fest.swing.annotation.GUITest; +import org.fest.swing.edt.FailOnThreadViolationRepaintManager; +import org.fest.swing.edt.GuiActionRunner; +import org.fest.swing.edt.GuiTask; +import org.fest.swing.fixture.FrameFixture; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.data.time.TimeSeriesCollection; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(CacioFESTRunner.class) +public class SingleValueChartPanelTest { + + private SingleValueChartPanel singleValueChartPanel; + private final TimeSeriesCollection dataset = new TimeSeriesCollection(); + private Duration duration; + private JFreeChart chart; + private static final int DEFAULT_VALUE = 10; + private static final TimeUnit DEFAULT_UNIT = TimeUnit.MINUTES; + private final int ESCAPE = 27; + + private JFrame frame; + private FrameFixture frameFixture; + + @BeforeClass + public static void setupOnce() { + FailOnThreadViolationRepaintManager.install(); + } + + @Before + public void setUp() { + chart = ChartFactory.createTimeSeriesChart( + null, + "Time Label", + "Value Label", + dataset, + false, false, false); + duration = new Duration(DEFAULT_VALUE, DEFAULT_UNIT); + GuiActionRunner.execute(new GuiTask() { + @Override + protected void executeInEDT() throws Throwable { + singleValueChartPanel = new SingleValueChartPanel(chart, duration); + frame = new JFrame(); + frame.add(singleValueChartPanel); + } + }); + frameFixture = new FrameFixture(frame); + frameFixture.show(); + } + + @After + public void tearDown() { + singleValueChartPanel = null; + duration = null; + frameFixture.cleanUp(); + frameFixture = null; + } + + @GUITest + @Test + public void testDurationChangeFiresPropertyChange() { + + final boolean[] b = new boolean[] {false}; + + singleValueChartPanel.addPropertyChangeListener(SingleValueChartPanel.PROPERTY_VISIBLE_TIME_RANGE, new PropertyChangeListener() { + @Override + public void propertyChange(final PropertyChangeEvent evt) { + Duration d = (Duration) evt.getNewValue(); + if (d.unit.equals(TimeUnit.MINUTES) && d.value == 5) { + b[0] = true; + } + } + }); + + frameFixture.textBox("durationSelector").selectAll(); + frameFixture.textBox("durationSelector").enterText("5"); + frameFixture.textBox("durationSelector").pressKey(ESCAPE); + assertTrue(b[0]); + } + + @GUITest + @Test + public void testTimeUnitChangeFiresPropertyChange() { + + final boolean[] b = new boolean[] {false}; + + singleValueChartPanel.addPropertyChangeListener(SingleValueChartPanel.PROPERTY_VISIBLE_TIME_RANGE, new PropertyChangeListener() { + @Override + public void propertyChange(final PropertyChangeEvent evt) { + Duration d = (Duration) evt.getNewValue(); + if (d.unit.equals(TimeUnit.HOURS) && d.value == 10) { + b[0] = true; + } + } + }); + + frameFixture.comboBox("unitSelector").selectItem(1); + + assertTrue(b[0]); + } + + @GUITest + @Test + public void testTimeRangeToShow() { + long time = TimeUnit.MILLISECONDS.convert(20, TimeUnit.MINUTES); + singleValueChartPanel.setTimeRangeToShow(20, TimeUnit.MINUTES); + assertEquals(time, (long) chart.getXYPlot().getDomainAxis().getRange().getLength()); + } + + @GUITest + @Test + public void testInitialTimeValue() { + long time = TimeUnit.MILLISECONDS.convert(10, TimeUnit.MINUTES); + assertEquals(time, (long) chart.getXYPlot().getDomainAxis().getRange().getLength()); + } + + @GUITest + @Test + public void testSetDataInformationLabel() { + singleValueChartPanel.setDataInformationLabel("15"); + assertEquals("15", frameFixture.textBox("crossHair").text()); + } + +}