Files
JIMRI/java/test/jmri/jmrix/can/cbus/eventtable/CbusEventTableXmlActionTest.java
T
2026-06-17 14:00:51 +02:00

205 lines
8.0 KiB
Java

package jmri.jmrix.can.cbus.eventtable;
import java.io.File;
import jmri.jmrix.can.CanSystemConnectionMemo;
import jmri.util.JUnitAppender;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.io.TempDir;
import static org.junit.jupiter.api.Assertions.*;
/**
*
* @author Paul Bender Copyright (C) 2017
* @author Steve Young Copyright (C) 2019
*/
public class CbusEventTableXmlActionTest {
@Test
public void testLoadXmlNoFilePresent() {
assertEquals( 0, model.getRowCount());
CbusEventTableXmlAction.restoreEventsFromXmlTablestart(model);
assertEquals( 0, model.getRowCount());
}
@Test
public void testLoadGoodFile() throws java.io.IOException, java.text.ParseException {
CbusEventTableXmlFile x = new CbusEventTableXmlFile(memo);
java.io.File dir = new java.io.File("java/test/jmri/jmrix/can/cbus/eventtable/");
java.io.File systemFile = new java.io.File(dir, "EventTableData-1.xml");
java.nio.file.Files.copy(systemFile.toPath(), x.getFile(true).toPath(),
java.nio.file.StandardCopyOption.REPLACE_EXISTING);
CbusEventTableXmlAction.restoreEventsFromXmlTablestart(model);
assertEquals( 3, model.getRowCount());
CbusTableEvent te = model.provideEvent(0,1);
assertNotNull(te);
assertEquals( "Short Event 1", te.getName() );
assertEquals( "Short Event 1 Comment", te.getComment() );
assertEquals( 0, te.getTotalOnOff(true) );
assertEquals( 0, te.getTotalOnOff(false) );
assertEquals( 0, te.getTotalInOut(true) );
assertEquals( 0, te.getTotalInOut(false) );
assertEquals(CbusTableEvent.EvState.UNKNOWN,te.getState());
assertNull( te.getDate());
te = model.provideEvent(0,2);
assertNotNull(te);
assertEquals( "Short Event 2",te.getName() );
assertEquals( "Short Event 2 Comment",te.getComment() );
assertEquals( 123456, te.getTotalOnOff(true) );
assertEquals( 234567, te.getTotalOnOff(false) );
assertEquals( 345678, te.getTotalInOut(true) );
assertEquals( 456789, te.getTotalInOut(false) );
assertEquals(CbusTableEvent.EvState.UNKNOWN,te.getState());
assertEquals(CbusEventTableXmlAction.getXmlDateStyle().parse("2019-08-22 15:23:49"), te.getDate());
te = model.provideEvent(65535,65535);
assertNotNull(te);
assertEquals( "Long Event Node 65535 Event 65535",te.getName() );
assertTrue( te.getComment().isEmpty() );
assertEquals( 0, te.getTotalOnOff(true) );
assertEquals( 20, te.getTotalOnOff(false) );
assertEquals( 30, te.getTotalInOut(true) );
assertEquals( 40, te.getTotalInOut(false) );
assertEquals(CbusTableEvent.EvState.UNKNOWN,te.getState());
assertNull(te.getDate());
assertEquals(3,model.getRowCount());
}
@Test
public void testLoadBadFile() throws java.io.IOException {
CbusEventTableXmlFile x = new CbusEventTableXmlFile(memo);
java.io.File dir = new java.io.File("java/test/jmri/jmrix/can/cbus/eventtable/");
java.io.File systemFile = new java.io.File(dir, "EventTableData-2.xml");
java.nio.file.Files.copy(systemFile.toPath(), x.getFile(true).toPath(),
java.nio.file.StandardCopyOption.REPLACE_EXISTING);
CbusEventTableXmlAction.restoreEventsFromXmlTablestart(model);
JUnitAppender.assertErrorMessageStartsWith("Node or event number missing in event [[Attribute: NodeNum");
JUnitAppender.assertErrorMessageStartsWith("Node or event number missing in event [[Attribute: EventNum");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Unable to parse date ");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
JUnitAppender.assertErrorMessageStartsWith("Unable to parse date ");
JUnitAppender.assertErrorMessageStartsWith("Incorrect value in event [[Attribute:");
assertEquals(9,model.getRowCount());
assertTrue(model.getEventTableRow(0,1) >=0 );
assertTrue(model.getEventTableRow(11,22) >=0 );
assertTrue(model.getEventTableRow(11,33) >=0 );
assertTrue(model.getEventTableRow(11,44) >=0 );
assertTrue(model.getEventTableRow(11,55) >=0 );
assertTrue(model.getEventTableRow(22,22) >=0 );
assertTrue(model.getEventTableRow(22,33) >=0 );
assertTrue(model.getEventTableRow(22,44) >=0 );
assertTrue(model.getEventTableRow(22,55) >=0 );
}
@Test
public void testSaveFile() throws java.text.ParseException {
assertEquals( 0, model.getRowCount());
CbusTableEvent event1 = model.provideEvent(111,222);
event1.setCounts(1, 2, 0, 0);
event1.setName("My Test Event 1 Name");
event1.setDate(CbusEventTableXmlAction.getXmlDateStyle().parse("2019-08-22 13:45:49"));
CbusTableEvent event2 = model.provideEvent(333,444);
event2.setCounts(0, 0, 3, 4);
event2.setComment("My Test Event 2 Comment");
assertEquals( 2, model.getRowCount());
CbusEventTableXmlAction.storeEventsToXml(model);
model.clearAllEvents();
assertEquals( 0, model.getRowCount());
CbusEventTableXmlAction.restoreEventsFromXmlTablestart(model);
assertEquals( 2, model.getRowCount());
CbusTableEvent te = model.provideEvent(111,222);
assertNotNull(te);
assertEquals( "My Test Event 1 Name",te.getName() );
assertEquals( "",te.getComment() );
assertEquals( 1, te.getTotalOnOff(true) );
assertEquals( 2, te.getTotalOnOff(false) );
assertEquals( 0, te.getTotalInOut(true) );
assertEquals( 0, te.getTotalInOut(false) );
assertEquals(CbusTableEvent.EvState.UNKNOWN,te.getState());
assertEquals(CbusEventTableXmlAction.getXmlDateStyle().parse("2019-08-22 13:45:49"), te.getDate());
te = model.provideEvent(333,444);
assertNotNull(te);
assertTrue(te.getName().isEmpty() );
assertEquals( "My Test Event 2 Comment",te.getComment() );
assertEquals( 0, te.getTotalOnOff(true) );
assertEquals( 0, te.getTotalOnOff(false) );
assertEquals( 3, te.getTotalInOut(true) );
assertEquals( 4, te.getTotalInOut(false) );
assertEquals(CbusTableEvent.EvState.UNKNOWN,te.getState());
assertNull(te.getDate());
}
private CbusEventTableDataModel model;
private CanSystemConnectionMemo memo = null;
@BeforeEach
public void setUp( @TempDir File tempDir ) throws java.io.IOException {
JUnitUtil.setUp();
JUnitUtil.resetInstanceManager();
JUnitUtil.resetProfileManager( new jmri.profile.NullProfile( tempDir));
memo = new CanSystemConnectionMemo();
memo.setProtocol(jmri.jmrix.can.CanConfigurationManager.SPROGCBUS);
model = new CbusEventTableDataModel( memo, 2);
}
@AfterEach
public void tearDown() {
model.skipSaveOnDispose();
CbusEventTableShutdownTask task = new CbusEventTableShutdownTask("Test Dispose",model);
task.run();
Assertions.assertNotNull(memo);
memo.dispose();
memo = null;
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(CbusEventTableActionTest.class);
}