/*
Copywrite 2016 Will Winder
This file is part of Universal Gcode Sender (UGS).
UGS 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 3 of the License, or
(at your option) any later version.
UGS 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 UGS. If not, see <http://www.gnu.org/licenses/>.
*/
package com.willwinder.universalgcodesender.uielements.components;
import com.willwinder.universalgcodesender.uielements.components.CommandTextArea;
import com.willwinder.universalgcodesender.model.BackendAPI;
import com.willwinder.universalgcodesender.utils.GUIHelpers;
import java.awt.event.KeyEvent;
import java.lang.reflect.Field;
import org.easymock.EasyMock;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.BeforeClass;
/**
*
* @author wwinder
*/
public class CommandTextAreaTest {
CommandTextArea cta;
BackendAPI backend = EasyMock.mock(BackendAPI.class);
private static int[] directions = {
KeyEvent.VK_UP,
KeyEvent.VK_DOWN,
KeyEvent.VK_LEFT,
KeyEvent.VK_RIGHT
};
@BeforeClass
static public void testSetup() throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
// Initialize private variable.
Field f = GUIHelpers.class.getDeclaredField("unitTestMode");
f.setAccessible(true);
f.set(null, true);
}
@AfterClass
static public void testTeardown() throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
// Initialize private variable.
Field f = GUIHelpers.class.getDeclaredField("unitTestMode");
f.setAccessible(true);
f.set(null, false);
}
@Before
public void setup() {
cta = new CommandTextArea(backend);
cta.focusNotNeeded = true;
EasyMock.reset(backend);
}
@After
public void teardown() {
cta = null;
}
private static void sendArrowEvent(int e, CommandTextArea source) {
switch (e) {
case KeyEvent.VK_UP:
case KeyEvent.VK_DOWN:
case KeyEvent.VK_LEFT:
case KeyEvent.VK_RIGHT:
KeyEvent key = new KeyEvent(
source,
KeyEvent.KEY_PRESSED,
System.currentTimeMillis(),
0,
e,
'Z');
source.dispatchKeyEvent(key);
}
}
/**
* Verify that the arrow keys don't do anything when there are no commands,
* and when you try to go past the last commands.
*/
@Test
public void noCommands() throws InterruptedException {
// No commands should be sent.
EasyMock.replay(backend);
for (int dir : directions) {
sendArrowEvent(dir, cta);
assertEquals("", cta.getText());
}
EasyMock.verify(backend);
}
/**
* Send one command.
* @throws Exception
*/
@Test
public void commandAction() throws Exception {
String command = "some-command";
backend.sendGcodeCommand(command);
EasyMock.expect(EasyMock.expectLastCall()).once();
EasyMock.replay(backend);
cta.setText(command);
cta.action(null);
assertEquals("", cta.getText());
EasyMock.verify(backend);
}
/**
* Send 10 commands, verify history works.
* @throws Exception
*/
@Test
public void multipleCommands() throws Exception {
int num = 10;
for (int i = 0 ; i < num; i++) {
String command = "" + i;
backend.sendGcodeCommand(command);
EasyMock.expect(EasyMock.expectLastCall()).once();
}
cta.hasFocus();
EasyMock.replay(backend);
for (int i = 0; i < num; i++) {
cta.setText("" + i);
cta.action(null);
}
assertEquals("", cta.getText());
// Go all the way back.
for (int i = 0; i < num; i++) {
sendArrowEvent(KeyEvent.VK_UP, cta);
assertEquals("" + (num-1-i), cta.getText());
}
// Can't go past the end.
sendArrowEvent(KeyEvent.VK_UP, cta);
assertEquals("0", cta.getText());
sendArrowEvent(KeyEvent.VK_UP, cta);
assertEquals("0", cta.getText());
// Go back to the front.
for (int i = 8; i >= 0; i--) {
sendArrowEvent(KeyEvent.VK_DOWN, cta);
assertEquals("" + (num-1-i), cta.getText());
}
// Go back to an empty command.
sendArrowEvent(KeyEvent.VK_DOWN, cta);
assertEquals("", cta.getText());
EasyMock.verify(backend);
}
}