169 lines
5.9 KiB
Java
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 ) );
|
|
}
|
|
|
|
}
|