Files
2026-06-17 14:00:51 +02:00

92 lines
2.7 KiB
Java

package jmri.jmrix.mqtt;
import static org.junit.jupiter.api.Assertions.assertEquals;
import jmri.Light;
import jmri.implementation.AbstractLightTestBase;
import jmri.util.*;
import org.junit.jupiter.api.*;
/**
* Tests for MqttLight class.
*
* @author Bob Jacobsen Copyright (C) 2018
* @since 4.11.5
*/
public class MqttLightTest extends AbstractLightTestBase {
private MqttAdapterScaffold a = null;
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.initDefaultUserMessagePreferences();
// prepare an interface
a = new MqttAdapterScaffold(true);
t = new MqttLight(a, "ML2", "", "track/light/2", "track/light/2/foo");
}
@AfterEach
public void tearDown() {
t.dispose();
a.dispose();
JUnitUtil.tearDown();
}
@Override
public int numListeners() {
return 0;
}
@Test
public void testParserUpdate() {
t.setCommandedState(Light.ON);
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==2; }, "publish triggered");
assertEquals("track/light/2", a.getLastTopic(),"topic");
assertEquals("ON", new String(a.getLastPayload()),"payload");
t.setCommandedState(Light.OFF);
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==3; }, "publish triggered 2");
assertEquals("track/light/2", a.getLastTopic(),"topic");
assertEquals("OFF", new String(a.getLastPayload()),"payload");
}
@Test
public void testParserModes() {
((MqttLight)t).notifyMqttMessage("track/light/2/foo", "ON");
assertEquals( Light.ON, t.getKnownState(), "state");
((MqttLight)t).notifyMqttMessage("track/light/2/foo", "OFF");
assertEquals( Light.OFF, t.getKnownState(), "state");
((MqttLight)t).notifyMqttMessage("track/light/2/foo", "UNKNOWN");
assertEquals( Light.UNKNOWN, t.getKnownState(), "state");
}
@Override
public void checkOnMsgSent() {
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==2; }, "publish triggered");
assertEquals("track/light/2", a.getLastTopic(),"topic");
assertEquals("ON", new String(a.getLastPayload()),"payload");
}
@Test
@Override
public void testCommandOff() {
// Lights are initialized to OFF, so no order is sent. do this to force sening the off later.
t.setState(Light.ON);
super.testCommandOff();
}
@Override
public void checkOffMsgSent() {
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==3; }, "publish on then off triggered");
assertEquals("track/light/2", a.getLastTopic(),"topic");
assertEquals("OFF", new String(a.getLastPayload()),"payload");
}
}