blob: d7703c0dd095b2756618cab4db75e09f77f52f99 [file] [log] [blame]
Václav Kubernát07204242018-06-04 18:12:09 +02001/*
2 * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
3 * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
4 *
5 * Written by Václav Kubernát <kubervac@fit.cvut.cz>
6 *
7*/
8
Jan Kundráta33cf082019-03-28 11:55:57 +01009#include "trompeloeil_doctest.h"
Jan Kundrát76b3ddc2019-07-03 10:31:27 +020010#include <boost/core/demangle.hpp>
Václav Kubernát24df80e2018-06-06 15:18:03 +020011#include "ast_commands.hpp"
Václav Kubernát07204242018-06-04 18:12:09 +020012#include "parser.hpp"
Václav Kubernátbddbb172018-06-13 16:27:39 +020013#include "static_schema.hpp"
Václav Kubernát509ce652019-05-29 19:46:44 +020014#include "utils.hpp"
Václav Kubernát07204242018-06-04 18:12:09 +020015
Jan Kundrát76b3ddc2019-07-03 10:31:27 +020016std::ostream& operator<<(std::ostream& s, const set_ cmd)
17{
Václav Kubernátefcac932020-01-10 15:26:32 +010018 return s << "Command SET {path: " << pathToSchemaString(cmd.m_path, Prefixes::Always) << ", type " << boost::core::demangle(cmd.m_data.type().name()) << ", data: " << leafDataToString(cmd.m_data) << "}";
Jan Kundrát76b3ddc2019-07-03 10:31:27 +020019}
20
Václav Kubernát07204242018-06-04 18:12:09 +020021TEST_CASE("leaf editing")
22{
Václav Kubernátbddbb172018-06-13 16:27:39 +020023 auto schema = std::make_shared<StaticSchema>();
Václav Kubernát744f57f2018-06-29 22:46:26 +020024 schema->addModule("mod");
Václav Kubernáteeb38842019-03-20 19:46:05 +010025 schema->addModule("pizza-module");
Václav Kubernátefcac932020-01-10 15:26:32 +010026 schema->addContainer("/", "mod:contA");
27 schema->addLeaf("/", "mod:leafString", yang::LeafDataTypes::String);
28 schema->addLeaf("/", "mod:leafDecimal", yang::LeafDataTypes::Decimal);
29 schema->addLeaf("/", "mod:leafBool", yang::LeafDataTypes::Bool);
30 schema->addLeaf("/", "mod:leafInt8", yang::LeafDataTypes::Int8);
31 schema->addLeaf("/", "mod:leafInt16", yang::LeafDataTypes::Int16);
32 schema->addLeaf("/", "mod:leafInt32", yang::LeafDataTypes::Int32);
33 schema->addLeaf("/", "mod:leafInt64", yang::LeafDataTypes::Int64);
34 schema->addLeaf("/", "mod:leafUint8", yang::LeafDataTypes::Uint8);
35 schema->addLeaf("/", "mod:leafUint16", yang::LeafDataTypes::Uint16);
36 schema->addLeaf("/", "mod:leafUint32", yang::LeafDataTypes::Uint32);
37 schema->addLeaf("/", "mod:leafUint64", yang::LeafDataTypes::Uint64);
38 schema->addLeaf("/", "mod:leafBinary", yang::LeafDataTypes::Binary);
Václav Kubernáteeb38842019-03-20 19:46:05 +010039 schema->addIdentity(std::nullopt, ModuleValuePair{"mod", "food"});
40 schema->addIdentity(std::nullopt, ModuleValuePair{"mod", "vehicle"});
41 schema->addIdentity(ModuleValuePair{"mod", "food"}, ModuleValuePair{"mod", "pizza"});
42 schema->addIdentity(ModuleValuePair{"mod", "food"}, ModuleValuePair{"mod", "spaghetti"});
43 schema->addIdentity(ModuleValuePair{"mod", "pizza"}, ModuleValuePair{"pizza-module", "hawaii"});
Václav Kubernátefcac932020-01-10 15:26:32 +010044 schema->addLeafIdentityRef("/", "mod:foodIdentRef", ModuleValuePair{"mod", "food"});
45 schema->addLeafIdentityRef("/", "mod:pizzaIdentRef", ModuleValuePair{"mod", "pizza"});
46 schema->addLeafIdentityRef("/mod:contA", "mod:identInCont", ModuleValuePair{"mod", "pizza"});
47 schema->addLeafEnum("/", "mod:leafEnum", {"lol", "data", "coze"});
48 schema->addLeaf("/mod:contA", "mod:leafInCont", yang::LeafDataTypes::String);
49 schema->addList("/", "mod:list", {"number"});
50 schema->addLeaf("/mod:list", "mod:leafInList", yang::LeafDataTypes::String);
51 schema->addLeafRef("/", "mod:refToString", "/mod:leafString");
52 schema->addLeafRef("/", "mod:refToInt8", "/mod:leafInt8");
Václav Kubernát07204242018-06-04 18:12:09 +020053 Parser parser(schema);
54 std::string input;
55 std::ostringstream errorStream;
56
57 SECTION("valid input")
58 {
59 set_ expected;
60
Václav Kubernát1bbac7c2020-01-15 17:45:41 +010061 SECTION("set mod:leafString \"some_data\"")
Václav Kubernát07204242018-06-04 18:12:09 +020062 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +010063 input = "set mod:leafString \'some_data\'";
Václav Kubernát2eaceb82018-10-08 19:56:30 +020064 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafString")});
Václav Kubernátebca2552018-06-08 19:06:02 +020065 expected.m_data = std::string("some_data");
Václav Kubernát07204242018-06-04 18:12:09 +020066 }
67
Václav Kubernát1bbac7c2020-01-15 17:45:41 +010068 SECTION("set mod:contA/leafInCont 'more_data'")
Václav Kubernát07204242018-06-04 18:12:09 +020069 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +010070 input = "set mod:contA/leafInCont 'more_data'";
Václav Kubernát2eaceb82018-10-08 19:56:30 +020071 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, container_("contA")});
72 expected.m_path.m_nodes.push_back(dataNode_{leaf_("leafInCont")});
Václav Kubernátebca2552018-06-08 19:06:02 +020073 expected.m_data = std::string("more_data");
74 }
75
Václav Kubernát1bbac7c2020-01-15 17:45:41 +010076 SECTION("set mod:contA/leafInCont \"data with' a quote\"")
Václav Kubernátc18ffac2020-01-10 16:06:06 +010077 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +010078 input = "set mod:contA/leafInCont \"data with' a quote\"";
79 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, container_("contA")});
80 expected.m_path.m_nodes.push_back(dataNode_{leaf_("leafInCont")});
81 expected.m_data = std::string("data with' a quote");
82 }
83
84 SECTION("set mod:contA/leafInCont 'data with\" a quote'")
85 {
86 input = "set mod:contA/leafInCont 'data with\" a quote'";
87 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, container_("contA")});
88 expected.m_path.m_nodes.push_back(dataNode_{leaf_("leafInCont")});
89 expected.m_data = std::string("data with\" a quote");
90 }
91
92 SECTION("set mod:contA/leafInCont 'more d\tata'") // spaces in string
93 {
94 input = "set mod:contA/leafInCont 'more d\tata'";
Václav Kubernátc18ffac2020-01-10 16:06:06 +010095 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, container_("contA")});
96 expected.m_path.m_nodes.push_back(dataNode_{leaf_("leafInCont")});
97 expected.m_data = std::string("more d\tata");
98 }
99
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100100 SECTION("set mod:list[number=1]/leafInList \"another_data\"")
Václav Kubernátebca2552018-06-08 19:06:02 +0200101 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100102 input = "set mod:list[number=1]/leafInList \"another_data\"";
Václav Kubernátebca2552018-06-08 19:06:02 +0200103 auto keys = std::map<std::string, std::string>{
104 {"number", "1"}};
Václav Kubernát2eaceb82018-10-08 19:56:30 +0200105 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, listElement_("list", keys)});
106 expected.m_path.m_nodes.push_back(dataNode_{leaf_("leafInList")});
Václav Kubernátebca2552018-06-08 19:06:02 +0200107 expected.m_data = std::string("another_data");
108 }
109
110 SECTION("data types")
111 {
112 SECTION("string")
113 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100114 input = "set mod:leafString \"somedata\"";
Václav Kubernát2eaceb82018-10-08 19:56:30 +0200115 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafString")});
Václav Kubernátebca2552018-06-08 19:06:02 +0200116 expected.m_data = std::string("somedata");
117 }
118
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200119 SECTION("int8")
Václav Kubernátebca2552018-06-08 19:06:02 +0200120 {
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200121 input = "set mod:leafInt8 2";
122 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafInt8")});
123 expected.m_data = int8_t{2};
124 }
125
126 SECTION("negative int8")
127 {
128 input = "set mod:leafInt8 -10";
129 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafInt8")});
130 expected.m_data = int8_t{-10};
131 }
132
133 SECTION("uint8")
134 {
135 input = "set mod:leafUint8 2";
136 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafUint8")});
137 expected.m_data = uint8_t{2};
138 }
139
140 SECTION("int16")
141 {
142 input = "set mod:leafInt16 30000";
143 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafInt16")});
144 expected.m_data = int16_t{30'000};
145 }
146
147 SECTION("uint16")
148 {
149 input = "set mod:leafUint16 30000";
150 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafUint16")});
151 expected.m_data = uint16_t{30'000};
152 }
153
154 SECTION("int32")
155 {
156 input = "set mod:leafInt32 30000";
157 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafInt32")});
158 expected.m_data = int32_t{30'000};
159 }
160
161 SECTION("uint32")
162 {
163 input = "set mod:leafUint32 30000";
164 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafUint32")});
165 expected.m_data = uint32_t{30'000};
166 }
167
168 SECTION("int32")
169 {
170 input = "set mod:leafInt32 30000";
171 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafInt32")});
172 expected.m_data = int32_t{30'000};
173 }
174
175 SECTION("uint64")
176 {
177 input = "set mod:leafUint64 30000";
178 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafUint64")});
179 expected.m_data = uint64_t{30'000};
Václav Kubernátebca2552018-06-08 19:06:02 +0200180 }
181
182 SECTION("decimal")
183 {
Václav Kubernát744f57f2018-06-29 22:46:26 +0200184 input = "set mod:leafDecimal 3.14159";
Václav Kubernát2eaceb82018-10-08 19:56:30 +0200185 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafDecimal")});
Václav Kubernátebca2552018-06-08 19:06:02 +0200186 expected.m_data = 3.14159;
187 }
188
189 SECTION("enum")
190 {
Václav Kubernát744f57f2018-06-29 22:46:26 +0200191 input = "set mod:leafEnum coze";
Václav Kubernát2eaceb82018-10-08 19:56:30 +0200192 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafEnum")});
Václav Kubernátebca2552018-06-08 19:06:02 +0200193 expected.m_data = enum_("coze");
194 }
195
196 SECTION("bool")
197 {
Václav Kubernát744f57f2018-06-29 22:46:26 +0200198 input = "set mod:leafBool true";
Václav Kubernát2eaceb82018-10-08 19:56:30 +0200199 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafBool")});
Václav Kubernátebca2552018-06-08 19:06:02 +0200200 expected.m_data = true;
201 }
Václav Kubernátab538992019-03-06 15:30:50 +0100202
203 SECTION("binary")
204 {
205 SECTION("zero ending '='")
206 {
207 input = "set mod:leafBinary This/IsABase64EncodedSomething++/342431++";
208 expected.m_data = binary_{"This/IsABase64EncodedSomething++/342431++"};
209 }
210
211 SECTION("one ending '='")
212 {
213 input = "set mod:leafBinary This/IsABase64EncodedSomething++/342431++=";
214 expected.m_data = binary_{"This/IsABase64EncodedSomething++/342431++="};
215 }
216
217 SECTION("two ending '='")
218 {
219 input = "set mod:leafBinary This/IsABase64EncodedSomething++/342431++==";
220 expected.m_data = binary_{"This/IsABase64EncodedSomething++/342431++=="};
221 }
222 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("leafBinary")});
223 }
Václav Kubernáteeb38842019-03-20 19:46:05 +0100224
225 SECTION("identityRef")
226 {
227 SECTION("foodIdentRef")
228 {
229 input = "set mod:foodIdentRef ";
230 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("foodIdentRef")});
231
232 SECTION("food")
233 {
234 input += "food";
235 expected.m_data = identityRef_("food");
236 }
237 SECTION("mod:food")
238 {
239 input += "mod:food";
240 expected.m_data = identityRef_("mod", "food");
241 }
242 SECTION("pizza")
243 {
244 input += "pizza";
245 expected.m_data = identityRef_("pizza");
246 }
247 SECTION("mod:pizza")
248 {
249 input += "mod:pizza";
250 expected.m_data = identityRef_("mod", "pizza");
251 }
252 SECTION("pizza-module:hawaii")
253 {
254 input += "pizza-module:hawaii";
255 expected.m_data = identityRef_("pizza-module", "hawaii");
256 }
257 }
258 SECTION("pizzaIdentRef")
259 {
260 input = "set mod:pizzaIdentRef ";
261 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("pizzaIdentRef")});
262 SECTION("pizza")
263 {
264 input += "pizza";
265 expected.m_data = identityRef_("pizza");
266 }
267 SECTION("mod:pizza")
268 {
269 input += "mod:pizza";
270 expected.m_data = identityRef_("mod", "pizza");
271 }
272 SECTION("pizza-module:hawaii")
273 {
274 input += "pizza-module:hawaii";
275 expected.m_data = identityRef_("pizza-module", "hawaii");
276 }
277 }
278 SECTION("mod:contA/identInCont")
279 {
280 input = "set mod:contA/identInCont ";
281 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, container_("contA")});
282 expected.m_path.m_nodes.push_back(dataNode_(leaf_("identInCont")));
283 SECTION("pizza")
284 {
285 input += "pizza";
286 expected.m_data = identityRef_("pizza");
287 }
288 SECTION("mod:pizza")
289 {
290 input += "mod:pizza";
291 expected.m_data = identityRef_("mod", "pizza");
292 }
293 SECTION("pizza-module:hawaii")
294 {
295 input += "pizza-module:hawaii";
296 expected.m_data = identityRef_("pizza-module", "hawaii");
297 }
298 }
299 }
Václav Kubernát6a8d1d92019-04-24 20:30:36 +0200300 SECTION("leafRef")
301 {
302 SECTION("refToString")
303 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100304 input = "set mod:refToString \"blabal\"";
Václav Kubernát6a8d1d92019-04-24 20:30:36 +0200305 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("refToString")});
306 expected.m_data = std::string("blabal");
307 }
308
309 SECTION("refToInt8")
310 {
311 input = "set mod:refToInt8 42";
312 expected.m_path.m_nodes.push_back(dataNode_{module_{"mod"}, leaf_("refToInt8")});
313 expected.m_data = int8_t{42};
314 }
315 }
Václav Kubernát07204242018-06-04 18:12:09 +0200316 }
317
318 command_ command = parser.parseCommand(input, errorStream);
319 REQUIRE(command.type() == typeid(set_));
320 REQUIRE(boost::get<set_>(command) == expected);
321 }
322
323 SECTION("invalid input")
324 {
Václav Kubernát777704d2020-01-15 18:48:06 +0100325 std::string expectedError;
Václav Kubernát07204242018-06-04 18:12:09 +0200326 SECTION("missing space between a command and its arguments")
327 {
Václav Kubernát777704d2020-01-15 18:48:06 +0100328 SECTION("setmod:leafString some_data")
Václav Kubernát07204242018-06-04 18:12:09 +0200329 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100330 input = "setmod:leafString 'some_data'";
Václav Kubernát07204242018-06-04 18:12:09 +0200331 }
332 }
333
334 SECTION("missing space between arguments")
335 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100336 SECTION("set mod:leafString'lol'")
Václav Kubernát07204242018-06-04 18:12:09 +0200337 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100338 input = "set mod:leafString'lol'";
Václav Kubernát07204242018-06-04 18:12:09 +0200339 }
340 }
341
342 SECTION("non-leaf identifiers")
343 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100344 SECTION("set mod:nonexistent 'blabla'")
Václav Kubernát07204242018-06-04 18:12:09 +0200345 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100346 input = "set mod:nonexistent 'blabla'";
Václav Kubernát07204242018-06-04 18:12:09 +0200347 }
348
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100349 SECTION("set mod:contA 'abde'")
Václav Kubernát07204242018-06-04 18:12:09 +0200350 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100351 input = "set mod:contA 'abde'";
Václav Kubernát07204242018-06-04 18:12:09 +0200352 }
353 }
354
Václav Kubernátebca2552018-06-08 19:06:02 +0200355 SECTION("wrong types")
356 {
Václav Kubernát777704d2020-01-15 18:48:06 +0100357 expectedError = "leaf data type mismatch";
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100358 SECTION("set mod:leafBool 'blabla'")
Václav Kubernátebca2552018-06-08 19:06:02 +0200359 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100360 input = "set mod:leafBool 'blabla'";
Václav Kubernátebca2552018-06-08 19:06:02 +0200361 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100362 SECTION("set mod:leafUint8 'blabla'")
Václav Kubernátebca2552018-06-08 19:06:02 +0200363 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100364 input = "set mod:leafUint8 'blabla'";
Václav Kubernátebca2552018-06-08 19:06:02 +0200365 }
Václav Kubernát777704d2020-01-15 18:48:06 +0100366 SECTION("set mod:leafUint8 -5")
Václav Kubernátebca2552018-06-08 19:06:02 +0200367 {
Václav Kubernát777704d2020-01-15 18:48:06 +0100368 input = "set mod:leafUint8 -5";
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200369 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100370 SECTION("set mod:leafInt8 'blabla'")
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200371 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100372 input = "set mod:leafInt8 'blabla'";
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200373 }
Václav Kubernát777704d2020-01-15 18:48:06 +0100374 SECTION("set mod:leafInt8 130")
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200375 {
Václav Kubernát777704d2020-01-15 18:48:06 +0100376 input = "set mod:leafInt8 130";
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200377 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100378 SECTION("set mod:leafUint16 'blabla'")
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200379 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100380 input = "set mod:leafUint16 'blabla'";
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200381 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100382 SECTION("set mod:leafInt16 'blabla'")
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200383 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100384 input = "set mod:leafInt16 'blabla'";
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200385 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100386 SECTION("set mod:leafUint32 'blabla'")
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200387 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100388 input = "set mod:leafUint32 'blabla'";
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200389 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100390 SECTION("set mod:leafInt32 'blabla'")
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200391 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100392 input = "set mod:leafInt32 'blabla'";
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200393 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100394 SECTION("set mod:leafUint64 'blabla'")
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200395 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100396 input = "set mod:leafUint64 'blabla'";
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200397 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100398 SECTION("set mod:leafInt64 'blabla'")
Ivona Oboňová88c78ca2019-07-02 18:40:07 +0200399 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100400 input = "set mod:leafInt64 'blabla'";
Václav Kubernátebca2552018-06-08 19:06:02 +0200401 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100402 SECTION("set mod:leafEnum 'blabla'")
Václav Kubernátebca2552018-06-08 19:06:02 +0200403 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100404 input = "set mod:leafEnum 'blabla'";
Václav Kubernátebca2552018-06-08 19:06:02 +0200405 }
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100406 SECTION("set mod:refToInt8 'blabla'")
Václav Kubernát6a8d1d92019-04-24 20:30:36 +0200407 {
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100408 input = "set mod:refToInt8 'blabla'";
Václav Kubernát6a8d1d92019-04-24 20:30:36 +0200409 }
Václav Kubernátebca2552018-06-08 19:06:02 +0200410 }
411
Václav Kubernátab538992019-03-06 15:30:50 +0100412 SECTION("wrong base64 strings")
413 {
414 SECTION("invalid character")
Václav Kubernát777704d2020-01-15 18:48:06 +0100415 input = "set mod:leafBinary dbahj-";
Václav Kubernátab538992019-03-06 15:30:50 +0100416 SECTION("equal sign in the middle")
Václav Kubernát777704d2020-01-15 18:48:06 +0100417 input = "set mod:leafBinary db=ahj";
Václav Kubernát1bbac7c2020-01-15 17:45:41 +0100418 SECTION("enclosing in quotes")
419 input = "set mod:leafBinary 'dbahj'";
Václav Kubernátab538992019-03-06 15:30:50 +0100420 }
421
Václav Kubernáteeb38842019-03-20 19:46:05 +0100422 SECTION("non-existing identity")
423 {
424 input = "set mod:foodIdentRef identityBLABLA";
425 }
426
427 SECTION("setting identities with wrong bases")
428 {
429 SECTION("set mod:foodIdentRef mod:vehicle")
430 {
431 input = "set mod:foodIdentRef mod:vehicle";
432 }
433 SECTION("set mod:pizzaIdentRef mod:food")
434 {
435 input = "set mod:pizzaIdentRef mod:food";
436 }
437 }
438 SECTION("setting different module identities without prefix")
439 {
440 input = "set mod:pizzaIdentRef hawaii";
441 }
442 SECTION("identity prefix without name")
443 {
444 input = "set mod:contA/identInCont pizza-module:";
445 }
446
Jan Kundrátc381e632019-03-14 13:39:11 +0100447 REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException);
Václav Kubernát777704d2020-01-15 18:48:06 +0100448 REQUIRE(errorStream.str().find(expectedError) != std::string::npos);
Václav Kubernát07204242018-06-04 18:12:09 +0200449 }
450}