2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file TestSuite03.cpp
18 * @author Piotr Fatyga (p.fatyga@samsung.com)
20 * @brief Test cases for Condition class.
25 #include <dpl/log/log.h>
26 #include <dpl/test/test_runner.h>
28 #include <dpl/ace/Attribute.h>
29 #include <dpl/ace-dao-ro/BaseAttribute.h>
30 #include <dpl/ace/Condition.h>
32 #define TESTSUITE03(n) \
33 RUNNER_TEST(ts03_condtitions_tests_ ## n)
35 using namespace AceDB;
37 BaseAttributePtr createAttribute(
40 const Attribute::Type type = Attribute::Type::Subject)
42 std::string aName(name);
43 BaseAttributePtr attr(new Attribute(&aName, Attribute::Match::Equal, type));
45 std::string aValue(value);
46 DPL::StaticPointerCast<Attribute>(attr)->addValue(&aValue);
51 BaseAttributePtr createAttribute(
55 const Attribute::Type type = Attribute::Type::Subject)
57 std::string aName(name);
58 BaseAttributePtr attr(new Attribute(&aName, Attribute::Match::Equal, type));
59 if(value != NULL && value2 != NULL ){
60 std::string aValue(value), aValue2(value2);
61 DPL::StaticPointerCast<Attribute>(attr)->addValue(&aValue);
62 DPL::StaticPointerCast<Attribute>(attr)->addValue(&aValue2);
68 bool MatchResultEqual(
69 Attribute::MatchResult actual,
70 Attribute::MatchResult expected)
72 return actual == expected;
78 Attribute::MatchResult expectedResult)
80 Attribute::MatchResult matchResult = con.evaluateCondition(&attrs);
81 return MatchResultEqual(matchResult ,expectedResult);
85 Condition con(Condition::OR);
88 BaseAttributePtr a1 = createAttribute("version","var1");
89 BaseAttributePtr a2 = createAttribute("r8v2","var2");
90 BaseAttributePtr a3 = createAttribute("author","va3");
92 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
93 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
94 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
101 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
105 Condition con(Condition::AND);
106 AttributeSet attrSet;
108 BaseAttributePtr a1 = createAttribute("version","var1");
109 BaseAttributePtr a2 = createAttribute("r8v2","var2");
110 BaseAttributePtr a3 = createAttribute("author","va3");
112 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
113 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
114 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
121 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
125 Condition con(Condition::OR);
126 AttributeSet attrSet;
128 BaseAttributePtr a1 = createAttribute("version","var1");
129 BaseAttributePtr a2 = createAttribute("r8v2","var2");
130 BaseAttributePtr a3 = createAttribute("author","va3");
131 BaseAttributePtr a4 = createAttribute("version","wrongValue");
133 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
134 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
135 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
142 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
146 Condition con(Condition::AND);
147 AttributeSet attrSet;
149 BaseAttributePtr a1 = createAttribute("version","var1");
150 BaseAttributePtr a2 = createAttribute("r8v2","var2");
151 BaseAttributePtr a3 = createAttribute("author","va3");
152 BaseAttributePtr a4 = createAttribute("version","bad");
153 BaseAttributePtr a5 = createAttribute("version","var1", Attribute::Type::Resource);
155 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
156 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
157 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
165 evaluateResult(con,attrSet,Attribute::MatchResult::MRFalse));
169 Condition con(Condition::OR);
170 AttributeSet attrSet;
172 BaseAttributePtr a1 = createAttribute("version","var1");
173 BaseAttributePtr a2 = createAttribute("r8v2","var2");
174 BaseAttributePtr a3 = createAttribute("author","va3");
176 BaseAttributePtr a4 = createAttribute("version","var1");
177 BaseAttributePtr a5 = createAttribute("r8v2","var2");
178 BaseAttributePtr a6 = createAttribute("author","va3");
180 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
181 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
182 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
189 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
193 Condition con(Condition::OR);
194 AttributeSet attrSet;
196 BaseAttributePtr a1 = createAttribute("version","var1");
197 BaseAttributePtr a2 = createAttribute("r8v2","var2");
198 BaseAttributePtr a3 = createAttribute("author","va3");
200 BaseAttributePtr a4 = createAttribute("version","var2");
201 BaseAttributePtr a5 = createAttribute("r8v2","var3");
202 BaseAttributePtr a6 = createAttribute("author","va4");
204 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
205 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
206 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
213 evaluateResult(con,attrSet,Attribute::MatchResult::MRFalse));
217 Condition con(Condition::OR);
218 AttributeSet attrSet;
220 BaseAttributePtr a1 = createAttribute("version","var1");
221 BaseAttributePtr a2 = createAttribute("r8v2","var2");
222 BaseAttributePtr a3 = createAttribute("author","va3");
224 BaseAttributePtr a4 = createAttribute("version","var1", Attribute::Type::Resource );
225 BaseAttributePtr a5 = createAttribute("r8v2","var2", Attribute::Type::Resource);
226 BaseAttributePtr a6 = createAttribute("author","va3", Attribute::Type::Resource);
228 BaseAttributePtr a7 = createAttribute("version","var2" );
229 BaseAttributePtr a8 = createAttribute("r8v2","var3");
230 BaseAttributePtr a9 = createAttribute("author","va4");
232 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
233 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
234 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
243 //Despite that there are attribute a4,a5,a6 that matches the value of attributes
244 //a1,a2,a3 the type of the attributes is different
246 evaluateResult(con,attrSet,Attribute::MatchResult::MRFalse));
249 //Test if the same attributes (but other instances) passes the test
252 Condition con(Condition::OR);
253 AttributeSet attrSet;
255 BaseAttributePtr a1 = createAttribute("version","var1");
256 BaseAttributePtr a2 = createAttribute("r8v2","var2");
257 BaseAttributePtr a3 = createAttribute("author","va3");
259 BaseAttributePtr a4 = createAttribute("version","var1");
260 BaseAttributePtr a5 = createAttribute("r8v2","var2", Attribute::Type::Resource);
261 BaseAttributePtr a6 = createAttribute("author","va3", Attribute::Type::Resource);
262 BaseAttributePtr a7 = createAttribute("r8v2","aaa");
263 BaseAttributePtr a8 = createAttribute("author","aaa");
265 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
266 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
267 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
276 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
280 Condition con(Condition::OR);
281 AttributeSet attrSet;
283 BaseAttributePtr a1 = createAttribute("version", NULL); //empty bag
284 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
288 evaluateResult(con,attrSet,Attribute::MatchResult::MRFalse));
292 Condition con(Condition::OR);
293 AttributeSet attrSet;
295 BaseAttributePtr a1 = createAttribute("version","var1","var2");
297 BaseAttributePtr a4 = createAttribute("version","var1");
299 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
301 //It's enough that one value from string bag matches
303 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
307 Condition con(Condition::AND);
308 AttributeSet attrSet;
310 BaseAttributePtr a1 = createAttribute("version","var1","var2");
311 BaseAttributePtr a2 = createAttribute("version","var3","var1");
313 BaseAttributePtr a4 = createAttribute("version","var1");
315 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
316 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
318 //It's enough that one value from string bag matches
320 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
325 Condition con(Condition::OR);
326 AttributeSet attrSet;
328 BaseAttributePtr a1 = createAttribute("version","var1");
329 BaseAttributePtr a2 = createAttribute("r8v2","var2");
330 BaseAttributePtr a3 = createAttribute("author","va3");
332 BaseAttributePtr a4 = createAttribute("version","var1");
333 BaseAttributePtr a5 = createAttribute("r8v2","var2", Attribute::Type::Resource);
334 BaseAttributePtr a6 = createAttribute("author","va3", Attribute::Type::Resource);
336 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
337 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
338 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
344 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
348 Condition con(Condition::AND);
349 AttributeSet attrSet;
351 BaseAttributePtr a1 = createAttribute("version",NULL);
352 a1->setUndetermind(true);
353 BaseAttributePtr a4 = createAttribute("version","var1");
354 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
358 evaluateResult(con,attrSet,Attribute::MatchResult::MRUndetermined));
362 Condition con(Condition::OR);
363 AttributeSet attrSet;
365 BaseAttributePtr a1 = createAttribute("version",NULL);
366 a1->setUndetermind(true);
367 BaseAttributePtr a2 = createAttribute("author","good");
368 BaseAttributePtr a4 = createAttribute("version","var1");
369 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
370 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
375 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
379 Condition con(Condition::OR);
380 AttributeSet attrSet;
382 BaseAttributePtr a1 = createAttribute("version",NULL,NULL);
383 a1->setUndetermind(true);
384 BaseAttributePtr a4 = createAttribute("version","var1");
385 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
389 evaluateResult(con,attrSet,Attribute::MatchResult::MRUndetermined));
393 Condition con(Condition::OR);
394 AttributeSet attrSet;
396 BaseAttributePtr a1 = createAttribute("version","var1","aaa");
397 a1->setUndetermind(true);
398 BaseAttributePtr a4 = createAttribute("version","var1");
399 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
403 evaluateResult(con,attrSet,Attribute::MatchResult::MRUndetermined));
407 Condition con(Condition::AND);
408 AttributeSet attrSet;
410 BaseAttributePtr a1 = createAttribute("version","var1");
411 BaseAttributePtr a2 = createAttribute("version1","var1");
412 BaseAttributePtr a3 = createAttribute("version2","var1");
413 BaseAttributePtr a4 = createAttribute("version3","var1");
414 BaseAttributePtr a5 = createAttribute("version1","var2");
416 Condition con2(Condition::AND);
417 con2.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
418 Condition con3(Condition::OR);
419 con3.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
420 con3.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
422 con.addCondition(con2);
423 con.addCondition(con3);
425 con.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
432 evaluateResult(con,attrSet,Attribute::MatchResult::MRFalse));
436 Condition con(Condition::OR);
437 AttributeSet attrSet;
439 BaseAttributePtr a1 = createAttribute("version","var1");
440 BaseAttributePtr a2 = createAttribute("version1","var1");
441 BaseAttributePtr a3 = createAttribute("version2","var1");
442 BaseAttributePtr a4 = createAttribute("version3","var1");
443 BaseAttributePtr a5 = createAttribute("version1","var2");
445 Condition con2(Condition::AND);
446 con2.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
447 con2.addAttribute(*DPL::StaticPointerCast<Attribute>(a5));
448 Condition con3(Condition::AND);
449 con3.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
450 con3.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
451 Condition con4(Condition::AND);
452 con4.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
454 con3.addCondition(con4);
455 con.addCondition(con2);
456 con.addCondition(con3);
464 evaluateResult(con,attrSet,Attribute::MatchResult::MRFalse));
468 Condition con(Condition::OR);
469 AttributeSet attrSet;
471 BaseAttributePtr a1 = createAttribute("version","var1");
472 BaseAttributePtr a2 = createAttribute("version1","var1");
473 BaseAttributePtr a3 = createAttribute("version2","var1");
474 BaseAttributePtr a4 = createAttribute("version3","var1");
475 BaseAttributePtr a5 = createAttribute("version1","var2");
477 Condition con2(Condition::AND);
478 con2.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
479 con2.addAttribute(*DPL::StaticPointerCast<Attribute>(a5));
480 Condition con3(Condition::OR);
481 con3.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
482 con3.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
484 con.addCondition(con2);
485 con.addCondition(con3);
493 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));
497 Condition con(Condition::OR);
498 AttributeSet attrSet;
500 BaseAttributePtr a1 = createAttribute("version","var1");
501 BaseAttributePtr a2 = createAttribute("version1","var1");
502 BaseAttributePtr a3 = createAttribute("version2","var1");
503 BaseAttributePtr a4 = createAttribute("version3","var1");
505 BaseAttributePtr a5 = createAttribute("version1","var2");
506 BaseAttributePtr a6 = createAttribute("version2","var2");
507 BaseAttributePtr a7 = createAttribute("version3","var2");
508 BaseAttributePtr a8 = createAttribute("version4","var2");
510 Condition con2(Condition::OR);
511 Condition con3(Condition::OR);
512 Condition con4(Condition::OR);
513 Condition con5(Condition::OR);
515 con2.addAttribute(*DPL::StaticPointerCast<Attribute>(a2));
516 con3.addAttribute(*DPL::StaticPointerCast<Attribute>(a3));
517 con4.addAttribute(*DPL::StaticPointerCast<Attribute>(a4));
518 con5.addAttribute(*DPL::StaticPointerCast<Attribute>(a1));
520 con2.addCondition(con4);
521 con3.addCondition(con5);
522 con.addCondition(con2);
523 con.addCondition(con3);
532 evaluateResult(con,attrSet,Attribute::MatchResult::MRTrue));