package jmri.jmrix.roco.z21; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import jmri.InstanceManager; import jmri.MeterManager; import jmri.util.JUnitUtil; import org.junit.jupiter.api.*; /** * * @author Paul Bender Copyright (C) 2017 * @author Daniel Bergqvist Copyright (C) 2020 */ public class Z21PredefinedMetersTest { private Z21InterfaceScaffold tc; private Z21SystemConnectionMemo memo; private double getCurrent() { var meter = InstanceManager.getDefault(MeterManager.class).getBySystemName("ZVCommandStationCurrent"); return ( meter == null ? -9999 : meter.getKnownAnalogValue()); } private double getVoltage() { var meter = InstanceManager.getDefault(MeterManager.class).getBySystemName("ZVCommandStationVoltage"); return ( meter == null ? -9999 : meter.getKnownAnalogValue()); } @Test public void testMeters() { byte msg[] = { (byte) 0x14, (byte) 0x00, // Length (byte) 0x84, (byte) 0x00, // Header (byte) 0x00, (byte) 0x00, // Main current (byte) 0x00, (byte) 0x00, // Prog current (byte) 0x00, (byte) 0x00, // Filtered main current (byte) 0x00, (byte) 0x00, // Temperature (byte) 0x00, (byte) 0x00, // Supply voltage (byte) 0x00, (byte) 0x00, // VCC voltage (byte) 0x00, (byte) 0x00, // Central state, Central state ex (byte) 0x00, (byte) 0x00}; // reserved, reserved msg[4] = 8; msg[5] = 0; // 8 mA current Z21Reply reply = new Z21Reply(msg, 20); tc.sendTestMessage(reply); assertEquals(8, getCurrent(), 0.001 ); msg[4] = 23; msg[5] = 2; // 535 mA current reply = new Z21Reply(msg, 20); tc.sendTestMessage(reply); assertEquals(535, getCurrent(), 0.001 ); msg[14] = 8; msg[15] = 0; // 8 mV voltage reply = new Z21Reply(msg, 20); tc.sendTestMessage(reply); assertEquals(8, getVoltage(), 0.001 ); msg[14] = 23; msg[15] = 2; // 535 mV voltage reply = new Z21Reply(msg, 20); tc.sendTestMessage(reply); assertEquals(535, getVoltage(), 0.001 ); } @BeforeEach public void setUp() { JUnitUtil.setUp(); // This test requires a registred connection config since ProxyMeterManager // auto creates system meter managers using the connection configs. InstanceManager.setDefault(jmri.jmrix.ConnectionConfigManager.class, new jmri.jmrix.ConnectionConfigManager()); jmri.jmrix.NetworkPortAdapter pa = new jmri.jmrix.roco.z21.Z21Adapter(); pa.setSystemPrefix("Z"); jmri.jmrix.ConnectionConfig cc = new jmri.jmrix.roco.z21.ConnectionConfig(pa); InstanceManager.getDefault(jmri.jmrix.ConnectionConfigManager.class).add(cc); // infrastructure objects tc = new Z21InterfaceScaffold(); memo = new Z21SystemConnectionMemo(); memo.setTrafficController(tc); memo.setRocoZ21CommandStation(new RocoZ21CommandStation()); assertNotNull( new Z21PredefinedMeters(memo)); } @AfterEach public void tearDown(){ tc.terminateThreads(); memo.dispose(); memo = null; tc = null; JUnitUtil.tearDown(); } // private static final Logger log = LoggerFactory.getLogger(DCCppMultiMeterTest.class); }