package nl.tudelft.bw4t.botstore.boteditorpanel;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import nl.tudelft.bw4t.scenariogui.BW4TClientConfig;
import nl.tudelft.bw4t.scenariogui.BotConfig;
import nl.tudelft.bw4t.scenariogui.ScenarioEditor;
import nl.tudelft.bw4t.scenariogui.botstore.controller.BotController;
import nl.tudelft.bw4t.scenariogui.botstore.gui.BotEditor;
import nl.tudelft.bw4t.scenariogui.botstore.gui.BotEditorPanel;
import nl.tudelft.bw4t.scenariogui.botstore.gui.BotStoreViewInterface;
import nl.tudelft.bw4t.scenariogui.editor.gui.ConfigurationPanel;
import nl.tudelft.bw4t.scenariogui.editor.gui.EntityPanel;
import nl.tudelft.bw4t.scenariogui.editor.gui.MainPanel;
import nl.tudelft.bw4t.scenariogui.util.OptionPrompt;
import nl.tudelft.bw4t.scenariogui.util.OptionPromptHelper;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Test the boteditorpanel
*/
public class BotEditorPanelTest {
private ScenarioEditor scenarioEditor;
private BotEditor editor;
private BotEditorPanel panel;
private BotEditorPanel spypanel;
@Before
public final void setUp() {
EntityPanel entityPanel = new EntityPanel();
scenarioEditor = new ScenarioEditor(new ConfigurationPanel(),
entityPanel, new BW4TClientConfig());
scenarioEditor.getController().getModel().getBots()
.add(new BotConfig());
MainPanel parent = scenarioEditor.getMainPanel();
BotController controller = new BotController(parent, 0, scenarioEditor
.getController().getModel());
editor = new BotEditor(controller);
panel = new BotEditorPanel(controller);
spypanel = spy(panel);
}
@After
public final void dispose() {
editor.dispose();
scenarioEditor.dispose();
}
@Test
public final void testInitialSliders() {
int speed = 50;
int size = 2;
int cap = 10;
int grippers = 1;
assertEquals(speed, spypanel.getBotSpeed());
assertEquals(size, spypanel.getBotSize());
assertEquals(cap, spypanel.getBotBatteryCapacity());
assertEquals(grippers, spypanel.getGrippers());
}
/** Test the reset button to see if the configuration stays the same. */
@Test
public final void testResetButtonForBotSpecClick() {
BotStoreViewInterface bep = editor.getBotEditorPanel();
BotConfig config = editor.getController().getBotConfig();
editor.getBotEditorPanel().getResetButton().doClick();
assertEquals(config.getBotSpeed(), bep.getBotSpeed());
assertEquals(config.getBotSize(), bep.getBotSize());
assertEquals(config.getBotBatteryCapacity(),
bep.getBotBatteryCapacity());
assertEquals(config.getGrippers(), bep.getGrippers());
assertEquals(config.getSizeOverloadHandicap(),
bep.getSizeOverloadHandicap());
assertEquals(config.getMoveSpeedHandicap(), bep.getMoveSpeedHandicap());
assertEquals(config.isBatteryEnabled(), bep.isBatteryEnabled());
assertEquals(config.getGripperHandicap(), bep.getGripperHandicap());
assertEquals(config.getColorBlindHandicap(),
bep.getColorBlindHandicap());
}
@Test
public final void testModifySliders() {
int speed = 100;
int size = 5;
int cap = 100;
int grippers = 5;
spypanel.getSpeedSlider().setValue(speed);
spypanel.getSizeSlider().setValue(size);
spypanel.getBatterySlider().setValue(cap);
spypanel.getNumberOfGrippersSlider().setValue(5);
assertEquals(speed, spypanel.getBotSpeed());
assertEquals(size, spypanel.getBotSize());
assertEquals(cap, spypanel.getBotBatteryCapacity());
assertEquals(grippers, spypanel.getGrippers());
}
@Test
public final void testInitialHandicaps() {
assertFalse(spypanel.getGripperHandicap());
assertFalse(spypanel.getColorBlindHandicap());
assertFalse(spypanel.getSizeOverloadHandicap());
assertFalse(spypanel.getMoveSpeedHandicap());
assertFalse(spypanel.isBatteryEnabled());
}
@Test
public final void testModifyCheckBoxes() {
spypanel.getGripperCheckbox().setSelected(true);
spypanel.getColorblindCheckbox().setSelected(true);
spypanel.getCustomSizeCheckbox().setSelected(true);
spypanel.getMovespeedCheckbox().setSelected(true);
spypanel.getBatteryEnabledCheckbox().setSelected(true);
assertTrue(spypanel.getGripperCheckbox().isSelected());
assertTrue(spypanel.getColorblindCheckbox().isSelected());
assertTrue(spypanel.getCustomSizeCheckbox().isSelected());
assertTrue(spypanel.getMovespeedCheckbox().isSelected());
assertTrue(spypanel.getBatteryEnabledCheckbox().isSelected());
}
@Test
public final void testSpeedSliderValue() {
int i = editor.getBotEditorPanel().getSpeedSlider().getValue();
assertEquals(50, i);
}
@Test
public final void testSpeedSliderEnable() {
editor.getBotEditorPanel().getMovespeedCheckbox().doClick();
assertTrue(editor.getBotEditorPanel().getSpeedSlider().isEnabled());
}
@Test
public final void testSizeSliderEnable() {
editor.getBotEditorPanel().getCustomSizeCheckbox().doClick();
assertTrue(editor.getBotEditorPanel().getSizeSlider().isEnabled());
}
@Test
public final void testCapacitySliderEnable() {
editor.getBotEditorPanel().getBatteryEnabledCheckbox().doClick();
assertTrue(editor.getBotEditorPanel().getBatterySlider().isEnabled());
}
@Test
public final void testSpeedSliderDisable() {
editor.getBotEditorPanel().getMovespeedCheckbox().setSelected(true);
editor.getBotEditorPanel().getMovespeedCheckbox().doClick();
assertFalse(editor.getBotEditorPanel().getSpeedSlider().isEnabled());
}
@Test
public final void testSizeSliderDisable() {
editor.getBotEditorPanel().getCustomSizeCheckbox().setSelected(true);
editor.getBotEditorPanel().getCustomSizeCheckbox().doClick();
assertFalse(editor.getBotEditorPanel().getSizeSlider().isEnabled());
}
@Test
public final void testCapacitySliderDisable() {
editor.getBotEditorPanel().getBatteryEnabledCheckbox()
.setSelected(true);
editor.getBotEditorPanel().getBatteryEnabledCheckbox().doClick();
assertFalse(editor.getBotEditorPanel().getBatterySlider().isEnabled());
}
@Test
public final void testGripperSliderDisable() {
editor.getBotEditorPanel().getGripperCheckbox().setSelected(false);
editor.getBotEditorPanel().getGripperCheckbox().doClick();
assertFalse(editor.getBotEditorPanel().getNumberOfGrippersSlider()
.isEnabled());
}
@Test
public final void testGripperSliderEnable() {
editor.getBotEditorPanel().getGripperCheckbox().setSelected(true);
editor.getBotEditorPanel().getGripperCheckbox().doClick();
assertTrue(editor.getBotEditorPanel().getNumberOfGrippersSlider()
.isEnabled());
}
@Test
public final void testColorBlindCheckbox() {
final BotEditorPanel bep = editor.getBotEditorPanel();
assertFalse(bep.getColorBlindHandicap());
bep.getColorblindCheckbox().doClick();
assertTrue(bep.getColorBlindHandicap());
}
@Test
public final void testResetButtonClick() {
BotEditorPanel botEditorPanel = editor.getBotEditorPanel();
BotConfig config = botEditorPanel.getBotController().getBotConfig();
botEditorPanel.getResetButton().doClick();
assertEquals(botEditorPanel.getSpeedSlider().getValue(),
config.getBotSpeed());
assertEquals(botEditorPanel.getSizeSlider().getValue(),
config.getBotSize());
assertEquals(botEditorPanel.getBatterySlider().getValue(),
config.getBotBatteryCapacity());
assertEquals(botEditorPanel.getNumberOfGrippersSlider().getValue(),
config.getGrippers());
assertEquals(botEditorPanel.getSizeSlider().isEnabled(),
config.getSizeOverloadHandicap());
assertEquals(botEditorPanel.getSpeedSlider().isEnabled(),
config.getMoveSpeedHandicap());
assertEquals(botEditorPanel.getBatterySlider().isEnabled(),
config.isBatteryEnabled());
assertEquals(botEditorPanel.getBatterySlider().getValue(),
config.getBotBatteryCapacity());
assertEquals(botEditorPanel.getNumberOfGrippersSlider().isEnabled(),
!config.getGripperHandicap());
assertEquals(botEditorPanel.getGripperCheckbox().isSelected(),
config.getGripperHandicap());
assertEquals(botEditorPanel.getColorblindCheckbox().isSelected(),
config.getColorBlindHandicap());
assertEquals(botEditorPanel.getCustomSizeCheckbox().isSelected(),
config.getSizeOverloadHandicap());
assertEquals(botEditorPanel.getMovespeedCheckbox().isSelected(),
config.getMoveSpeedHandicap());
assertEquals(botEditorPanel.getBatteryEnabledCheckbox().isSelected(),
config.isBatteryEnabled());
assertEquals(botEditorPanel.getFileNameField().getText(),
config.getFileName());
assertEquals(botEditorPanel.getBotNameField().getText(),
config.getBotName());
assertEquals(botEditorPanel.getBotReferenceField().getText(),
config.getReferenceName());
}
@Test
public final void testValidFileNamePrompt() {
OptionPrompt spyOption = OptionPromptHelper.getNoOptionPrompt();
ScenarioEditor.setOptionPrompt(spyOption);
editor.getBotEditorPanel().getBotNameField().setText("");
editor.getBotEditorPanel().getSaveButton().doClick();
verify(spyOption, times(1)).showMessageDialog(
editor.getBotEditorPanel(),
"Please specify a file name"
+ " consisting of valid alphanumeric characters"
+ " or use an existing file.");
}
@Test
public final void testFileNameEndPrompt() {
OptionPrompt spyOption = OptionPromptHelper.getNoOptionPrompt();
ScenarioEditor.setOptionPrompt(spyOption);
editor.getBotEditorPanel().getBotNameField().setText("bob");
editor.getBotEditorPanel().getFileNameField().setText("bob");
editor.getBotEditorPanel().getSaveButton().doClick();
verify(spyOption, times(1)).showMessageDialog(
editor.getBotEditorPanel(),
"The file name is invalid.\n"
+ "File names should end in .goal.");
}
@Test
public final void testNoFileNameEndPrompt() {
OptionPrompt spyOption = OptionPromptHelper.getNoOptionPrompt();
ScenarioEditor.setOptionPrompt(spyOption);
editor.getBotEditorPanel().getBotNameField().setText("bob");
editor.getBotEditorPanel().getFileNameField().setText(".goal");
editor.getBotEditorPanel().getSaveButton().doClick();
verify(spyOption, times(1)).showMessageDialog(
editor.getBotEditorPanel(), "Please specify a file name.");
}
@Test
public final void testSaveButton() {
BotEditorPanel botEditorPanel = editor.getBotEditorPanel();
BotConfig config = botEditorPanel.getBotController().getBotConfig();
editor.getBotEditorPanel().getBotNameField().setText("bob");
editor.getBotEditorPanel().getBotAmountTextField().setText("10");
editor.getBotEditorPanel().getBotReferenceField().setText("bobrobot");
editor.getBotEditorPanel().getFileNameField().setText("bob.goal");
editor.getBotEditorPanel().getSaveButton().doClick();
assertEquals(botEditorPanel.getBotNameField().getText(),
config.getBotName());
assertEquals(Integer.parseInt(botEditorPanel.getBotAmountTextField()
.getText()), config.getBotAmount());
assertEquals(botEditorPanel.getBotReferenceField().getText(),
config.getReferenceName());
assertEquals(botEditorPanel.getFileNameField().getText(),
config.getFileName());
}
@Test
public void testBatteryDischargeRate() {
BotEditorPanel botEditorPanel = editor.getBotEditorPanel();
BotConfig config = botEditorPanel.getBotController().getBotConfig();
botEditorPanel.setBatterySliderEnabled(true);
botEditorPanel.getSizeSlider().setValue(4);
botEditorPanel.getSpeedSlider().setValue(80);
double optimalDischarge = 0.0002 * 4 + 0.0004 * 80;
assertEquals(config.getBotBatteryDischargeRate(), optimalDischarge, 1);
}
}