API
 
Loading...
Searching...
No Matches
testMacrosINDI.hpp
Go to the documentation of this file.
1
2#ifndef testMacrosINDI_hpp
3#define testMacrosINDI_hpp
4
5/// This turns on the success-return in the callback validator
6/** See \ref INDI_VALIDATE_CALLBACK_PROPS and \ref INDI_VALIDATE_CALLBACK_PROPS_DERIVED
7 *
8 * \ingroup test_indi
9 */
10#define XWCTEST_INDI_CALLBACK_VALIDATION
11
12/// Make an indi property variable name
13/** This takes m_indiP_ and voltage (as the propname) and creates m_indiP_voltage, which is the standard way
14 * to name an INDI property which takes new requests.
15 *
16 * \param stub [in] the first part of the variable name, e.g. m_indiP_
17 * \param propname [in] the property name, e.g. voltage
18 *
19 * \ingroup test_indi
20 */
21#define XWCTEST_MAKE_INDI_PROP( stub, \
22 propname \
23 ) \
24 stub ## propname
25
26#define XWCTEST_SETUP_INDI_NEW_PROP( propname ) \
27 XWCTEST_MAKE_INDI_PROP(m_indiP_, propname).setDevice(m_configName); \
28 XWCTEST_MAKE_INDI_PROP(m_indiP_, propname).setName(#propname);
29
30#define XWCTEST_SETUP_INDI_ARB_NEW_PROP(varname, propname) \
31 varname.setDevice(m_configName); \
32 varname.setName(#propname);
33
34#define XWCTEST_SETUP_INDI_ARB_PROP( varname, device, propname ) \
35 varname.setDevice(#device); \
36 varname.setName(#propname);
37
38#define XWCTEST_MAKE_INDI_CALLBACK( stub, callback) stub ## callback
39
40/// Catch-2 tests for whether a NEW callback properly validates the input property properly.
41/**
42 * \param testclass [in] the name of class being tested
43 * \param propname [in] the in-INDI name of the property
44 *
45 * \ingroup test_indi
46 */
47#define XWCTEST_INDI_NEW_CALLBACK( testclass, \
48 propname \
49 ) \
50 GIVEN("A New Callback for " # propname ) \
51 { \
52 WHEN("Wrong Device") \
53 { \
54 testclass ## _test sdgt("right"); \
55 pcf::IndiProperty ip; \
56 ip.setDevice("wrong"); \
57 ip.setName( #propname ); \
58 int rv = sdgt.XWCTEST_MAKE_INDI_CALLBACK(newCallBack_m_indiP_,propname)(ip); \
59 REQUIRE(rv == -1); \
60 } \
61 WHEN("Wrong name") \
62 { \
63 testclass ## _test sdgt("right"); \
64 pcf::IndiProperty ip; \
65 ip.setDevice("right"); \
66 ip.setName("wrong"); \
67 int rv = sdgt.XWCTEST_MAKE_INDI_CALLBACK(newCallBack_m_indiP_,propname)(ip); \
68 REQUIRE(rv == -1); \
69 } \
70 WHEN("Right Device.Name") \
71 { \
72 testclass ## _test sdgt("right"); \
73 pcf::IndiProperty ip; \
74 ip.setDevice("right"); \
75 ip.setName( #propname ); \
76 int rv = sdgt.XWCTEST_MAKE_INDI_CALLBACK(newCallBack_m_indiP_,propname)(ip); \
77 REQUIRE(rv == 0); \
78 } \
79 }
80
81/// Catch-2 tests for whether a SET callback properly validates the input property properly.
82/**
83 * \param testclass [in] the class being tested
84 * \param varname [in] the in-class variable name
85 * \param device [in] the device source of the property
86 * \param propname [in] the in-INDI name of the property
87 *
88 * \ingroup test_indi
89 */
90#define XWCTEST_INDI_SET_CALLBACK( testclass, \
91 varname, \
92 device, \
93 propname \
94 ) \
95 GIVEN("A Set Callback for " # propname ) \
96 { \
97 WHEN("Wrong Device") \
98 { \
99 testclass ## _test sdgt("right"); \
100 pcf::IndiProperty ip; \
101 ip.setDevice("wrong"); \
102 ip.setName( #propname ); \
103 int rv = sdgt.XWCTEST_MAKE_INDI_CALLBACK(setCallBack_,varname)(ip); \
104 REQUIRE(rv == -1); \
105 } \
106 WHEN("Wrong name") \
107 { \
108 testclass ## _test sdgt("right"); \
109 pcf::IndiProperty ip; \
110 ip.setDevice(#device); \
111 ip.setName("wrong"); \
112 int rv = sdgt.XWCTEST_MAKE_INDI_CALLBACK(setCallBack_,varname)(ip); \
113 REQUIRE(rv == -1); \
114 } \
115 WHEN("Right Device.Name") \
116 { \
117 testclass ## _test sdgt("right"); \
118 pcf::IndiProperty ip; \
119 ip.setDevice(#device); \
120 ip.setName( #propname ); \
121 int rv = sdgt.XWCTEST_MAKE_INDI_CALLBACK(setCallBack_,varname)(ip); \
122 REQUIRE(rv == 0); \
123 } \
124 }
125
126
127/// Catch-2 tests for whether an arbitrary callback properly validates the input property properly.
128/**
129 * \param testclass [in] the class being tested
130 * \param callback [in] the name of the callback
131 * \param device [in] the device source of the property
132 * \param propname [in] the in-INDI name of the property
133 *
134 * \ingroup test_indi
135 */
136#define XWCTEST_INDI_ARBNEW_CALLBACK( testclass, \
137 callback, \
138 propname \
139 ) \
140 GIVEN("A Callback for " # propname ) \
141 { \
142 WHEN("Wrong Device") \
143 { \
144 testclass ## _test sdgt("right"); \
145 pcf::IndiProperty ip; \
146 ip.setDevice("wrong"); \
147 ip.setName( #propname ); \
148 int rv = sdgt. callback (ip); \
149 REQUIRE(rv == -1); \
150 } \
151 WHEN("Wrong name") \
152 { \
153 testclass ## _test sdgt("right"); \
154 pcf::IndiProperty ip; \
155 ip.setDevice("right"); \
156 ip.setName("wrong" #propname ); \
157 int rv = sdgt. callback (ip); \
158 REQUIRE(rv == -1); \
159 } \
160 WHEN("Right Device.Name") \
161 { \
162 testclass ## _test sdgt("right"); \
163 pcf::IndiProperty ip; \
164 ip.setDevice("right"); \
165 ip.setName( #propname ); \
166 int rv = sdgt. callback (ip); \
167 REQUIRE(rv == 0); \
168 } \
169 }
170#endif