Files
JIMRI/java/test/jmri/jmrit/logixng/tools/ImportExpressionClockTest.java
2026-06-17 14:00:51 +02:00

147 lines
5.3 KiB
Java

package jmri.jmrit.logixng.tools;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.fail;
import java.beans.PropertyChangeEvent;
import java.util.Date;
import java.lang.reflect.Field;
import jmri.*;
import jmri.jmrit.simpleclock.SimpleTimebase;
import jmri.jmrix.internal.InternalSystemConnectionMemo;
/**
* Test import of Logix to LogixNG.
* <P>
* This class creates a Logix, test that it works, imports it to LogixNG,
* deletes the original Logix and then test that the new LogixNG works.
* <P>
This test tests expression signalMast
*
* @author Daniel Bergqvist (C) 2020
*/
public class ImportExpressionClockTest extends ImportExpressionComplexTestBase {
private Timebase fastClock;
private ConditionalVariable cv;
private enum ClockEnum {
Clock__start10_20__end_13_10(10,20,13,10),
Clock__start18_15__end_12_25(18,15,12,25);
final int _start;
final int _end;
private ClockEnum(int startHour, int startMin, int endHour, int endMin) {
this._start = startHour * 60 + startMin;
this._end = endHour * 60 + endMin;
}
}
@Override
protected Enum<?>[] getEnums() {
return ClockEnum.values();
}
private boolean isLogixActivated() {
return assertDoesNotThrow( () -> {
Field privateStringField = logix.getClass().getDeclaredField("_isActivated");
privateStringField.setAccessible(true);
return (Boolean) privateStringField.get(logix);
}, "Cannot read field _isActivated");
}
@Override
@SuppressWarnings("deprecation") // Date.getMinutes, Date.getHours
public void setNamedBeanState(Enum<?> e, Setup setup) throws JmriException {
ClockEnum ce = ClockEnum.valueOf(e.name());
SimpleTimebase timeBase = new SimpleTimebase(InstanceManager.getDefault(InternalSystemConnectionMemo.class));
PropertyChangeEvent evt = new PropertyChangeEvent(timeBase, "something", null, "new");
cv.setType(Conditional.Type.FAST_CLOCK_RANGE);
cv.setNum1(ce._start); // start time
cv.setNum2(ce._end); // end time
switch (ce) {
case Clock__start10_20__end_13_10:
switch (setup) {
case Init:
fastClock.setTime(new Date(0,0,0,9,20)); // 9:20
break;
case Fail1:
fastClock.setTime(new Date(0,0,0,9,30)); // 9:30
break;
case Fail2:
fastClock.setTime(new Date(0,0,0,21,20)); // 21:20
break;
case Fail3:
fastClock.setTime(new Date(0,0,0,17,30)); // 17:30
break;
case Succeed1:
fastClock.setTime(new Date(0,0,0,10,28)); // 10:28
fastClock.setTime(new Date(0,0,0,10,30)); // 10:30
break;
case Succeed2:
fastClock.setTime(new Date(0,0,0,12,30)); // 12:30
break;
case Succeed3:
fastClock.setTime(new Date(0,0,0,13,10)); // 13:10
break;
case Succeed4:
fastClock.setTime(new Date(0,0,0,11,05)); // 11:05
break;
default: fail("Unknown enum: "+ce.name());
}
break;
case Clock__start18_15__end_12_25:
switch (setup) {
case Init:
fastClock.setTime(new Date(0,0,0,14,20)); // 14:20
break;
case Fail1:
fastClock.setTime(new Date(0,0,0,13,30)); // 13:30
break;
case Fail2:
fastClock.setTime(new Date(0,0,0,17,20)); // 17:20
break;
case Fail3:
fastClock.setTime(new Date(0,0,0,18,10)); // 18:10
break;
case Succeed1:
fastClock.setTime(new Date(0,0,0,10,30)); // 10:30
break;
case Succeed2:
fastClock.setTime(new Date(0,0,0,3,30)); // 3:30
break;
case Succeed3:
fastClock.setTime(new Date(0,0,0,7,30)); // 7:30
break;
case Succeed4:
fastClock.setTime(new Date(0,0,0,11,30)); // 11:30
break;
default: fail("Unknown enum: "+ce.name());
}
break;
default:
fail("Unknown enum: "+e.name());
}
if ((isLogixActivated()) && (conditional != null)) {
conditional.calculate(true, evt); // Logix expression Clock doesn't listen on the fast clock
}
}
@Override
public ConditionalVariable newConditionalVariable() {
fastClock = InstanceManager.getDefault(jmri.Timebase.class);
cv = new ConditionalVariable();
cv.setType(Conditional.Type.FAST_CLOCK_RANGE);
return cv;
}
}