/
OlcbSignalMastAddPaneTest.java
276 lines (217 loc) · 12.9 KB
/
OlcbSignalMastAddPaneTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
package jmri.jmrix.openlcb.swing;
import jmri.*;
import jmri.jmrit.beantable.signalmast.*;
import jmri.jmrix.openlcb.*;
import jmri.implementation.*;
import jmri.util.*;
import java.util.*;
import javax.swing.*;
import org.junit.*;
import org.netbeans.jemmy.operators.*;
import org.openlcb.*;
/**
* @author Bob Jacobsen Copyright 2018
*/
public class OlcbSignalMastAddPaneTest extends AbstractSignalMastAddPaneTestBase {
/** {@inheritDoc} */
protected SignalMastAddPane getOTT() { return new OlcbSignalMastAddPane(); }
@Test
public void testSetMast() {
OlcbSignalMast s1 = new OlcbSignalMast("MF$olm:basic:one-searchlight($0001)", "user name");
MatrixSignalMast m1 = new MatrixSignalMast("IF$xsm:basic:one-low($0001)-3t", "user");
OlcbSignalMastAddPane vp = new OlcbSignalMastAddPane();
Assert.assertTrue(vp.canHandleMast(s1));
Assert.assertFalse(vp.canHandleMast(m1));
vp.setMast(null);
vp.setAspectNames(s1.getAppearanceMap(), InstanceManager.getDefault(jmri.SignalSystemManager.class).getSystem("basic"));
vp.setMast(s1);
vp.setAspectNames(m1.getAppearanceMap(), InstanceManager.getDefault(jmri.SignalSystemManager.class).getSystem("basic"));
vp.setMast(m1);
JUnitAppender.assertErrorMessage("mast was wrong type: IF$xsm:basic:one-low($0001)-3t jmri.implementation.MatrixSignalMast");
}
@Test
public void testCanHandleMast() {
OlcbSignalMastAddPane vp = new OlcbSignalMastAddPane();
SignalMast mast = new OlcbSignalMast("MF$olm:basic:one-searchlight($1)", "no user name"){
{ lastRef = 4; } // reset references
};
Assert.assertTrue(vp.canHandleMast(mast));
Assert.assertFalse(vp.canHandleMast(new jmri.implementation.VirtualSignalMast("IF$vsm:basic:one-searchlight($0001)")));
}
@Test
public void testCreateMast() {
OlcbSignalMastAddPane vp = new OlcbSignalMastAddPane();
new OlcbSignalMast("MF$olm:basic:one-searchlight($1)", "no user name"){
{ lastRef = 4; } // reset references - this leads to ($0005) below, just in case anybody else has created one
};
vp.createMast("AAR-1946", "appearance-PL-2-high.xml", "user name");
Assert.assertNotNull(InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name"));
Assert.assertEquals("PL-2-high", InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name").getMastType());
Assert.assertNotNull(InstanceManager.getDefault(jmri.SignalMastManager.class).getBySystemName("MF$olm:AAR-1946:PL-2-high($0005)"));
}
@Test
public void testCreateAndDisableViaGui() throws java.beans.PropertyVetoException {
Assume.assumeFalse(java.awt.GraphicsEnvironment.isHeadless());
SignalMastManager mgr = InstanceManager.getDefault(SignalMastManager.class);
for (SignalMast m : mgr.getNamedBeanSet()) mgr.deleteBean(m, "DoDelete");
Assert.assertEquals(0, InstanceManager.getDefault(SignalMastManager.class).getObjectCount());
OlcbSignalMastAddPane vp = new OlcbSignalMastAddPane();
vp.setAspectNames(
new jmri.implementation.DefaultSignalAppearanceMap("IM123") {
public Enumeration<String> getAspects() {
return java.util.Collections.enumeration(
java.util.Arrays.asList(
new String[]{"Clear","Approach Medium","Advance Approach",
"Medium Clear", "Approach", "Slow Approach",
"Permissive", "Restricting", "Stop and Proceed", "Stop"}));
}
}
, InstanceManager.getDefault(jmri.SignalSystemManager.class).getSystem("basic") );
JFrame frame = new JFrame("Add/Edit Signal Mast");
frame.add(vp);
frame.pack();
frame.setVisible(true);
// check load
Assert.assertEquals("00.00.00.00.00.00.00.00", vp.litEventID.getText());
Assert.assertEquals("00.00.00.00.00.00.00.00", vp.notLitEventID.getText());
Assert.assertEquals("00.00.00.00.00.00.00.00", vp.heldEventID.getText());
Assert.assertEquals("00.00.00.00.00.00.00.00", vp.notHeldEventID.getText());
// disable Approach Medim, change some of the event IDs
// then build the mast, all on Swing thread
jmri.util.ThreadingUtil.runOnGUI(() -> {
vp.disabledAspects.get("Approach Medium").setSelected(true);
vp.aspectEventIDs.get("Clear").setText("01.02.03.04.05.06.07.08");
vp.litEventID.setText( "03.02.01.01.01.01.01.01");
vp.notLitEventID.setText( "04.02.01.01.01.01.01.01");
vp.heldEventID.setText( "05.02.01.01.01.01.01.01");
vp.notHeldEventID.setText("06.02.01.01.01.01.01.01");
vp.createMast("AAR-1946", "appearance-PL-2-high.xml", "user name 1");
});
// check list of SignalMasts
Assert.assertEquals(1, InstanceManager.getDefault(jmri.SignalMastManager.class).getObjectCount());
Assert.assertNotNull(InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 1"));
// system name not checked, depends on history of how many SignalMast objects have been created
// check aspect disabled
Assert.assertTrue(InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 1").isAspectDisabled("Approach Medium"));
Assert.assertTrue(! InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 1").isAspectDisabled("Clear"));
// check correct eventid present
OlcbSignalMast foundMast = (OlcbSignalMast)InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 1");
Assert.assertEquals(new OlcbAddress("01.02.03.04.05.06.07.08"), new OlcbAddress(foundMast.getOutputForAppearance("Clear")));
Assert.assertEquals(new OlcbAddress("03.02.01.01.01.01.01.01"), new OlcbAddress(foundMast.getLitEventId()));
Assert.assertEquals(new OlcbAddress("04.02.01.01.01.01.01.01"), new OlcbAddress(foundMast.getNotLitEventId()));
Assert.assertEquals(new OlcbAddress("05.02.01.01.01.01.01.01"), new OlcbAddress(foundMast.getHeldEventId()));
Assert.assertEquals(new OlcbAddress("06.02.01.01.01.01.01.01"), new OlcbAddress(foundMast.getNotHeldEventId()));
jmri.util.ThreadingUtil.runOnGUI(() -> {
frame.dispose();
});
}
@Test
public void testEditAndDisableViaGui() {
Assume.assumeFalse(java.awt.GraphicsEnvironment.isHeadless());
Assert.assertEquals(0, InstanceManager.getDefault(jmri.SignalMastManager.class).getObjectCount());
OlcbSignalMast mast = new OlcbSignalMast("MF$olm:basic:one-searchlight($0001)", "user name 2");
mast.setOutputForAppearance("Approach", "01.01.01.01.01.01.01.01");
mast.setLitEventId("03.01.01.01.01.01.01.01");
mast.setNotLitEventId("04.01.01.01.01.01.01.01");
mast.setHeldEventId("05.01.01.01.01.01.01.01");
mast.setNotHeldEventId("06.01.01.01.01.01.01.01");
InstanceManager.getDefault(jmri.SignalMastManager.class).register(mast);
Assert.assertEquals(1, InstanceManager.getDefault(jmri.SignalMastManager.class).getObjectCount());
mast.setAspectDisabled("Stop");
mast.setAspectDisabled("Unlit"); // we will renable this below
OlcbSignalMastAddPane vp = new OlcbSignalMastAddPane();
vp.setAspectNames(
new jmri.implementation.DefaultSignalAppearanceMap("IM123") {
public Enumeration<String> getAspects() { return mast.getAllKnownAspects().elements(); }
}
, InstanceManager.getDefault(jmri.SignalSystemManager.class).getSystem("basic"));
vp.setMast(mast);
JFrame frame = new JFrame("Add/Edit Signal Mast");
frame.add(vp);
frame.pack();
frame.setVisible(true);
// check load
Assert.assertEquals(new OlcbAddress("03.01.01.01.01.01.01.01"), new OlcbAddress(vp.litEventID.getText()));
Assert.assertEquals(new OlcbAddress("04.01.01.01.01.01.01.01"), new OlcbAddress(vp.notLitEventID.getText()));
Assert.assertEquals(new OlcbAddress("05.01.01.01.01.01.01.01"), new OlcbAddress(vp.heldEventID.getText()));
Assert.assertEquals(new OlcbAddress("06.01.01.01.01.01.01.01"), new OlcbAddress(vp.notHeldEventID.getText()));
// disable Approach, change some of the event IDs
// then build the mast, all on Swing thread
jmri.util.ThreadingUtil.runOnGUI(() -> {
vp.disabledAspects.get("Approach").setSelected(true);
vp.disabledAspects.get("Unlit").setSelected(false);
vp.aspectEventIDs.get("Clear").setText("01.02.03.04.05.06.07.08");
vp.createMast("basic", "appearance-one-searchlight.xml", "user name 1");
});
// check list of SignalMasts
Assert.assertEquals(1, InstanceManager.getDefault(jmri.SignalMastManager.class).getObjectCount());
Assert.assertNotNull(InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 2"));
// system name not checked, depends on history of how many SignalMast objects have been created
// check correct aspects disabled
Assert.assertTrue(! InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 2").isAspectDisabled("Clear"));
Assert.assertTrue(InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 2").isAspectDisabled("Approach"));
Assert.assertTrue(InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 2").isAspectDisabled("Stop"));
Assert.assertTrue(! InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 2").isAspectDisabled("Unlit"));
// check correct eventid present
OlcbSignalMast foundMast = (OlcbSignalMast)InstanceManager.getDefault(jmri.SignalMastManager.class).getByUserName("user name 2");
Assert.assertEquals(new OlcbAddress("00.00.00.00.00.00.00.00"), new OlcbAddress(foundMast.getOutputForAppearance("Stop")));
Assert.assertEquals(new OlcbAddress("01.02.03.04.05.06.07.08"), new OlcbAddress(foundMast.getOutputForAppearance("Clear")));
Assert.assertEquals(new OlcbAddress("01.01.01.01.01.01.01.01"), new OlcbAddress(foundMast.getOutputForAppearance("Approach")));
Assert.assertEquals(new OlcbAddress("03.01.01.01.01.01.01.01"), new OlcbAddress(foundMast.getLitEventId()));
Assert.assertEquals(new OlcbAddress("04.01.01.01.01.01.01.01"), new OlcbAddress(foundMast.getNotLitEventId()));
Assert.assertEquals(new OlcbAddress("05.01.01.01.01.01.01.01"), new OlcbAddress(foundMast.getHeldEventId()));
Assert.assertEquals(new OlcbAddress("06.01.01.01.01.01.01.01"), new OlcbAddress(foundMast.getNotHeldEventId()));
jmri.util.ThreadingUtil.runOnGUI(() -> {
frame.dispose();
});
}
// from here down is testing infrastructure
private static OlcbSystemConnectionMemo memo;
static Connection connection;
static NodeID nodeID = new NodeID(new byte[]{1, 0, 0, 0, 0, 0});
static java.util.ArrayList<Message> messages;
// The minimal setup for log4J
//
// This only initialized JUnit and Log4J once per class so that it
// can only initialize the OpenLCB structure once per class
@Before
public void setUp() {
messages = new java.util.ArrayList<>();
}
@BeforeClass
static public void preClassInit() {
JUnitUtil.setUp();
JUnitUtil.resetProfileManager();
JUnitUtil.initInternalTurnoutManager();
nodeID = new NodeID(new byte[]{1, 0, 0, 0, 0, 0});
messages = new java.util.ArrayList<>();
connection = new AbstractConnection() {
@Override
public void put(Message msg, Connection sender) {
messages.add(msg);
}
};
memo = new OlcbSystemConnectionMemo(); // this self-registers as 'M'
memo.setProtocol(jmri.jmrix.can.ConfigurationManager.OPENLCB);
memo.setInterface(new OlcbInterface(nodeID, connection) {
public Connection getOutputConnection() {
return connection;
}
});
jmri.util.JUnitUtil.waitFor(()->{return (messages.size()>0);},"Initialization Complete message");
}
@After
public void tearDown() {
messages = null;
}
@AfterClass
public static void postClassTearDown() throws Exception {
if(memo != null && memo.getInterface() !=null ) {
memo.getInterface().dispose();
}
memo = null;
connection = null;
nodeID = null;
JUnitUtil.tearDown();
}
}