Files
JIMRI/java/test/jmri/implementation/AbstractSignalHeadTestBase.java
T
2026-06-17 14:00:51 +02:00

169 lines
5.9 KiB
Java

package jmri.implementation;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import jmri.SignalHead;
import org.junit.jupiter.api.*;
/**
* Base support for testing SignalHead implementations
*
* @author Bob Jacobsen Copyright (C) 2017
*/
public abstract class AbstractSignalHeadTestBase {
abstract SignalHead getHeadToTest();
@Test
public final void testLit() {
SignalHead s = getHeadToTest();
assertTrue(s.getLit(), "initial");
s.setLit(false);
assertFalse(s.getLit(), "set");
s.setLit(true);
assertTrue(s.getLit(), "set again");
}
private boolean validAppearance(int appearance, SignalHead s) {
for (int item : s.getValidStates() ) if (item == appearance ) return true;
return false;
}
@Test
public final void testHeld() {
SignalHead s = getHeadToTest();
assertFalse(s.getHeld(), "initial");
s.setHeld(true);
assertTrue(s.getHeld(), "set");
s.setHeld(false);
assertFalse(s.getHeld(), "set again");
}
@Test
public final void testLitDarkIndependent() {
SignalHead s = getHeadToTest();
int appearance = s.getValidStates()[0];
if (appearance == SignalHead.DARK) appearance = s.getValidStates()[1];
s.setAppearance(appearance);
s.setLit(false);
assertFalse(s.getLit(), "not Lit");
assertEquals(appearance, s.getAppearance(), "not Lit");
appearance = s.getValidStates()[1];
if (validAppearance(SignalHead.DARK, s)) appearance = SignalHead.DARK;
s.setLit(true);
s.setAppearance(appearance);
assertTrue(s.getLit(), "Lit");
assertEquals(appearance, s.getAppearance(), "Lit");
}
@Test
public final void testBaseAppearanceStop() {
SignalHead s = getHeadToTest();
assumeTrue(validAppearance(SignalHead.RED, s), "Head does not have RED");
s.setAppearance(SignalHead.RED);
assertFalse(s.isCleared());
assertTrue(s.isAtStop());
assertFalse(s.isShowingRestricting());
}
@Test
public final void testBaseAppearanceClearYellow() {
SignalHead s = getHeadToTest();
assumeTrue(validAppearance(SignalHead.YELLOW, s), "Head does not have YELLOW");
s.setAppearance(SignalHead.YELLOW);
assertTrue(s.isCleared());
assertFalse(s.isAtStop());
assertFalse(s.isShowingRestricting());
}
@Test
public final void testBaseAppearanceClearGreen() {
SignalHead s = getHeadToTest();
assumeTrue(validAppearance(SignalHead.GREEN, s), "Head does not have GREEN");
s.setAppearance(SignalHead.GREEN);
assertTrue(s.isCleared());
assertFalse(s.isAtStop());
assertFalse(s.isShowingRestricting());
}
@Test
public final void testBaseAppearanceRestrictingFlashRed() {
SignalHead s = getHeadToTest();
assumeTrue(validAppearance(SignalHead.FLASHRED, s), "Head does not have FLASHRED");
s.setAppearance(SignalHead.FLASHRED);
assertFalse(s.isCleared());
assertFalse(s.isAtStop());
assertTrue(s.isShowingRestricting());
}
@Test
public final void testBaseAppearanceRestrictingLunar() {
SignalHead s = getHeadToTest();
assumeTrue(validAppearance(SignalHead.LUNAR, s), "Head does not have LUNAR");
s.setAppearance(SignalHead.LUNAR);
assertFalse(s.isCleared());
assertFalse(s.isAtStop());
assertTrue(s.isShowingRestricting());
}
@Test
public final void testClearStopRestrictingOverlaps() {
SignalHead s = getHeadToTest();
for (int appearance : s.getValidStates()) {
checkOverlaps(appearance);
}
}
final void checkOverlaps(int appearance) {
SignalHead s = getHeadToTest();
s.setAppearance(appearance);
assertFalse((s.isCleared() && s.isAtStop()));
assertFalse((s.isAtStop() && s.isShowingRestricting()));
assertFalse((s.isShowingRestricting() && s.isCleared()));
}
@Test
public void testGetBeanType(){
SignalHead s = getHeadToTest();
assertEquals(s.getBeanType(),Bundle.getMessage("BeanNameSignalHead"), "bean type");
}
@Test
public void testDescribeState() {
SignalHead s = getHeadToTest();
assertEquals(Bundle.getMessage("SignalHeadStateDark"), s.describeState(SignalHead.DARK) );
assertEquals(Bundle.getMessage("SignalHeadStateRed"), s.describeState(SignalHead.RED) );
assertEquals(Bundle.getMessage("SignalHeadStateFlashingRed"), s.describeState(SignalHead.FLASHRED) );
assertEquals(Bundle.getMessage("SignalHeadStateYellow"), s.describeState(SignalHead.YELLOW) );
assertEquals(Bundle.getMessage("SignalHeadStateFlashingYellow"), s.describeState(SignalHead.FLASHYELLOW) );
assertEquals(Bundle.getMessage("SignalHeadStateGreen"), s.describeState(SignalHead.GREEN) );
assertEquals(Bundle.getMessage("SignalHeadStateFlashingGreen"), s.describeState(SignalHead.FLASHGREEN) );
assertEquals(Bundle.getMessage("SignalHeadStateLunar"), s.describeState(SignalHead.LUNAR) );
assertEquals(Bundle.getMessage("SignalHeadStateFlashingLunar"), s.describeState(SignalHead.FLASHLUNAR) );
assertEquals(Bundle.getMessage("SignalHeadStateHeld"), s.describeState(SignalHead.HELD) );
assertEquals(
Bundle.getMessage("SignalHeadStateYellow") + " " + Bundle.getMessage("SignalHeadStateHeld"),
s.describeState( SignalHead.YELLOW + SignalHead.HELD ) );
assertEquals(
Bundle.getMessage("SignalHeadStateRed") + " " + Bundle.getMessage("SignalHeadStateFlashingRed"),
s.describeState( SignalHead.RED + SignalHead.FLASHRED ) );
}
}