8#include "../../../tests/testXWC.hpp"
10#include "../zaberLowLevel.hpp"
14#include "../za_serial.c"
31namespace zaberLowLevelTest
38SCENARIO(
"Classifying decoded device messages",
"[zaberStage]" )
41 #ifdef ZABERLOWLEVEL_TEST_DOXYGEN_REF
47 GIVEN(
"A configured stage and decoded ASCII messages" )
58 WHEN(
"The message is a normal reply for the same device" )
60 rep.message_type =
'@';
65 WHEN(
"The message is an alert for the same device" )
67 rep.message_type =
'!';
72 WHEN(
"The message is an info message for the same device" )
74 rep.message_type =
'#';
79 WHEN(
"The message is a reply for a different device" )
81 rep.message_type =
'@';
82 rep.device_address = 2;
89SCENARIO(
"Parsing the warnings response",
"[zaberStage]" )
91 GIVEN(
"A valid response to the warnings query" )
95 WHEN(
"Valid response, no warnings" )
101 std::string tstr =
"00";
107 REQUIRE( zstg.
warnFD() ==
false );
108 REQUIRE( zstg.
warnFQ() ==
false );
109 REQUIRE( zstg.
warnFS() ==
false );
110 REQUIRE( zstg.
warnFT() ==
false );
111 REQUIRE( zstg.
warnFB() ==
false );
112 REQUIRE( zstg.
warnFP() ==
false );
113 REQUIRE( zstg.
warnFE() ==
false );
114 REQUIRE( zstg.
warnWH() ==
false );
115 REQUIRE( zstg.
warnWL() ==
false );
116 REQUIRE( zstg.
warnWP() ==
false );
117 REQUIRE( zstg.
warnWV() ==
false );
118 REQUIRE( zstg.
warnWT() ==
false );
119 REQUIRE( zstg.
warnWM() ==
false );
120 REQUIRE( zstg.
warnWR() ==
false );
121 REQUIRE( zstg.
warnNC() ==
false );
122 REQUIRE( zstg.
warnNI() ==
false );
123 REQUIRE( zstg.
warnND() ==
false );
124 REQUIRE( zstg.
warnNU() ==
false );
125 REQUIRE( zstg.
warnNJ() ==
false );
126 REQUIRE( zstg.
warnUNK() ==
false );
129 WHEN(
"Valid response, one warning" )
135 std::string tstr =
"01 WR";
141 REQUIRE( zstg.
warnFD() ==
false );
142 REQUIRE( zstg.
warnFQ() ==
false );
143 REQUIRE( zstg.
warnFS() ==
false );
144 REQUIRE( zstg.
warnFT() ==
false );
145 REQUIRE( zstg.
warnFB() ==
false );
146 REQUIRE( zstg.
warnFP() ==
false );
147 REQUIRE( zstg.
warnFE() ==
false );
148 REQUIRE( zstg.
warnWH() ==
false );
149 REQUIRE( zstg.
warnWL() ==
false );
150 REQUIRE( zstg.
warnWP() ==
false );
151 REQUIRE( zstg.
warnWV() ==
false );
152 REQUIRE( zstg.
warnWT() ==
false );
153 REQUIRE( zstg.
warnWM() ==
false );
154 REQUIRE( zstg.
warnWR() ==
true );
155 REQUIRE( zstg.
warnNC() ==
false );
156 REQUIRE( zstg.
warnNI() ==
false );
157 REQUIRE( zstg.
warnND() ==
false );
158 REQUIRE( zstg.
warnNU() ==
false );
159 REQUIRE( zstg.
warnNJ() ==
false );
160 REQUIRE( zstg.
warnUNK() ==
false );
163 WHEN(
"Valid response, five warnings" )
169 std::string tstr =
"05 FD FQ FS FT FB";
175 REQUIRE( zstg.
warnFD() ==
true );
176 REQUIRE( zstg.
warnFQ() ==
true );
177 REQUIRE( zstg.
warnFS() ==
true );
178 REQUIRE( zstg.
warnFT() ==
true );
179 REQUIRE( zstg.
warnFB() ==
true );
180 REQUIRE( zstg.
warnFP() ==
false );
181 REQUIRE( zstg.
warnFE() ==
false );
182 REQUIRE( zstg.
warnWH() ==
false );
183 REQUIRE( zstg.
warnWL() ==
false );
184 REQUIRE( zstg.
warnWP() ==
false );
185 REQUIRE( zstg.
warnWV() ==
false );
186 REQUIRE( zstg.
warnWT() ==
false );
187 REQUIRE( zstg.
warnWM() ==
false );
188 REQUIRE( zstg.
warnWR() ==
false );
189 REQUIRE( zstg.
warnNC() ==
false );
190 REQUIRE( zstg.
warnNI() ==
false );
191 REQUIRE( zstg.
warnND() ==
false );
192 REQUIRE( zstg.
warnNU() ==
false );
193 REQUIRE( zstg.
warnNJ() ==
false );
194 REQUIRE( zstg.
warnUNK() ==
false );
197 WHEN(
"Valid response, ten warnings" )
203 std::string tstr =
"10 FP FE WH WL WP WV WT WM WR NC";
209 REQUIRE( zstg.
warnFD() ==
false );
210 REQUIRE( zstg.
warnFQ() ==
false );
211 REQUIRE( zstg.
warnFS() ==
false );
212 REQUIRE( zstg.
warnFT() ==
false );
213 REQUIRE( zstg.
warnFB() ==
false );
214 REQUIRE( zstg.
warnFP() ==
true );
215 REQUIRE( zstg.
warnFE() ==
true );
216 REQUIRE( zstg.
warnWH() ==
true );
217 REQUIRE( zstg.
warnWL() ==
true );
218 REQUIRE( zstg.
warnWP() ==
true );
219 REQUIRE( zstg.
warnWV() ==
true );
220 REQUIRE( zstg.
warnWT() ==
true );
221 REQUIRE( zstg.
warnWM() ==
true );
222 REQUIRE( zstg.
warnWR() ==
true );
223 REQUIRE( zstg.
warnNC() ==
true );
224 REQUIRE( zstg.
warnNI() ==
false );
225 REQUIRE( zstg.
warnND() ==
false );
226 REQUIRE( zstg.
warnNU() ==
false );
227 REQUIRE( zstg.
warnNJ() ==
false );
228 REQUIRE( zstg.
warnUNK() ==
false );
230 WHEN(
"Valid response, 2 warnings" )
236 std::string tstr =
"02 NI ND";
242 REQUIRE( zstg.
warnFD() ==
false );
243 REQUIRE( zstg.
warnFQ() ==
false );
244 REQUIRE( zstg.
warnFS() ==
false );
245 REQUIRE( zstg.
warnFT() ==
false );
246 REQUIRE( zstg.
warnFB() ==
false );
247 REQUIRE( zstg.
warnFP() ==
false );
248 REQUIRE( zstg.
warnFE() ==
false );
249 REQUIRE( zstg.
warnWH() ==
false );
250 REQUIRE( zstg.
warnWL() ==
false );
251 REQUIRE( zstg.
warnWP() ==
false );
252 REQUIRE( zstg.
warnWV() ==
false );
253 REQUIRE( zstg.
warnWT() ==
false );
254 REQUIRE( zstg.
warnWM() ==
false );
255 REQUIRE( zstg.
warnWR() ==
false );
256 REQUIRE( zstg.
warnNC() ==
false );
257 REQUIRE( zstg.
warnNI() ==
true );
258 REQUIRE( zstg.
warnND() ==
true );
259 REQUIRE( zstg.
warnNU() ==
false );
260 REQUIRE( zstg.
warnNJ() ==
false );
261 REQUIRE( zstg.
warnUNK() ==
false );
263 WHEN(
"Valid response, 3 warnings" )
269 std::string tstr =
"03 NU NJ UN";
275 REQUIRE( zstg.
warnFD() ==
false );
276 REQUIRE( zstg.
warnFQ() ==
false );
277 REQUIRE( zstg.
warnFS() ==
false );
278 REQUIRE( zstg.
warnFT() ==
false );
279 REQUIRE( zstg.
warnFB() ==
false );
280 REQUIRE( zstg.
warnFP() ==
false );
281 REQUIRE( zstg.
warnFE() ==
false );
282 REQUIRE( zstg.
warnWH() ==
false );
283 REQUIRE( zstg.
warnWL() ==
false );
284 REQUIRE( zstg.
warnWP() ==
false );
285 REQUIRE( zstg.
warnWV() ==
false );
286 REQUIRE( zstg.
warnWT() ==
false );
287 REQUIRE( zstg.
warnWM() ==
false );
288 REQUIRE( zstg.
warnWR() ==
false );
289 REQUIRE( zstg.
warnNC() ==
false );
290 REQUIRE( zstg.
warnNI() ==
false );
291 REQUIRE( zstg.
warnND() ==
false );
292 REQUIRE( zstg.
warnNU() ==
true );
293 REQUIRE( zstg.
warnNJ() ==
true );
294 REQUIRE( zstg.
warnUNK() ==
true );
297 WHEN(
"Truncated response ends before the first warning token" )
303 std::string tstr =
"01 ";
308 REQUIRE( zstg.
warnUNK() ==
false );
311 WHEN(
"Truncated response ends inside a later warning token" )
317 std::string tstr =
"06 6";
322 REQUIRE( zstg.
warnUNK() ==
false );
The low-level ASCII-protocol Zaber controller.
A class to manage the details of one stage in a Zaber system.
bool isCommandReply(const za_reply &rep)
Determine whether a decoded message is the awaited command reply.
int parseWarnings(std::string &response)
Parse the warning response from the device.
int deviceAddress()
Get the device address.
bool warningState()
Get the warning state.
SCENARIO("INDI Callbacks", "[zaberLowLevel]")
Verify zaberLowLevel callback validation and power-off snapshots preserve stage state.
Namespace for all libXWC tests.