18#define THM1176_PROMPT_TIME 10
19#define THM1176_BOOT_N_SCAN_TIME 15000
20#define THM1176_CONNECT_TIME 10000
21#define THM1176_SCAN_INTERVAL 1000
22#define THM1176_SILLY_RESOURCE_NAME "Humpty_Dumpty_had_a_great_fall"
33 std::string l_Space = (
"" == Prompt) ?
"" :
" ";
34 std::string l_Message =
">>> " + Prompt + l_Space +
"(Will continue in " + std::to_string(
THM1176_PROMPT_TIME) +
" seconds) <<<";
36 QWARN(l_Message.c_str());
53 void initTestCase(
void);
56 void cleanupTestCase(
void);
59 void TestNotifyInstrumentList(
void);
62 void TestSetCurrentInstrument(
void);
82void THM1176IM_Test01_Connect::initTestCase(
void)
87void THM1176IM_Test01_Connect::cleanupTestCase(
void)
100void THM1176IM_Test01_Connect::TestNotifyInstrumentList(
void)
102 QSignalSpy l_NotifyInstrumentListSpy(&
Manager, SIGNAL(NotifyInstrumentList(CResourceList)));
103 QSignalSpy l_NotifyErrorListSpy(&
Manager, SIGNAL(NotifyErrorList(CErrorList)));
104 QList<QVariant> l_Arguments;
105 CResourceList l_ResourceList;
113 QCOMPARE(l_NotifyInstrumentListSpy.count(), 1);
115 l_Arguments = l_NotifyInstrumentListSpy.takeFirst();
116 l_ResourceList = qvariant_cast<CResourceList>(l_Arguments.at(0));
118 QVERIFY(l_ResourceList.size() == 1);
126 QCOMPARE(l_NotifyInstrumentListSpy.count(), 1);
128 l_Arguments = l_NotifyInstrumentListSpy.takeFirst();
129 l_ResourceList = qvariant_cast<CResourceList>(l_Arguments.at(0));
130 QVERIFY(l_ResourceList.size() == 2);
138 QVERIFY(l_NotifyInstrumentListSpy.count() == 1 || l_NotifyInstrumentListSpy.count() == 2);
139 l_Arguments = l_NotifyInstrumentListSpy.takeFirst();
140 if (l_NotifyInstrumentListSpy.count() == 1)
141 l_Arguments = l_NotifyInstrumentListSpy.takeFirst();
142 l_ResourceList = qvariant_cast<CResourceList>(l_Arguments.at(0));
143 QVERIFY(l_ResourceList.size() == 0);
146 QCOMPARE(l_NotifyErrorListSpy.count(), 0);
177void THM1176IM_Test01_Connect::TestSetCurrentInstrument(
void)
180 QSignalSpy l_NotifyInstrumentListSpy(&
Manager, SIGNAL(NotifyInstrumentList(CResourceList)));
181 QSignalSpy l_NotifyCurrentInstrumentSpy(&
Manager, SIGNAL(NotifyCurrentInstrument(
tResourceName)));
183 QSignalSpy l_NotifyIdentificationSpy(&
Manager, SIGNAL(NotifyIdentification(sIdentifier)));
184 QSignalSpy l_NotifyRangeListSpy(&
Manager, SIGNAL(NotifyRangeList(CFluxList)));
185 QSignalSpy l_NotifyUnitsListSpy(&
Manager, SIGNAL(NotifyUnitsList(CTHM1176UnitsList)));
186 QSignalSpy l_NotifyDivisorListSpy(&
Manager, SIGNAL(NotifyDivisorList(CDivisorList)));
187 QSignalSpy l_NotifyAveragingParmBoundsSpy(&
Manager, SIGNAL(NotifyAveragingParmBounds(sAveraging<sBoundedParm>)));
188 QSignalSpy l_NotifyTriggerParmBoundsSpy(&
Manager, SIGNAL(NotifyTriggerParmBounds(sInputTrigger<sBoundedParm>)));
189 QSignalSpy l_NotifyRangeParmBoundsSpy(&
Manager, SIGNAL(NotifyRangeParmBounds(sRange<sBoundedParm>)));
191 QSignalSpy l_NotifyAveragingParmsSpy(&
Manager, SIGNAL(NotifyAveragingParms(sAveraging<uParm>)));
192 QSignalSpy l_NotifyTriggerParmsSpy(&
Manager, SIGNAL(NotifyTriggerParms(sInputTrigger<uParm>)));
193 QSignalSpy l_NotifyOutputSelectSpy(&
Manager, SIGNAL(NotifyOutputSelect(sArbitraryMeasurements)));
194 QSignalSpy l_NotifySleepParmSpy(&
Manager, SIGNAL(NotifySleepParm(
bool)));
196 QSignalSpy l_NotifyRangeParmsSpy(&
Manager, SIGNAL(NotifyRangeParms(sRange<uParm>)));
200 QSignalSpy l_NotifyErrorListSpy(&
Manager, SIGNAL(NotifyErrorList(CErrorList)));
203 QList<QVariant> l_Arguments;
205 CResourceList l_ResourceList;
208 sIdentifier l_Identification;
209 CFluxList l_RangeList;
210 CTHM1176UnitsList l_UnitsList;
211 CDivisorList l_DivisorList;
212 sAveraging<sBoundedParm> l_AveragingBounds;
213 sInputTrigger<sBoundedParm> l_TriggerBounds;
214 sRange<sBoundedParm> l_RangeBounds;
216 CErrorList l_LatestErrors;
218 sAveraging<uParm> l_AveragingParms;
219 sInputTrigger<uParm> l_Trigger;
220 sArbitraryMeasurements l_OutputSelect;
223 bool l_UseCalibration;
224 sRange<uParm> l_RangeParms;
231 for (
int i = 0; i < 2; i++)
237 QVERIFY(l_NotifyInstrumentListSpy.count() == 1 || l_NotifyInstrumentListSpy.count() == 2);
238 l_Arguments = l_NotifyInstrumentListSpy.takeFirst();
239 if (l_NotifyInstrumentListSpy.count() == 1)
240 l_Arguments = l_NotifyInstrumentListSpy.takeFirst();
241 l_ResourceList = qvariant_cast<CResourceList>(l_Arguments.at(0));
245 if (l_ResourceList.size() == 2)
break;
247 QCOMPARE(
static_cast<int>(l_ResourceList.size()), 2);
255 QCOMPARE(l_NotifyOperatingModeSpy.count(), 1);
256 l_Arguments = l_NotifyOperatingModeSpy.takeFirst();
257 l_CurrentOperatingMode = qvariant_cast<eTHM1176OperatingMode>(l_Arguments.at(0));
261 l_FormerInstrument = l_CurrentInstrument;
262 QCOMPARE(l_NotifyCurrentInstrumentSpy.count(), 1);
263 l_Arguments = l_NotifyCurrentInstrumentSpy.takeFirst();
264 l_CurrentInstrument = qvariant_cast<tResourceName>(l_Arguments.at(0));
265 QCOMPARE(l_CurrentInstrument, l_ResourceList[0]);
268 QCOMPARE(l_NotifyIdentificationSpy.count(), 1);
269 l_Arguments = l_NotifyIdentificationSpy.takeFirst();
270 l_Identification = qvariant_cast<sIdentifier>(l_Arguments.at(0));
273 QCOMPARE(l_NotifyRangeListSpy.count(), 1);
274 l_Arguments = l_NotifyRangeListSpy.takeFirst();
275 l_RangeList = qvariant_cast<CFluxList>(l_Arguments.at(0));
276 QVERIFY(!l_RangeList.empty());
278 QCOMPARE(l_NotifyUnitsListSpy.count(), 1);
279 l_Arguments = l_NotifyUnitsListSpy.takeFirst();
280 l_UnitsList = qvariant_cast<CTHM1176UnitsList>(l_Arguments.at(0));
281 QVERIFY(!l_UnitsList.empty());
283 QCOMPARE(l_NotifyDivisorListSpy.count(), 1);
284 l_Arguments = l_NotifyDivisorListSpy.takeFirst();
285 l_DivisorList = qvariant_cast<CDivisorList>(l_Arguments.at(0));
286 QVERIFY(!l_DivisorList.empty());
288 QCOMPARE(l_NotifyAveragingParmBoundsSpy.count(), 1);
289 l_Arguments = l_NotifyAveragingParmBoundsSpy.takeFirst();
290 l_AveragingBounds = qvariant_cast<sAveraging<sBoundedParm>>(l_Arguments.at(0));
291 QVERIFY(l_AveragingBounds.
NoPoints.Val != 0 && l_AveragingBounds.
NoPoints.Min != 0 &&
292 l_AveragingBounds.
NoPoints.Max != 0 && l_AveragingBounds.
NoPoints.Def != 0);
294 QCOMPARE(l_NotifyTriggerParmBoundsSpy.count(), 1);
295 l_Arguments = l_NotifyTriggerParmBoundsSpy.takeFirst();
296 l_TriggerBounds = qvariant_cast<sInputTrigger<sBoundedParm>>(l_Arguments.at(0));
297 QVERIFY(l_TriggerBounds.
Period_s.Val != 0 && l_TriggerBounds.
Period_s.Min != 0 &&
299 l_TriggerBounds.
Count.Val != 0 && l_TriggerBounds.
Count.Min != 0 &&
300 l_TriggerBounds.
Count.Max != 0 && l_TriggerBounds.
Count.Def != 0);
302 QCOMPARE(l_NotifyRangeParmBoundsSpy.count(), 1);
303 l_Arguments = l_NotifyRangeParmBoundsSpy.takeFirst();
304 l_RangeBounds = qvariant_cast<sRange<sBoundedParm>>(l_Arguments.at(0));
305 QVERIFY(l_RangeBounds.
Range.Val != 0 && l_RangeBounds.
Range.Min != 0 &&
306 l_RangeBounds.
Range.Max != 0 && l_RangeBounds.
Range.Def != 0);
309 QCOMPARE(l_NotifyAveragingParmsSpy.count(), 1);
310 l_Arguments = l_NotifyAveragingParmsSpy.takeFirst();
311 l_AveragingParms = qvariant_cast<sAveraging<uParm>>(l_Arguments.at(0));
312 QVERIFY(l_AveragingParms.
NoPoints > 0);
314 QCOMPARE(l_NotifyTriggerParmsSpy.count(), 1);
315 l_Arguments = l_NotifyTriggerParmsSpy.takeFirst();
316 l_Trigger = qvariant_cast<sInputTrigger<uParm>>(l_Arguments.at(0));
319 QCOMPARE(l_NotifyOutputSelectSpy.count(), 1);
320 l_Arguments = l_NotifyOutputSelectSpy.takeFirst();
321 l_OutputSelect = qvariant_cast<sArbitraryMeasurements>(l_Arguments.at(0));
323 QCOMPARE(l_NotifySleepParmSpy.count(), 1);
324 l_Arguments = l_NotifySleepParmSpy.takeFirst();
325 l_SleepParm = qvariant_cast<bool>(l_Arguments.at(0));
327 QCOMPARE(l_NotifyUnitsSpy.count(), 1);
328 l_Arguments = l_NotifyUnitsSpy.takeFirst();
329 l_Units = qvariant_cast<eTHM1176Units>(l_Arguments.at(0));
331 QCOMPARE(l_NotifyRangeParmsSpy.count(), 1);
332 l_Arguments = l_NotifyRangeParmsSpy.takeFirst();
333 l_RangeParms = qvariant_cast<sRange<uParm>>(l_Arguments.at(0));
335 QCOMPARE(l_NotifyCommFormatSpy.count(), 1);
336 l_Arguments = l_NotifyCommFormatSpy.takeFirst();
337 l_CommFormat = qvariant_cast<eCommunicationFormat>(l_Arguments.at(0));
340 QCOMPARE(l_NotifyErrorListSpy.count(), 0);
342 std::cout <<
"- Connected to " << l_Identification.
Model <<
", S/N " << l_Identification.
SerialNumber << std::endl;
349 QCOMPARE(l_NotifyCurrentInstrumentSpy.count(), 0);
352 QCOMPARE(l_NotifyIdentificationSpy.count(), 0);
353 QCOMPARE(l_NotifyRangeListSpy.count(), 0);
354 QCOMPARE(l_NotifyUnitsListSpy.count(), 0);
355 QCOMPARE(l_NotifyDivisorListSpy.count(), 0);
356 QCOMPARE(l_NotifyAveragingParmBoundsSpy.count(), 0);
357 QCOMPARE(l_NotifyTriggerParmBoundsSpy.count(), 0);
358 QCOMPARE(l_NotifyRangeParmBoundsSpy.count(), 0);
361 QCOMPARE(l_NotifyAveragingParmsSpy.count(), 0);
362 QCOMPARE(l_NotifyTriggerParmsSpy.count(), 0);
363 QCOMPARE(l_NotifyOutputSelectSpy.count(), 0);
364 QCOMPARE(l_NotifySleepParmSpy.count(), 0);
365 QCOMPARE(l_NotifyUnitsSpy.count(), 0);
366 QCOMPARE(l_NotifyRangeParmsSpy.count(), 0);
367 QCOMPARE(l_NotifyCommFormatSpy.count(), 0);
370 QCOMPARE(l_NotifyOperatingModeSpy.count(), 0);
371 QCOMPARE(l_NotifyErrorListSpy.count(), 0);
373 std::cout <<
"- Still connected to " << l_Identification.
Model <<
", S/N " << l_Identification.
SerialNumber << std::endl;
379 l_FormerInstrument = l_CurrentInstrument;
381 QCOMPARE(l_NotifyCurrentInstrumentSpy.count(), 0);
384 QCOMPARE(l_NotifyIdentificationSpy.count(), 0);
385 QCOMPARE(l_NotifyRangeListSpy.count(), 0);
386 QCOMPARE(l_NotifyUnitsListSpy.count(), 0);
387 QCOMPARE(l_NotifyDivisorListSpy.count(), 0);
388 QCOMPARE(l_NotifyAveragingParmBoundsSpy.count(), 0);
389 QCOMPARE(l_NotifyTriggerParmBoundsSpy.count(), 0);
390 QCOMPARE(l_NotifyRangeParmBoundsSpy.count(), 0);
393 QCOMPARE(l_NotifyAveragingParmsSpy.count(), 0);
394 QCOMPARE(l_NotifyTriggerParmsSpy.count(), 0);
395 QCOMPARE(l_NotifyOutputSelectSpy.count(), 0);
396 QCOMPARE(l_NotifySleepParmSpy.count(), 0);
397 QCOMPARE(l_NotifyUnitsSpy.count(), 0);
398 QCOMPARE(l_NotifyRangeParmsSpy.count(), 0);
399 QCOMPARE(l_NotifyCommFormatSpy.count(), 0);
402 QCOMPARE(l_NotifyOperatingModeSpy.count(), 0);
405 QCOMPARE(l_NotifyErrorListSpy.count(), 1);
406 l_Arguments = l_NotifyErrorListSpy.takeFirst();
407 l_LatestErrors = qvariant_cast<CErrorList>(l_Arguments.at(0));
408 QCOMPARE(
static_cast<int>(l_LatestErrors.size()), 1);
410 std::cout <<
"- Invalid connection request returned error: " << l_LatestErrors[0].Code <<
", " <<
411 l_LatestErrors[0].Description <<
", " << l_LatestErrors[0].Context << std::endl;
412 std::cout <<
"- Still connected to " << l_Identification.
Model <<
", S/N " << l_Identification.
SerialNumber << std::endl;
420 QVERIFY(l_NotifyOperatingModeSpy.count() > 0);
421 l_Arguments = l_NotifyOperatingModeSpy.takeFirst();
422 l_CurrentOperatingMode = qvariant_cast<eTHM1176OperatingMode>(l_Arguments.at(0));
424 if (l_NotifyOperatingModeSpy.count() <= 0)
427 QCOMPARE(l_NotifyOperatingModeSpy.count(), 1);
429 l_Arguments = l_NotifyOperatingModeSpy.takeFirst();
430 l_CurrentOperatingMode = qvariant_cast<eTHM1176OperatingMode>(l_Arguments.at(0));
434 l_FormerInstrument = l_CurrentInstrument;
435 QCOMPARE(l_NotifyCurrentInstrumentSpy.count(), 2);
436 l_Arguments = l_NotifyCurrentInstrumentSpy.takeFirst();
437 l_CurrentInstrument = qvariant_cast<tResourceName>(l_Arguments.at(0));
438 QVERIFY(l_CurrentInstrument.empty());
439 l_Arguments = l_NotifyCurrentInstrumentSpy.takeFirst();
440 l_CurrentInstrument = qvariant_cast<tResourceName>(l_Arguments.at(0));
441 QVERIFY(l_CurrentInstrument == l_ResourceList[1]);
444 QCOMPARE(l_NotifyIdentificationSpy.count(), 2);
445 l_Arguments = l_NotifyIdentificationSpy.takeFirst();
446 l_Identification = qvariant_cast<sIdentifier>(l_Arguments.at(0));
448 l_Arguments = l_NotifyIdentificationSpy.takeFirst();
449 l_Identification = qvariant_cast<sIdentifier>(l_Arguments.at(0));
452 QCOMPARE(l_NotifyRangeListSpy.count(), 2);
453 l_Arguments = l_NotifyRangeListSpy.takeFirst();
454 l_RangeList = qvariant_cast<CFluxList>(l_Arguments.at(0));
455 QVERIFY(l_RangeList.empty());
456 l_Arguments = l_NotifyRangeListSpy.takeFirst();
457 l_RangeList = qvariant_cast<CFluxList>(l_Arguments.at(0));
458 QVERIFY(!l_RangeList.empty());
460 QCOMPARE(l_NotifyUnitsListSpy.count(), 2);
461 l_Arguments = l_NotifyUnitsListSpy.takeFirst();
462 l_UnitsList = qvariant_cast<CTHM1176UnitsList>(l_Arguments.at(0));
463 QVERIFY(l_UnitsList.empty());
464 l_Arguments = l_NotifyUnitsListSpy.takeFirst();
465 l_UnitsList = qvariant_cast<CTHM1176UnitsList>(l_Arguments.at(0));
466 QVERIFY(!l_UnitsList.empty());
468 QCOMPARE(l_NotifyDivisorListSpy.count(), 2);
469 l_Arguments = l_NotifyDivisorListSpy.takeFirst();
470 l_DivisorList = qvariant_cast<CDivisorList>(l_Arguments.at(0));
471 QVERIFY(l_DivisorList.empty());
472 l_Arguments = l_NotifyDivisorListSpy.takeFirst();
473 l_DivisorList = qvariant_cast<CDivisorList>(l_Arguments.at(0));
474 QVERIFY(!l_DivisorList.empty());
476 QCOMPARE(l_NotifyAveragingParmBoundsSpy.count(), 2);
477 l_Arguments = l_NotifyAveragingParmBoundsSpy.takeFirst();
478 l_AveragingBounds = qvariant_cast<sAveraging<sBoundedParm>>(l_Arguments.at(0));
479 QVERIFY(l_AveragingBounds.
NoPoints.Val == 0 && l_AveragingBounds.
NoPoints.Min == 0 &&
480 l_AveragingBounds.
NoPoints.Max == 0 && l_AveragingBounds.
NoPoints.Def == 0);
481 l_Arguments = l_NotifyAveragingParmBoundsSpy.takeFirst();
482 l_AveragingBounds = qvariant_cast<sAveraging<sBoundedParm>>(l_Arguments.at(0));
483 QVERIFY(l_AveragingBounds.
NoPoints.Val != 0 && l_AveragingBounds.
NoPoints.Min != 0 &&
484 l_AveragingBounds.
NoPoints.Max != 0 && l_AveragingBounds.
NoPoints.Def != 0);
486 QCOMPARE(l_NotifyTriggerParmBoundsSpy.count(), 2);
487 l_Arguments = l_NotifyTriggerParmBoundsSpy.takeFirst();
488 l_TriggerBounds = qvariant_cast<sInputTrigger<sBoundedParm>>(l_Arguments.at(0));
489 QVERIFY(l_TriggerBounds.
Period_s.Val == 0 && l_TriggerBounds.
Period_s.Min == 0 &&
491 l_TriggerBounds.
Count.Val == 0 && l_TriggerBounds.
Count.Min == 0 &&
492 l_TriggerBounds.
Count.Max == 0 && l_TriggerBounds.
Count.Def == 0);
493 l_Arguments = l_NotifyTriggerParmBoundsSpy.takeFirst();
494 l_TriggerBounds = qvariant_cast<sInputTrigger<sBoundedParm>>(l_Arguments.at(0));
495 QVERIFY(l_TriggerBounds.
Period_s.Val != 0 && l_TriggerBounds.
Period_s.Min != 0 &&
497 l_TriggerBounds.
Count.Val != 0 && l_TriggerBounds.
Count.Min != 0 &&
498 l_TriggerBounds.
Count.Max != 0 && l_TriggerBounds.
Count.Def != 0);
500 QCOMPARE(l_NotifyRangeParmBoundsSpy.count(), 2);
501 l_Arguments = l_NotifyRangeParmBoundsSpy.takeFirst();
502 l_RangeBounds = qvariant_cast<sRange<sBoundedParm>>(l_Arguments.at(0));
503 QVERIFY(l_RangeBounds.
Range.Val == 0 && l_RangeBounds.
Range.Min == 0 &&
504 l_RangeBounds.
Range.Max == 0 && l_RangeBounds.
Range.Def == 0);
505 l_Arguments = l_NotifyRangeParmBoundsSpy.takeFirst();
506 l_RangeBounds = qvariant_cast<sRange<sBoundedParm>>(l_Arguments.at(0));
507 QVERIFY(l_RangeBounds.
Range.Val != 0 && l_RangeBounds.
Range.Min != 0 &&
508 l_RangeBounds.
Range.Max != 0 && l_RangeBounds.
Range.Def != 0);
511 QCOMPARE(l_NotifyAveragingParmsSpy.count(), 2);
512 l_Arguments = l_NotifyAveragingParmsSpy.takeFirst();
513 l_AveragingParms = qvariant_cast<sAveraging<uParm>>(l_Arguments.at(0));
514 QVERIFY(l_AveragingParms.
NoPoints == 0);
515 l_Arguments = l_NotifyAveragingParmsSpy.takeFirst();
516 l_AveragingParms = qvariant_cast<sAveraging<uParm>>(l_Arguments.at(0));
517 QVERIFY(l_AveragingParms.
NoPoints > 0);
519 QCOMPARE(l_NotifyTriggerParmsSpy.count(), 2);
520 l_Arguments = l_NotifyTriggerParmsSpy.takeFirst();
521 l_Trigger = qvariant_cast<sInputTrigger<uParm>>(l_Arguments.at(0));
523 l_Arguments = l_NotifyTriggerParmsSpy.takeFirst();
524 l_Trigger = qvariant_cast<sInputTrigger<uParm>>(l_Arguments.at(0));
527 QCOMPARE(l_NotifyOutputSelectSpy.count(), 2);
528 l_Arguments = l_NotifyOutputSelectSpy.takeFirst();
529 l_OutputSelect = qvariant_cast<sArbitraryMeasurements>(l_Arguments.at(0));
530 QVERIFY(l_OutputSelect.
Bx && l_OutputSelect.
By && l_OutputSelect.
Bz &&
532 l_Arguments = l_NotifyOutputSelectSpy.takeFirst();
533 l_OutputSelect = qvariant_cast<sArbitraryMeasurements>(l_Arguments.at(0));
535 QCOMPARE(l_NotifySleepParmSpy.count(), 2);
536 l_Arguments = l_NotifySleepParmSpy.takeFirst();
537 l_SleepParm = qvariant_cast<bool>(l_Arguments.at(0));
538 QVERIFY(!l_SleepParm);
539 l_Arguments = l_NotifySleepParmSpy.takeFirst();
540 l_SleepParm = qvariant_cast<bool>(l_Arguments.at(0));
542 QCOMPARE(l_NotifyUnitsSpy.count(), 2);
543 l_Arguments = l_NotifyUnitsSpy.takeFirst();
544 l_Units = qvariant_cast<eTHM1176Units>(l_Arguments.at(0));
546 l_Arguments = l_NotifyUnitsSpy.takeFirst();
547 l_Units = qvariant_cast<eTHM1176Units>(l_Arguments.at(0));
549 QCOMPARE(l_NotifyRangeParmsSpy.count(), 2);
550 l_Arguments = l_NotifyRangeParmsSpy.takeFirst();
551 l_RangeParms = qvariant_cast<sRange<uParm>>(l_Arguments.at(0));
552 QVERIFY(!l_RangeParms.
Auto && l_RangeParms.
Range == 0.f);
553 l_Arguments = l_NotifyRangeParmsSpy.takeFirst();
554 l_RangeParms = qvariant_cast<sRange<uParm>>(l_Arguments.at(0));
556 QCOMPARE(l_NotifyCommFormatSpy.count(), 2);
557 l_Arguments = l_NotifyCommFormatSpy.takeFirst();
558 l_CommFormat = qvariant_cast<eCommunicationFormat>(l_Arguments.at(0));
560 l_Arguments = l_NotifyCommFormatSpy.takeFirst();
561 l_CommFormat = qvariant_cast<eCommunicationFormat>(l_Arguments.at(0));
564 QCOMPARE(l_NotifyErrorListSpy.count(), 0);
566 std::cout <<
"- Connected to " << l_Identification.
Model <<
", S/N " << l_Identification.
SerialNumber << std::endl;
570 std::string l_Prompt =
"Please unplug " + l_Identification.
Model +
", S/N " + std::to_string(l_Identification.
SerialNumber);
573 QVERIFY(l_NotifyInstrumentListSpy.count() == 1);
574 l_Arguments = l_NotifyInstrumentListSpy.takeFirst();
575 l_ResourceList = qvariant_cast<CResourceList>(l_Arguments.at(0));
579 QCOMPARE(l_NotifyCommFormatSpy.count(), 1);
580 l_Arguments = l_NotifyCommFormatSpy.takeFirst();
581 l_CommFormat = qvariant_cast<eCommunicationFormat>(l_Arguments.at(0));
585 l_FormerInstrument = l_CurrentInstrument;
586 QCOMPARE(l_NotifyCurrentInstrumentSpy.count(), 1);
587 l_Arguments = l_NotifyCurrentInstrumentSpy.takeFirst();
588 l_CurrentInstrument = qvariant_cast<tResourceName>(l_Arguments.at(0));
589 QVERIFY(l_CurrentInstrument.empty());
592 QCOMPARE(l_NotifyIdentificationSpy.count(), 1);
593 l_Arguments = l_NotifyIdentificationSpy.takeFirst();
594 l_Identification = qvariant_cast<sIdentifier>(l_Arguments.at(0));
597 QCOMPARE(l_NotifyRangeListSpy.count(), 1);
598 l_Arguments = l_NotifyRangeListSpy.takeFirst();
599 l_RangeList = qvariant_cast<CFluxList>(l_Arguments.at(0));
600 QVERIFY(l_RangeList.empty());
602 QCOMPARE(l_NotifyUnitsListSpy.count(), 1);
603 l_Arguments = l_NotifyUnitsListSpy.takeFirst();
604 l_UnitsList = qvariant_cast<CTHM1176UnitsList>(l_Arguments.at(0));
605 QVERIFY(l_UnitsList.empty());
607 QCOMPARE(l_NotifyDivisorListSpy.count(), 1);
608 l_Arguments = l_NotifyDivisorListSpy.takeFirst();
609 l_DivisorList = qvariant_cast<CDivisorList>(l_Arguments.at(0));
610 QVERIFY(l_DivisorList.empty());
612 QCOMPARE(l_NotifyAveragingParmBoundsSpy.count(), 1);
613 l_Arguments = l_NotifyAveragingParmBoundsSpy.takeFirst();
614 l_AveragingBounds = qvariant_cast<sAveraging<sBoundedParm>>(l_Arguments.at(0));
615 QVERIFY(l_AveragingBounds.
NoPoints.Val == 0 && l_AveragingBounds.
NoPoints.Min == 0 &&
616 l_AveragingBounds.
NoPoints.Max == 0 && l_AveragingBounds.
NoPoints.Def == 0);
618 QCOMPARE(l_NotifyTriggerParmBoundsSpy.count(), 1);
619 l_Arguments = l_NotifyTriggerParmBoundsSpy.takeFirst();
620 l_TriggerBounds = qvariant_cast<sInputTrigger<sBoundedParm>>(l_Arguments.at(0));
621 QVERIFY(l_TriggerBounds.
Period_s.Val == 0 && l_TriggerBounds.
Period_s.Min == 0 &&
623 l_TriggerBounds.
Count.Val == 0 && l_TriggerBounds.
Count.Min == 0 &&
624 l_TriggerBounds.
Count.Max == 0 && l_TriggerBounds.
Count.Def == 0);
626 QCOMPARE(l_NotifyRangeParmBoundsSpy.count(), 1);
627 l_Arguments = l_NotifyRangeParmBoundsSpy.takeFirst();
628 l_RangeBounds = qvariant_cast<sRange<sBoundedParm>>(l_Arguments.at(0));
629 QVERIFY(l_RangeBounds.
Range.Val == 0 && l_RangeBounds.
Range.Min == 0 &&
630 l_RangeBounds.
Range.Max == 0 && l_RangeBounds.
Range.Def == 0);
633 QCOMPARE(l_NotifyAveragingParmsSpy.count(), 1);
634 l_Arguments = l_NotifyAveragingParmsSpy.takeFirst();
635 l_AveragingParms = qvariant_cast<sAveraging<uParm>>(l_Arguments.at(0));
636 QVERIFY(l_AveragingParms.
NoPoints == 0);
638 QCOMPARE(l_NotifyTriggerParmsSpy.count(), 1);
639 l_Arguments = l_NotifyTriggerParmsSpy.takeFirst();
640 l_Trigger = qvariant_cast<sInputTrigger<uParm>>(l_Arguments.at(0));
643 QCOMPARE(l_NotifyOutputSelectSpy.count(), 1);
644 l_Arguments = l_NotifyOutputSelectSpy.takeFirst();
645 l_OutputSelect = qvariant_cast<sArbitraryMeasurements>(l_Arguments.at(0));
646 QVERIFY(l_OutputSelect.
Bx && l_OutputSelect.
By && l_OutputSelect.
Bz &&
650 QCOMPARE(l_NotifySleepParmSpy.count(), 1);
651 l_Arguments = l_NotifySleepParmSpy.takeFirst();
652 l_SleepParm = qvariant_cast<bool>(l_Arguments.at(0));
653 QVERIFY(!l_SleepParm);
655 QCOMPARE(l_NotifyUnitsSpy.count(), 1);
656 l_Arguments = l_NotifyUnitsSpy.takeFirst();
657 l_Units = qvariant_cast<eTHM1176Units>(l_Arguments.at(0));
660 QCOMPARE(l_NotifyRangeParmsSpy.count(), 1);
661 l_Arguments = l_NotifyRangeParmsSpy.takeFirst();
662 l_RangeParms = qvariant_cast<sRange<uParm>>(l_Arguments.at(0));
663 QVERIFY(!l_RangeParms.
Auto && l_RangeParms.
Range == 0.f);
666 QCOMPARE(l_NotifyOperatingModeSpy.count(), 1);
667 l_Arguments = l_NotifyOperatingModeSpy.takeFirst();
668 l_CurrentOperatingMode = qvariant_cast<eTHM1176OperatingMode>(l_Arguments.at(0));
671 QCOMPARE(l_NotifyErrorListSpy.count(), 0);
673 std::cout <<
"- No longer connected" << std::endl;
681 QCOMPARE(l_NotifyCurrentInstrumentSpy.count(), 0);
684 QCOMPARE(l_NotifyIdentificationSpy.count(), 0);
685 QCOMPARE(l_NotifyRangeListSpy.count(), 0);
686 QCOMPARE(l_NotifyUnitsListSpy.count(), 0);
687 QCOMPARE(l_NotifyDivisorListSpy.count(), 0);
688 QCOMPARE(l_NotifyAveragingParmBoundsSpy.count(), 0);
689 QCOMPARE(l_NotifyTriggerParmBoundsSpy.count(), 0);
690 QCOMPARE(l_NotifyRangeParmBoundsSpy.count(), 0);
693 QCOMPARE(l_NotifyAveragingParmsSpy.count(), 0);
694 QCOMPARE(l_NotifyTriggerParmsSpy.count(), 0);
695 QCOMPARE(l_NotifyOutputSelectSpy.count(), 0);
696 QCOMPARE(l_NotifySleepParmSpy.count(), 0);
697 QCOMPARE(l_NotifyUnitsSpy.count(), 0);
698 QCOMPARE(l_NotifyRangeParmsSpy.count(), 0);
699 QCOMPARE(l_NotifyCommFormatSpy.count(), 0);
702 QCOMPARE(l_NotifyOperatingModeSpy.count(), 0);
705 QCOMPARE(l_NotifyErrorListSpy.count(), 1);
706 l_Arguments = l_NotifyErrorListSpy.takeFirst();
707 l_LatestErrors = qvariant_cast<CErrorList>(l_Arguments.at(0));
708 QCOMPARE(
static_cast<int>(l_LatestErrors.size()), 1);
710 std::cout <<
"- Invalid connection request returned error: " << l_LatestErrors[0].Code <<
", " <<
711 l_LatestErrors[0].Description <<
", " << l_LatestErrors[0].Context << std::endl;
712 std::cout <<
"- No longer connected" << std::endl;
720 QCOMPARE(l_NotifyOperatingModeSpy.count(), 1);
721 l_Arguments = l_NotifyOperatingModeSpy.takeFirst();
722 l_CurrentOperatingMode = qvariant_cast<eTHM1176OperatingMode>(l_Arguments.at(0));
726 l_FormerInstrument = l_CurrentInstrument;
727 QCOMPARE(l_NotifyCurrentInstrumentSpy.count(), 1);
728 l_Arguments = l_NotifyCurrentInstrumentSpy.takeFirst();
729 l_CurrentInstrument = qvariant_cast<tResourceName>(l_Arguments.at(0));
730 QCOMPARE(l_CurrentInstrument, l_ResourceList[0]);
733 QCOMPARE(l_NotifyIdentificationSpy.count(), 1);
734 l_Arguments = l_NotifyIdentificationSpy.takeFirst();
735 l_Identification = qvariant_cast<sIdentifier>(l_Arguments.at(0));
738 QCOMPARE(l_NotifyRangeListSpy.count(), 1);
739 l_Arguments = l_NotifyRangeListSpy.takeFirst();
740 l_RangeList = qvariant_cast<CFluxList>(l_Arguments.at(0));
741 QVERIFY(!l_RangeList.empty());
743 QCOMPARE(l_NotifyUnitsListSpy.count(), 1);
744 l_Arguments = l_NotifyUnitsListSpy.takeFirst();
745 l_UnitsList = qvariant_cast<CTHM1176UnitsList>(l_Arguments.at(0));
746 QVERIFY(!l_UnitsList.empty());
748 QCOMPARE(l_NotifyDivisorListSpy.count(), 1);
749 l_Arguments = l_NotifyDivisorListSpy.takeFirst();
750 l_DivisorList = qvariant_cast<CDivisorList>(l_Arguments.at(0));
751 QVERIFY(!l_DivisorList.empty());
753 QCOMPARE(l_NotifyAveragingParmBoundsSpy.count(), 1);
754 l_Arguments = l_NotifyAveragingParmBoundsSpy.takeFirst();
755 l_AveragingBounds = qvariant_cast<sAveraging<sBoundedParm>>(l_Arguments.at(0));
756 QVERIFY(l_AveragingBounds.
NoPoints.Val != 0 && l_AveragingBounds.
NoPoints.Min != 0 &&
757 l_AveragingBounds.
NoPoints.Max != 0 && l_AveragingBounds.
NoPoints.Def != 0);
759 QCOMPARE(l_NotifyTriggerParmBoundsSpy.count(), 1);
760 l_Arguments = l_NotifyTriggerParmBoundsSpy.takeFirst();
761 l_TriggerBounds = qvariant_cast<sInputTrigger<sBoundedParm>>(l_Arguments.at(0));
762 QVERIFY(l_TriggerBounds.
Period_s.Val != 0 && l_TriggerBounds.
Period_s.Min != 0 &&
764 l_TriggerBounds.
Count.Val != 0 && l_TriggerBounds.
Count.Min != 0 &&
765 l_TriggerBounds.
Count.Max != 0 && l_TriggerBounds.
Count.Def != 0);
767 QCOMPARE(l_NotifyRangeParmBoundsSpy.count(), 1);
768 l_Arguments = l_NotifyRangeParmBoundsSpy.takeFirst();
769 l_RangeBounds = qvariant_cast<sRange<sBoundedParm>>(l_Arguments.at(0));
770 QVERIFY(l_RangeBounds.
Range.Val != 0 && l_RangeBounds.
Range.Min != 0 &&
771 l_RangeBounds.
Range.Max != 0 && l_RangeBounds.
Range.Def != 0);
774 QCOMPARE(l_NotifyAveragingParmsSpy.count(), 1);
775 l_Arguments = l_NotifyAveragingParmsSpy.takeFirst();
776 l_AveragingParms = qvariant_cast<sAveraging<uParm>>(l_Arguments.at(0));
777 QVERIFY(l_AveragingParms.
NoPoints > 0);
779 QCOMPARE(l_NotifyTriggerParmsSpy.count(), 1);
780 l_Arguments = l_NotifyTriggerParmsSpy.takeFirst();
781 l_Trigger = qvariant_cast<sInputTrigger<uParm>>(l_Arguments.at(0));
784 QCOMPARE(l_NotifyOutputSelectSpy.count(), 1);
785 l_Arguments = l_NotifyOutputSelectSpy.takeFirst();
786 l_OutputSelect = qvariant_cast<sArbitraryMeasurements>(l_Arguments.at(0));
788 QCOMPARE(l_NotifySleepParmSpy.count(), 1);
789 l_Arguments = l_NotifySleepParmSpy.takeFirst();
790 l_SleepParm = qvariant_cast<bool>(l_Arguments.at(0));
792 QCOMPARE(l_NotifyUnitsSpy.count(), 1);
793 l_Arguments = l_NotifyUnitsSpy.takeFirst();
794 l_Units = qvariant_cast<eTHM1176Units>(l_Arguments.at(0));
796 QCOMPARE(l_NotifyRangeParmsSpy.count(), 1);
797 l_Arguments = l_NotifyRangeParmsSpy.takeFirst();
798 l_RangeParms = qvariant_cast<sRange<uParm>>(l_Arguments.at(0));
800 QCOMPARE(l_NotifyCommFormatSpy.count(), 1);
801 l_Arguments = l_NotifyCommFormatSpy.takeFirst();
802 l_CommFormat = qvariant_cast<eCommunicationFormat>(l_Arguments.at(0));
805 QCOMPARE(l_NotifyErrorListSpy.count(), 0);
807 std::cout <<
"- Connected to " << l_Identification.
Model <<
", S/N " << l_Identification.
SerialNumber << std::endl;
815 QCOMPARE(l_NotifyCommFormatSpy.count(), 1);
816 l_Arguments = l_NotifyCommFormatSpy.takeFirst();
817 l_CommFormat = qvariant_cast<eCommunicationFormat>(l_Arguments.at(0));
821 l_FormerInstrument = l_CurrentInstrument;
822 QCOMPARE(l_NotifyCurrentInstrumentSpy.count(), 1);
823 l_Arguments = l_NotifyCurrentInstrumentSpy.takeFirst();
824 l_CurrentInstrument = qvariant_cast<tResourceName>(l_Arguments.at(0));
825 QVERIFY(l_CurrentInstrument.empty());
828 QCOMPARE(l_NotifyIdentificationSpy.count(), 1);
829 l_Arguments = l_NotifyIdentificationSpy.takeFirst();
830 l_Identification = qvariant_cast<sIdentifier>(l_Arguments.at(0));
833 QCOMPARE(l_NotifyRangeListSpy.count(), 1);
834 l_Arguments = l_NotifyRangeListSpy.takeFirst();
835 l_RangeList = qvariant_cast<CFluxList>(l_Arguments.at(0));
836 QVERIFY(l_RangeList.empty());
838 QCOMPARE(l_NotifyUnitsListSpy.count(), 1);
839 l_Arguments = l_NotifyUnitsListSpy.takeFirst();
840 l_UnitsList = qvariant_cast<CTHM1176UnitsList>(l_Arguments.at(0));
841 QVERIFY(l_UnitsList.empty());
843 QCOMPARE(l_NotifyDivisorListSpy.count(), 1);
844 l_Arguments = l_NotifyDivisorListSpy.takeFirst();
845 l_DivisorList = qvariant_cast<CDivisorList>(l_Arguments.at(0));
846 QVERIFY(l_DivisorList.empty());
848 QCOMPARE(l_NotifyAveragingParmBoundsSpy.count(), 1);
849 l_Arguments = l_NotifyAveragingParmBoundsSpy.takeFirst();
850 l_AveragingBounds = qvariant_cast<sAveraging<sBoundedParm>>(l_Arguments.at(0));
851 QVERIFY(l_AveragingBounds.
NoPoints.Val == 0 && l_AveragingBounds.
NoPoints.Min == 0 &&
852 l_AveragingBounds.
NoPoints.Max == 0 && l_AveragingBounds.
NoPoints.Def == 0);
854 QCOMPARE(l_NotifyTriggerParmBoundsSpy.count(), 1);
855 l_Arguments = l_NotifyTriggerParmBoundsSpy.takeFirst();
856 l_TriggerBounds = qvariant_cast<sInputTrigger<sBoundedParm>>(l_Arguments.at(0));
857 QVERIFY(l_TriggerBounds.
Period_s.Val == 0 && l_TriggerBounds.
Period_s.Min == 0 &&
859 l_TriggerBounds.
Count.Val == 0 && l_TriggerBounds.
Count.Min == 0 &&
860 l_TriggerBounds.
Count.Max == 0 && l_TriggerBounds.
Count.Def == 0);
862 QCOMPARE(l_NotifyRangeParmBoundsSpy.count(), 1);
863 l_Arguments = l_NotifyRangeParmBoundsSpy.takeFirst();
864 l_RangeBounds = qvariant_cast<sRange<sBoundedParm>>(l_Arguments.at(0));
865 QVERIFY(l_RangeBounds.
Range.Val == 0 && l_RangeBounds.
Range.Min == 0 &&
866 l_RangeBounds.
Range.Max == 0 && l_RangeBounds.
Range.Def == 0);
869 QCOMPARE(l_NotifyAveragingParmsSpy.count(), 1);
870 l_Arguments = l_NotifyAveragingParmsSpy.takeFirst();
871 l_AveragingParms = qvariant_cast<sAveraging<uParm>>(l_Arguments.at(0));
872 QVERIFY(l_AveragingParms.
NoPoints == 0);
874 QCOMPARE(l_NotifyTriggerParmsSpy.count(), 1);
875 l_Arguments = l_NotifyTriggerParmsSpy.takeFirst();
876 l_Trigger = qvariant_cast<sInputTrigger<uParm>>(l_Arguments.at(0));
879 QCOMPARE(l_NotifyOutputSelectSpy.count(), 1);
880 l_Arguments = l_NotifyOutputSelectSpy.takeFirst();
881 l_OutputSelect = qvariant_cast<sArbitraryMeasurements>(l_Arguments.at(0));
882 QVERIFY(l_OutputSelect.
Bx && l_OutputSelect.
By && l_OutputSelect.
Bz &&
886 QCOMPARE(l_NotifySleepParmSpy.count(), 1);
887 l_Arguments = l_NotifySleepParmSpy.takeFirst();
888 l_SleepParm = qvariant_cast<bool>(l_Arguments.at(0));
889 QVERIFY(!l_SleepParm);
891 QCOMPARE(l_NotifyUnitsSpy.count(), 1);
892 l_Arguments = l_NotifyUnitsSpy.takeFirst();
893 l_Units = qvariant_cast<eTHM1176Units>(l_Arguments.at(0));
896 QCOMPARE(l_NotifyRangeParmsSpy.count(), 1);
897 l_Arguments = l_NotifyRangeParmsSpy.takeFirst();
898 l_RangeParms = qvariant_cast<sRange<uParm>>(l_Arguments.at(0));
899 QVERIFY(!l_RangeParms.
Auto && l_RangeParms.
Range == 0.f);
902 QCOMPARE(l_NotifyOperatingModeSpy.count(), 1);
903 l_Arguments = l_NotifyOperatingModeSpy.takeFirst();
904 l_CurrentOperatingMode = qvariant_cast<eTHM1176OperatingMode>(l_Arguments.at(0));
907 QCOMPARE(l_NotifyErrorListSpy.count(), 0);
909 std::cout <<
"- No longer connected" << std::endl;
918#include "THM1176IM_Test01_Connect.moc"
Interface definition for Metrolab THM1176/TFM1186 Instrument Manager.
#define THM1176_SILLY_RESOURCE_NAME
#define THM1176_PROMPT_TIME
static CTHM1176InstrumentManager Manager
#define THM1176_CONNECT_TIME
#define THM1176_BOOT_N_SCAN_TIME
#define THM1176_SCAN_INTERVAL
static void PromptAndWait(std::string Prompt)
THM1176 Instrument Manager class: public interface.
void SetOperatingMode(eTHM1176OperatingMode OperatingMode)
Set a new operating mode, for example to start measuring.
void Stop(void)
Shut down the THM1176 Instrument Manager.
void SetCurrentInstrument(tResourceName CurrentInstrument)
Connect a new instrument.
~THM1176IM_Test01_Connect()
THM1176IM_Test01_Connect()
eCommunicationFormat
Enumeration of possible formats for returned data.
@ kComFormatAscii
Human-legible text.
@ kInputTrigSrcImmediate
Immediate trigger: start measurement immediately after previous one completes.
std::string tResourceName
IEEE488 resource name.
eTHM1176OperatingMode
Operating modes used to initiate actions or provide status.
@ kTHM1176NotConnected
Disconnect instrument.
@ kTHM1176Idle
Place the instrument in idle mode.
eTHM1176Units
Enumeration of possible measurement units, including "ADC".
bool Bx
Return the flux density X-component.
bool Temperature
Return the sensor temperature.
bool By
Return the flux density Y-component.
bool Bz
Return the flux density Z-component.
bool Timestamp
Return the timestamp.
U32 NoMeasurements
Return this number of measurements.
ParmType< U16 > NoPoints
Number of points in block average.
std::string Manufacturer
Manufacturer name ("Metrolab Technology SA")
U32 SerialNumber
Serial number.
std::string Model
Model name (e.g. "THM1176-MF")
bool Auto
Auto-ranging enabled.
ParmType< tFlux > Range
Measurement range, if auto-ranging is not enabled.