279 lines
8.6 KiB
Java
279 lines
8.6 KiB
Java
package jmri.jmrix;
|
|
|
|
import java.awt.Toolkit;
|
|
import java.awt.datatransfer.*;
|
|
|
|
import jmri.util.JmriJFrame;
|
|
import jmri.util.JUnitUtil;
|
|
import jmri.util.ThreadingUtil;
|
|
import jmri.util.junit.annotations.DisabledIfHeadless;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
/**
|
|
* JUnit tests for the AbstractMonPane class
|
|
* <p>
|
|
* Not intended to be run by itself, but rather as part of inherited tests
|
|
* <p>
|
|
* Copyright: Copyright (c) 2015</p>
|
|
*
|
|
* @author Bob Jacobsen
|
|
* @author Paul Bender Copyright (C) 2016
|
|
*/
|
|
public abstract class AbstractMonPaneTestBase extends jmri.util.swing.JmriPanelTest {
|
|
|
|
// implementing classes must set pane to the pane under test in setUp.
|
|
protected AbstractMonPane pane = null;
|
|
|
|
// implementing classes must override setUp to set pane
|
|
@BeforeEach
|
|
@Override
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
}
|
|
|
|
@AfterEach
|
|
@Override
|
|
public void tearDown() {
|
|
pane = null;
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
@Test
|
|
public void testConcreteCtor() {
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUIWithJmriException(() -> pane.initComponents() ));
|
|
}
|
|
|
|
@Test
|
|
public void testInsertLine() {
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUIWithJmriException( () -> pane.initComponents() ));
|
|
|
|
setFrameTextOnGUIThread("foo");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return getFrameTextONGUIThread().equals("foo\n");
|
|
}, "frame text");
|
|
assertEquals("foo\n", getFrameTextONGUIThread());
|
|
|
|
setFrameTextOnGUIThread("bar");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return getFrameTextONGUIThread().equals("foo\nbar\n");
|
|
}, "frame text");
|
|
assertEquals("foo\nbar\n", getFrameTextONGUIThread());
|
|
}
|
|
|
|
private void setFrameTextOnGUIThread(String text) {
|
|
ThreadingUtil.runOnGUI(() -> {
|
|
pane.entryField.setText(text);
|
|
pane.enterButtonActionPerformed(null);
|
|
});
|
|
}
|
|
|
|
protected String getFrameTextONGUIThread() {
|
|
return ThreadingUtil.runOnGUIwithReturn(() -> pane.getFrameText());
|
|
}
|
|
|
|
@Test
|
|
public void testClearButton() {
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUI( () -> pane.initComponents() ));
|
|
|
|
setFrameTextOnGUIThread("foo");
|
|
|
|
ThreadingUtil.runOnGUI( () -> pane.clearButtonActionPerformed(null));
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return getFrameTextONGUIThread().equals("");
|
|
}, "frame text");
|
|
assertEquals("", getFrameTextONGUIThread());
|
|
}
|
|
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void testCopyToClipboardButton() {
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUI( () -> pane.initComponents() ));
|
|
|
|
Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
|
|
// reset clipboard from any previous tests
|
|
systemClipboard.setContents(new StringSelection(""), null);
|
|
|
|
setFrameTextOnGUIThread("text in Log");
|
|
ThreadingUtil.runOnGUI( () -> pane.copyToClipBoardButtonActionPerformed(null));
|
|
|
|
JUnitUtil.waitFor( () -> ((String)systemClipboard.getData(DataFlavor.stringFlavor))
|
|
.contains("text in Log"), "log text not moved to clipboard");
|
|
}
|
|
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void testFreezeButton() {
|
|
Assumptions.assumeFalse( Boolean.getBoolean("jmri.skipTestsRequiringSeparateRunning"), "Ignoring intermittent test");
|
|
AbstractMonPaneScaffold s = new AbstractMonPaneScaffold(pane);
|
|
|
|
// for Jemmy to work, we need the pane inside of a frame
|
|
JmriJFrame f = new JmriJFrame();
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUI( () -> pane.initComponents() ));
|
|
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.add(pane);
|
|
// set title if available
|
|
if (pane.getTitle() != null) {
|
|
f.setTitle(pane.getTitle());
|
|
}
|
|
f.pack();
|
|
f.setVisible(true);
|
|
});
|
|
|
|
assertFalse(s.getFreezeButtonState());
|
|
|
|
s.enterTextInEntryField("foo");
|
|
s.clickEnterButton();
|
|
s.clickFreezeButton();
|
|
|
|
new org.netbeans.jemmy.QueueTool().waitEmpty();
|
|
assertTrue(s.getFreezeButtonState());
|
|
|
|
s.enterTextInEntryField("bar");
|
|
s.clickEnterButton();
|
|
|
|
new org.netbeans.jemmy.QueueTool().waitEmpty();
|
|
|
|
assertEquals("foo\n", getFrameTextONGUIThread());
|
|
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.setVisible(false);
|
|
f.dispose();
|
|
});
|
|
}
|
|
|
|
@Test
|
|
public void testFilterFormatting() {
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUI( () -> pane.initComponents() ));
|
|
|
|
setAndCheckFilterTextEntry("00", "00", "filter field unedited");
|
|
|
|
setAndCheckFilterTextEntry("A0", "A0", "filter field unedited");
|
|
|
|
setAndCheckFilterTextEntry("#", "", "filter field rejected");
|
|
|
|
setAndCheckFilterTextEntry("ab", "AB", "filter field edited");
|
|
}
|
|
|
|
protected void setAndCheckFilterTextEntry(String entryText, String resultText, String errorMessage) {
|
|
ThreadingUtil.runOnGUI( () -> pane.setFilterText(entryText));
|
|
assertEquals(resultText,
|
|
ThreadingUtil.runOnGUIwithReturn( () -> pane.getFilterText()), errorMessage);
|
|
}
|
|
|
|
// Test checking the Time Stamp checkbox.
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void checkTimeStampCheckBox() {
|
|
AbstractMonPaneScaffold s = new AbstractMonPaneScaffold(pane);
|
|
|
|
// for Jemmy to work, we need the pane inside of a frame
|
|
JmriJFrame f = new JmriJFrame();
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUI( () -> pane.initComponents() ));
|
|
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.add(pane);
|
|
// set title if available
|
|
if (pane.getTitle() != null) {
|
|
f.setTitle(pane.getTitle());
|
|
}
|
|
f.pack();
|
|
f.setVisible(true);
|
|
});
|
|
|
|
s.checkTimeStampCheckBox();
|
|
assertTrue(s.getTimeStampCheckBoxValue());
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.setVisible(false);
|
|
f.dispose();
|
|
}); }
|
|
|
|
// Test checking the Raw checkbox.
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void checkRawCheckBox() {
|
|
AbstractMonPaneScaffold s = new AbstractMonPaneScaffold(pane);
|
|
|
|
// for Jemmy to work, we need the pane inside of a frame
|
|
JmriJFrame f = new JmriJFrame();
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUI( () -> pane.initComponents() ));
|
|
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.add(pane);
|
|
// set title if available
|
|
if (pane.getTitle() != null) {
|
|
f.setTitle(pane.getTitle());
|
|
}
|
|
f.pack();
|
|
f.setVisible(true);
|
|
});
|
|
s.checkRawCheckBox();
|
|
assertTrue(s.getRawCheckBoxValue());
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.setVisible(false);
|
|
f.dispose();
|
|
}); }
|
|
|
|
// Test checking the Always On Top checkbox.
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void checkOnTopCheckBox() {
|
|
AbstractMonPaneScaffold s = new AbstractMonPaneScaffold(pane);
|
|
|
|
// for Jemmy to work, we need the pane inside of a frame
|
|
JmriJFrame f = new JmriJFrame();
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUI( () -> pane.initComponents() ));
|
|
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.add(pane);
|
|
// set title if available
|
|
if (pane.getTitle() != null) {
|
|
f.setTitle(pane.getTitle());
|
|
}
|
|
f.pack();
|
|
f.setVisible(true);
|
|
});
|
|
s.checkOnTopCheckBox();
|
|
assertTrue(s.getOnTopCheckBoxValue());
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.setVisible(false);
|
|
f.dispose();
|
|
});
|
|
}
|
|
|
|
// Test checking the AutoScroll checkbox.
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void checkAutoScrollCheckBox() {
|
|
AbstractMonPaneScaffold s = new AbstractMonPaneScaffold(pane);
|
|
|
|
// for Jemmy to work, we need the pane inside of a frame
|
|
JmriJFrame f = new JmriJFrame();
|
|
assertDoesNotThrow( () -> ThreadingUtil.runOnGUI( () -> pane.initComponents() ));
|
|
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.add(pane);
|
|
// set title if available
|
|
if (pane.getTitle() != null) {
|
|
f.setTitle(pane.getTitle());
|
|
}
|
|
f.pack();
|
|
f.setVisible(true);
|
|
});
|
|
assertTrue(s.getAutoScrollCheckBoxValue());
|
|
s.checkAutoScrollCheckBox();
|
|
assertFalse(s.getAutoScrollCheckBoxValue());
|
|
ThreadingUtil.runOnGUI( () -> {
|
|
f.setVisible(false);
|
|
f.dispose();
|
|
});
|
|
}
|
|
|
|
}
|