Files
JIMRI/java/test/jmri/jmrit/operations/locations/schedules/SchedulesTableFrameTest.java
T
2026-06-17 14:00:51 +02:00

162 lines
6.1 KiB
Java

package jmri.jmrit.operations.locations.schedules;
import java.awt.Dimension;
import java.text.MessageFormat;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.netbeans.jemmy.operators.JFrameOperator;
import org.netbeans.jemmy.operators.JTableOperator;
import jmri.InstanceManager;
import jmri.jmrit.operations.OperationsTestCase;
import jmri.jmrit.operations.locations.Location;
import jmri.jmrit.operations.locations.LocationManager;
import jmri.jmrit.operations.locations.Track;
import jmri.jmrit.operations.setup.Control;
import jmri.util.JUnitUtil;
import jmri.util.JmriJFrame;
import jmri.util.swing.JemmyUtil;
/**
* @author Paul Bender Copyright (C) 2017
*/
@DisabledIfSystemProperty(named = "java.awt.headless", matches = "true")
public class SchedulesTableFrameTest extends OperationsTestCase {
@Test
public void testCTor() {
SchedulesTableFrame t = new SchedulesTableFrame();
Assert.assertNotNull("exists", t);
JUnitUtil.dispose(t);
}
@Test
public void testFrameId() {
SchedulesTableFrame stf = new SchedulesTableFrame();
Assert.assertNotNull("exists", stf);
ScheduleManager sm = InstanceManager.getDefault(ScheduleManager.class);
LocationManager lm = InstanceManager.getDefault(LocationManager.class);
Location l = lm.newLocation("new test location");
Track t = l.addTrack("track 1", Track.SPUR);
Schedule s1 = sm.newSchedule("b schedule");
sm.newSchedule("a schedule");
ScheduleItem i1 = s1.addItem("BoxCar");
i1.setRoadName("new road");
i1.setReceiveLoadName("new load");
i1.setShipLoadName("new ship load");
t.setSchedule(s1);
SchedulesTableModel stm = stf.schedulesModel;
Assert.assertEquals("Number of rows", 2, stm.getRowCount());
Assert.assertEquals("Id", "2", stm.getValueAt(0, SchedulesTableModel.ID_COLUMN));
JemmyUtil.enterClickAndLeave(stf.sortById);
Assert.assertEquals("Id", "1", stm.getValueAt(0, SchedulesTableModel.ID_COLUMN));
JUnitUtil.dispose(stf);
}
@Test
public void testFrameDelete() {
SchedulesTableFrame stf = new SchedulesTableFrame();
Assert.assertNotNull("exists", stf);
ScheduleManager sm = InstanceManager.getDefault(ScheduleManager.class);
sm.newSchedule("b schedule");
sm.newSchedule("a schedule");
sm.newSchedule("c schedule");
SchedulesTableModel stm = stf.schedulesModel;
Assert.assertEquals("Number of rows", 3, stm.getRowCount());
Assert.assertEquals("Name", "a schedule", stm.getValueAt(0, SchedulesTableModel.NAME_COLUMN));
Assert.assertEquals("Name", "b schedule", stm.getValueAt(1, SchedulesTableModel.NAME_COLUMN));
Assert.assertEquals("Name", "c schedule", stm.getValueAt(2, SchedulesTableModel.NAME_COLUMN));
// delete b schedule
Thread delete = new Thread(new Runnable() {
@Override
public void run() {
stm.setValueAt(null, 1, SchedulesTableModel.DELETE_COLUMN);
}
});
delete.setName("Delete schedule"); // NOI18N
delete.start();
JUnitUtil.waitFor(() -> {
return delete.getState().equals(Thread.State.WAITING);
}, "wait for prompt");
// should bring up confirmation dialog
JemmyUtil.pressDialogButton(Bundle.getMessage("DeleteSchedule?"), Bundle.getMessage("ButtonYes"));
try {
delete.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Assert.assertEquals("Number of rows", 2, stm.getRowCount());
Assert.assertEquals("Name", "a schedule", stm.getValueAt(0, SchedulesTableModel.NAME_COLUMN));
Assert.assertEquals("Name", "c schedule", stm.getValueAt(1, SchedulesTableModel.NAME_COLUMN));
JUnitUtil.dispose(stf);
}
@Test
public void testFrameEdit() {
SchedulesTableFrame stf = new SchedulesTableFrame();
Assert.assertNotNull("exists", stf);
// all buttons must show
stf.setSize(new Dimension(1200, Control.panelHeight250));
ScheduleManager sm = InstanceManager.getDefault(ScheduleManager.class);
Schedule sch = sm.newSchedule("b schedule");
sm.newSchedule("a schedule");
sm.newSchedule("c schedule");
LocationManager lm = InstanceManager.getDefault(LocationManager.class);
Location l = lm.newLocation("Test Location");
Track t = l.addTrack("Test Spur", Track.SPUR);
t.setSchedule(sch);
SchedulesTableModel stm = stf.schedulesModel;
Assert.assertEquals("Number of rows", 3, stm.getRowCount());
Assert.assertEquals("Name", "a schedule", stm.getValueAt(0, SchedulesTableModel.NAME_COLUMN));
Assert.assertEquals("Name", "b schedule", stm.getValueAt(1, SchedulesTableModel.NAME_COLUMN));
Assert.assertEquals("Name", "c schedule", stm.getValueAt(2, SchedulesTableModel.NAME_COLUMN));
JFrameOperator jfo = new JFrameOperator(stf);
JTableOperator tbl = new JTableOperator(jfo);
// test edit route location no track assignment
JemmyUtil.clickOnCellThreadSafe(tbl, 0, Bundle.getMessage("ButtonEdit"));
JemmyUtil.pressDialogButton(MessageFormat.format(Bundle.getMessage("CanNotSchedule"),
new Object[]{Bundle.getMessage("ButtonEdit")}), Bundle.getMessage("ButtonOK"));
tbl.clickOnCell(1, tbl.findColumn(Bundle.getMessage("ButtonEdit")));
// confirm edit schedule frame exists
JUnitUtil.waitFor(() -> {
return JmriJFrame.getFrame(MessageFormat.format(Bundle.getMessage("TitleScheduleEdit"),
new Object[]{t.getName()})) != null;
},"frame located");
// dispose also closes schedule edit frame
JUnitUtil.dispose(stf);
JmriJFrame sef = JmriJFrame.getFrame(MessageFormat.format(Bundle.getMessage("TitleScheduleEdit"),
new Object[]{t.getName()}));
Assert.assertNull(sef);
}
}