//=============================================================================
// 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;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JSlider;
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.maths.random.Probability;
/**
* Unit test for the {@link ProbabilityParameterControl} component.
* @author Daniel Dyer
*/
public class ProbabilityParameterControlTest
{
private Robot robot;
@BeforeMethod(groups = "display-required")
public void prepare()
{
robot = BasicRobot.robotWithNewAwtHierarchy();
}
@AfterMethod(groups = "display-required")
public void cleanUp()
{
robot.cleanUp();
robot = null;
}
@Test
public void testDefaultValue()
{
Probability defaultValue = new Probability(0.75d);
ProbabilityParameterControl control = new ProbabilityParameterControl(defaultValue);
assert control.getNumberGenerator().nextValue().equals(defaultValue) : "Wrong initial value.";
}
/**
* Initial value must not be less than the minimum.
*/
@Test(expectedExceptions = IllegalArgumentException.class)
public void testDefaultValueTooLow()
{
new ProbabilityParameterControl(Probability.EVENS,
Probability.ONE,
2,
new Probability(0.45d)); // Should throw an IllegalArgumentException.
}
/**
* Initial value must not be less than the minimum.
*/
@Test(expectedExceptions = IllegalArgumentException.class)
public void testDefaultValueTooHigh()
{
new ProbabilityParameterControl(Probability.ZERO,
Probability.EVENS,
2,
new Probability(0.55d)); // Should throw an IllegalArgumentException.
}
/**
* Minimum must be less than maximum.
*/
@Test(expectedExceptions = IllegalArgumentException.class)
public void testMinimumHigherThanMaximum()
{
new ProbabilityParameterControl(new Probability(0.7d),
new Probability(0.6d),
2,
new Probability(0.7d)); // Should throw an IllegalArgumentException.
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testInvalidDecimalPlaces()
{
new ProbabilityParameterControl(Probability.ZERO,
Probability.ONE,
0, // Invalid, should trigger IllegalArgumentException.
Probability.EVENS);
}
@Test(dependsOnMethods = "testDefaultValue",
groups = "display-required")
public void testSlider()
{
Probability defaultValue = new Probability(0.75d);
ProbabilityParameterControl control = new ProbabilityParameterControl(defaultValue);
JFrame frame = new JFrame();
frame.add(control.getControl(), BorderLayout.CENTER);
FrameFixture frameFixture = new FrameFixture(robot, frame);
frame.setSize(300, 50);
frame.validate();
frame.setVisible(true);
JSlider slider = frameFixture.slider().component();
assert slider.getValue() == 75 : "Wrong slider position: " + slider.getValue();
String displayedValue = frameFixture.label().text();
assert displayedValue.equals("0.75") : "Wrong value displayed: " + displayedValue;
frameFixture.slider().slideTo(80); // 80 ticks is a probability of 0.8.
robot.waitForIdle();
double probability = control.getNumberGenerator().nextValue().doubleValue();
assert probability == 0.8 : "Wrong probability: " + probability;
displayedValue = frameFixture.label().text();
assert displayedValue.equals("0.80") : "Wrong value displayed: " + displayedValue;
}
@Test(dependsOnMethods = "testSlider",
groups = "display-required")
public void testReset()
{
Probability defaultValue = new Probability(0.75d);
ProbabilityParameterControl control = new ProbabilityParameterControl(defaultValue);
JFrame frame = new JFrame();
frame.add(control.getControl(), BorderLayout.CENTER);
FrameFixture frameFixture = new FrameFixture(robot, frame);
frame.setSize(300, 50);
frame.validate();
frame.setVisible(true);
JSlider slider = frameFixture.slider().component();
frameFixture.slider().slideTo(80); // 80 ticks is a probability of 0.8.
control.reset();
assert control.getNumberGenerator().nextValue().equals(defaultValue) : "NumberGenerator reset failed.";
assert slider.getValue() == 75 : "JSlider reset failed.";
String displayedValue = frameFixture.label().text();
assert displayedValue.equals("0.75") : "Wrong value displayed: " + displayedValue;
}
}