2 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
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.
18 #include <dali-test-suite-utils.h>
19 #include <dali/public-api/dali-core.h>
27 void utc_dali_property_map_startup(void)
29 test_return_value = TET_UNDEF;
32 void utc_dali_property_map_cleanup(void)
34 test_return_value = TET_PASS;
37 int UtcDaliPropertyMapPopulate(void)
40 DALI_TEST_CHECK(map.Empty());
44 map["world"] = "world";
46 map["world"] = 3; // same item as line above
47 DALI_TEST_CHECK(!map.Empty()); // Should no longer be empty
48 DALI_TEST_CHECK(map.Count() == 4); // Should only have four items, not five!!
49 DALI_TEST_CHECK(map["hello"].Get<int>() == 1);
50 DALI_TEST_CHECK(map["world"].Get<int>() == 3);
51 DALI_TEST_EQUALS("DALi", map[10].Get<std::string>(), TEST_LOCATION);
52 DALI_TEST_CHECK(map[100].Get<int>() == 9);
55 DALI_TEST_CHECK(map.Empty());
59 int UtcDaliPropertyMapCopyAndAssignment(void)
66 Property::Map assignedMap;
67 assignedMap["foo"] = 3;
69 DALI_TEST_CHECK(assignedMap.Count() == 2);
71 DALI_TEST_CHECK(assignedMap.Count() == 3);
73 Property::Map copiedMap(map);
74 DALI_TEST_CHECK(copiedMap.Count() == 3);
77 DALI_TEST_CHECK(map.Count() == 3);
79 DALI_TEST_CHECK(map.Count() == 3);
84 int UtcDaliPropertyMapMoveConstructor(void)
90 DALI_TEST_EQUALS(3u, map1.Count(), TEST_LOCATION);
92 Property::Map map2(std::move(map1));
93 DALI_TEST_EQUALS(3u, map2.Count(), TEST_LOCATION);
95 // Calling any methods on map1 will debug assert
96 const char* exceptionMessage = "Cannot use an object previously used as an r-value";
97 DALI_TEST_ASSERTION(map1.Count(), exceptionMessage);
98 DALI_TEST_ASSERTION(map1.Empty(), exceptionMessage);
99 DALI_TEST_ASSERTION(map1.Insert((const char*)"key", Property::Value()), exceptionMessage);
100 DALI_TEST_ASSERTION(map1.Insert(std::string("key"), Property::Value()), exceptionMessage);
101 DALI_TEST_ASSERTION(map1.Insert(0, Property::Value()), exceptionMessage);
102 DALI_TEST_ASSERTION(map1.GetValue(0), exceptionMessage);
103 DALI_TEST_ASSERTION(map1.GetKey(0), exceptionMessage);
104 DALI_TEST_ASSERTION(map1.GetKeyAt(1), exceptionMessage);
105 DALI_TEST_ASSERTION(map1.GetPair(0), exceptionMessage);
106 DALI_TEST_ASSERTION(map1.GetKeyValue(0), exceptionMessage);
107 DALI_TEST_ASSERTION(map1.Find((const char*)"key"), exceptionMessage);
108 DALI_TEST_ASSERTION(map1.Find(std::string("key")), exceptionMessage);
109 DALI_TEST_ASSERTION(map1.Find(0), exceptionMessage);
110 DALI_TEST_ASSERTION(map1.Find(0, "key"), exceptionMessage);
111 DALI_TEST_ASSERTION(map1.Find("key", Property::INTEGER), exceptionMessage);
112 DALI_TEST_ASSERTION(map1.Find(0, Property::INTEGER), exceptionMessage);
113 DALI_TEST_ASSERTION(map1.Clear(), exceptionMessage);
114 DALI_TEST_ASSERTION(map1.Merge(Property::Map()), exceptionMessage);
115 DALI_TEST_ASSERTION(map1["key"], exceptionMessage);
116 DALI_TEST_ASSERTION(const_cast<const Property::Map&>(map1)["key"], exceptionMessage);
117 DALI_TEST_ASSERTION(map1[0], exceptionMessage);
118 DALI_TEST_ASSERTION(const_cast<const Property::Map&>(map1)[0], exceptionMessage);
119 DALI_TEST_ASSERTION(Property::Map temp; map1 = temp, exceptionMessage);
124 int UtcDaliPropertyMapMoveAssignmentOperator(void)
130 DALI_TEST_EQUALS(3u, map1.Count(), TEST_LOCATION);
133 map2[10] = "DALi again";
134 DALI_TEST_EQUALS(1u, map2.Count(), TEST_LOCATION);
136 map2 = std::move(map1);
137 DALI_TEST_EQUALS(3u, map2.Count(), TEST_LOCATION);
139 // Calling any methods on map1 will debug assert
140 const char* exceptionMessage = "Cannot use an object previously used as an r-value";
141 DALI_TEST_ASSERTION(map1.Count(), exceptionMessage);
142 DALI_TEST_ASSERTION(map1.Empty(), exceptionMessage);
143 DALI_TEST_ASSERTION(map1.Insert((const char*)"key", Property::Value()), exceptionMessage);
144 DALI_TEST_ASSERTION(map1.Insert(std::string("key"), Property::Value()), exceptionMessage);
145 DALI_TEST_ASSERTION(map1.Insert(0, Property::Value()), exceptionMessage);
146 DALI_TEST_ASSERTION(map1.GetValue(0), exceptionMessage);
147 DALI_TEST_ASSERTION(map1.GetKey(0), exceptionMessage);
148 DALI_TEST_ASSERTION(map1.GetKeyAt(1), exceptionMessage);
149 DALI_TEST_ASSERTION(map1.GetPair(0), exceptionMessage);
150 DALI_TEST_ASSERTION(map1.GetKeyValue(0), exceptionMessage);
151 DALI_TEST_ASSERTION(map1.Find((const char*)"key"), exceptionMessage);
152 DALI_TEST_ASSERTION(map1.Find(std::string("key")), exceptionMessage);
153 DALI_TEST_ASSERTION(map1.Find(0), exceptionMessage);
154 DALI_TEST_ASSERTION(map1.Find(0, "key"), exceptionMessage);
155 DALI_TEST_ASSERTION(map1.Find("key", Property::INTEGER), exceptionMessage);
156 DALI_TEST_ASSERTION(map1.Find(0, Property::INTEGER), exceptionMessage);
157 DALI_TEST_ASSERTION(map1.Clear(), exceptionMessage);
158 DALI_TEST_ASSERTION(map1.Merge(Property::Map()), exceptionMessage);
159 DALI_TEST_ASSERTION(map1["key"], exceptionMessage);
160 DALI_TEST_ASSERTION(const_cast<const Property::Map&>(map1)["key"], exceptionMessage);
161 DALI_TEST_ASSERTION(map1[0], exceptionMessage);
162 DALI_TEST_ASSERTION(const_cast<const Property::Map&>(map1)[0], exceptionMessage);
163 DALI_TEST_ASSERTION(Property::Map temp; map1 = temp, exceptionMessage);
165 // Self std::move assignment make compile warning over gcc-13. Let we ignore the warning.
167 #pragma GCC diagnostic push
168 #pragma GCC diagnostic ignored "-Wself-move"
171 map2 = std::move(map2);
172 DALI_TEST_EQUALS(3u, map2.Count(), TEST_LOCATION); // No debug assert as nothing should happen
174 #pragma GCC diagnostic pop
180 int UtcDaliPropertyMapConstOperator(void)
186 DALI_TEST_CHECK(map.Count() == 3);
188 const Property::Map& constMap(map);
189 DALI_TEST_CHECK(constMap["world"].Get<int>() == 2);
190 DALI_TEST_CHECK(constMap.Count() == 3); // Ensure count hasn't gone up
192 DALI_TEST_EQUALS("DALi", map[10].Get<std::string>(), TEST_LOCATION);
193 DALI_TEST_CHECK(constMap.Count() == 3); // Ensure count hasn't gone up
198 constMap["invalidKey"];
199 tet_result(TET_FAIL);
201 catch(DaliException& e)
203 DALI_TEST_ASSERT(e, "!\"Invalid Key\"", TEST_LOCATION);
209 int UtcDaliPropertyMapGetValue(void)
214 map[Actor::Property::COLOR] = Color::MAGENTA;
216 Property::Value& value = map.GetValue(0);
217 DALI_TEST_CHECK(value.Get<int>() == 1);
218 value = 10; // Allows the actual changing of the value as we have a ref
219 DALI_TEST_CHECK(map["hello"].Get<int>() == 10);
221 Property::Value& value2 = map.GetValue(2);
222 DALI_TEST_CHECK(value2.Get<Vector4>() == Color::MAGENTA);
223 value2 = Color::CYAN;
224 DALI_TEST_EQUALS(map[Actor::Property::COLOR].Get<Vector4>(), Color::CYAN, TEST_LOCATION);
230 tet_result(TET_FAIL);
232 catch(DaliException& e)
234 DALI_TEST_ASSERT(e, "position", TEST_LOCATION);
240 // deprecated API, only retrieve the key from the string-value pairs
241 int UtcDaliPropertyMapGetKey(void)
246 map[Actor::Property::COLOR] = Color::MAGENTA;
248 DALI_TEST_CHECK(map.GetKey(0) == "hello");
249 DALI_TEST_CHECK(map.GetKey(1) == "world");
255 tet_result(TET_FAIL);
257 catch(DaliException& e)
259 DALI_TEST_ASSERT(e, "position", TEST_LOCATION);
266 tet_result(TET_FAIL);
268 catch(DaliException& e)
270 DALI_TEST_ASSERT(e, "position", TEST_LOCATION);
276 int UtcDaliPropertyMapGetKeyAt(void)
281 map[Actor::Property::COLOR] = Color::MAGENTA;
283 DALI_TEST_CHECK(map.GetKeyAt(0) == "hello");
284 DALI_TEST_CHECK(map.GetKeyAt(1) == "world");
285 DALI_TEST_CHECK(map.GetKeyAt(2) == Actor::Property::COLOR);
291 tet_result(TET_FAIL);
293 catch(DaliException& e)
295 DALI_TEST_ASSERT(e, "position", TEST_LOCATION);
301 int UtcDaliPropertyMapGetPair(void)
306 map[Actor::Property::COLOR] = Color::MAGENTA;
308 DALI_TEST_CHECK(map.GetPair(0).first == "hello");
309 DALI_TEST_CHECK(map.GetPair(0).second.Get<int>() == 1);
310 DALI_TEST_CHECK(map.GetPair(1).first == "world");
311 DALI_TEST_CHECK(map.GetPair(1).second.Get<int>() == 2);
317 tet_result(TET_FAIL);
319 catch(DaliException& e)
321 DALI_TEST_ASSERT(e, "position", TEST_LOCATION);
328 tet_result(TET_FAIL);
330 catch(DaliException& e)
332 DALI_TEST_ASSERT(e, "position", TEST_LOCATION);
338 int UtcDaliPropertyMapGetKeyValue(void)
343 map[Actor::Property::COLOR] = Color::MAGENTA;
345 DALI_TEST_CHECK(map.GetKeyValue(0).first == "hello");
346 DALI_TEST_CHECK(map.GetKeyValue(0).second.Get<int>() == 1);
347 DALI_TEST_CHECK(map.GetKeyValue(1).first == "world");
348 DALI_TEST_CHECK(map.GetKeyValue(1).second.Get<int>() == 2);
349 DALI_TEST_CHECK(map.GetKeyValue(2).first == Actor::Property::COLOR);
350 DALI_TEST_CHECK(map.GetKeyValue(2).second.Get<Vector4>() == Color::MAGENTA);
356 tet_result(TET_FAIL);
358 catch(DaliException& e)
360 DALI_TEST_ASSERT(e, "position", TEST_LOCATION);
366 int UtcDaliPropertyMapFind(void)
374 Property::Value* value = NULL;
376 value = map.Find("hello");
377 DALI_TEST_CHECK(value);
378 DALI_TEST_CHECK(value->Get<int>() == 1);
380 const std::string world("world");
381 value = map.Find(world);
382 DALI_TEST_CHECK(value);
383 DALI_TEST_CHECK(value->Get<int>() == 2);
385 value = map.Find(100);
386 DALI_TEST_CHECK(value);
387 DALI_TEST_CHECK(value->Get<int>() == 9);
389 value = map.Find(10, Property::STRING);
390 DALI_TEST_CHECK(value);
391 DALI_TEST_EQUALS("DALi", value->Get<std::string>(), TEST_LOCATION);
393 value = map.Find(10, Property::INTEGER);
394 DALI_TEST_CHECK(value == NULL);
396 value = map.Find("invalidKey");
397 DALI_TEST_CHECK(!value);
402 int UtcDaliPropertyMapFindIndexThenString(void)
404 // Define the valid keys and values to test with.
405 std::string stringKeyValid = "bar";
406 std::string stringKeyInvalid = "aardvark";
407 int indexKeyValid = 100;
408 int indexKeyInvalid = 101;
410 // Define invalid key and value to test with.
411 std::string stringValueValid = "DALi";
412 int indexValueValid = 3;
414 // Set up a property map containing the valid keys and values defined above.
418 map[stringKeyValid] = stringValueValid;
419 map[indexKeyValid] = indexValueValid;
421 Property::Value* value = NULL;
423 // TEST: If both index and string are valid, the Property::Value of the index is returned.
424 value = map.Find(indexKeyValid, stringKeyValid);
426 DALI_TEST_EQUALS(value->Get<int>(), indexValueValid, TEST_LOCATION);
428 // TEST: If only the index is valid, the Property::Value of the index is returned.
429 value = map.Find(indexKeyValid, stringKeyInvalid);
431 DALI_TEST_EQUALS(value->Get<int>(), indexValueValid, TEST_LOCATION);
433 // TEST: If only the string is valid, the Property::Value of the string is returned.
434 value = map.Find(indexKeyInvalid, stringKeyValid);
436 DALI_TEST_EQUALS(value->Get<std::string>(), stringValueValid, TEST_LOCATION);
438 // TEST: If neither the index or string are valid, then a NULL pointer is returned.
439 value = map.Find(indexKeyInvalid, stringKeyInvalid);
441 DALI_TEST_CHECK(value == NULL);
446 int UtcDaliPropertyMapOperatorIndex(void)
454 const Property::Map map2 = map;
455 const Property::Value& value10 = map2[10];
456 DALI_TEST_EQUALS(value10.Get<std::string>(), "DALi", TEST_LOCATION);
458 const Property::Value& value100 = map2[100];
459 DALI_TEST_EQUALS(value100.Get<int>(), 9, TEST_LOCATION);
461 const Property::Value& valueHello = map2["hello"];
462 DALI_TEST_EQUALS(valueHello.Get<int>(), 1, TEST_LOCATION);
467 int UtcDaliPropertyMapInsertP(void)
470 DALI_TEST_EQUALS(0u, map.Count(), TEST_LOCATION);
471 map.Insert("foo", "bar");
472 DALI_TEST_EQUALS(1u, map.Count(), TEST_LOCATION);
473 Property::Value* value = map.Find("foo");
474 DALI_TEST_CHECK(value);
475 DALI_TEST_EQUALS("bar", value->Get<std::string>(), TEST_LOCATION);
477 map.Insert(std::string("foo2"), "testing");
478 DALI_TEST_EQUALS(2u, map.Count(), TEST_LOCATION);
479 value = map.Find("foo2");
480 DALI_TEST_CHECK(value);
481 DALI_TEST_EQUALS("testing", value->Get<std::string>(), TEST_LOCATION);
483 map.Insert(10, "DALi");
484 DALI_TEST_EQUALS(3u, map.Count(), TEST_LOCATION);
485 value = map.Find(10);
486 DALI_TEST_CHECK(value);
487 DALI_TEST_EQUALS("DALi", value->Get<std::string>(), TEST_LOCATION);
490 DALI_TEST_EQUALS(4u, map.Count(), TEST_LOCATION);
491 value = map.Find(100);
492 DALI_TEST_CHECK(value);
493 DALI_TEST_CHECK(value->Get<int>() == 9);
498 int UtcDaliPropertyMapAddP(void)
501 DALI_TEST_EQUALS(0u, map.Count(), TEST_LOCATION);
502 map.Add("foo", "bar");
503 DALI_TEST_EQUALS(1u, map.Count(), TEST_LOCATION);
504 Property::Value* value = map.Find("foo");
505 DALI_TEST_CHECK(value);
506 DALI_TEST_EQUALS("bar", value->Get<std::string>(), TEST_LOCATION);
508 map.Add(std::string("foo2"), "testing");
509 DALI_TEST_EQUALS(2u, map.Count(), TEST_LOCATION);
510 value = map.Find("foo2");
511 DALI_TEST_CHECK(value);
512 DALI_TEST_EQUALS("testing", value->Get<std::string>(), TEST_LOCATION);
515 DALI_TEST_EQUALS(3u, map.Count(), TEST_LOCATION);
516 value = map.Find(10);
517 DALI_TEST_CHECK(value);
518 DALI_TEST_EQUALS("DALi", value->Get<std::string>(), TEST_LOCATION);
521 DALI_TEST_EQUALS(4u, map.Count(), TEST_LOCATION);
522 value = map.Find(100);
523 DALI_TEST_CHECK(value);
524 DALI_TEST_CHECK(value->Get<int>() == 9);
529 int UtcDaliPropertyMapAddChainP(void)
532 DALI_TEST_EQUALS(0u, map.Count(), TEST_LOCATION);
535 .Add(std::string("foo2"), "testing")
539 DALI_TEST_EQUALS(4u, map.Count(), TEST_LOCATION);
541 Property::Value* value = map.Find("foo");
542 DALI_TEST_CHECK(value);
543 DALI_TEST_EQUALS("bar", value->Get<std::string>(), TEST_LOCATION);
545 value = map.Find("foo2");
546 DALI_TEST_CHECK(value);
547 DALI_TEST_EQUALS("testing", value->Get<std::string>(), TEST_LOCATION);
549 value = map.Find(10);
550 DALI_TEST_CHECK(value);
551 DALI_TEST_EQUALS("DALi", value->Get<std::string>(), TEST_LOCATION);
553 value = map.Find(100);
554 DALI_TEST_CHECK(value);
555 DALI_TEST_CHECK(value->Get<int>() == 9);
560 int UtcDaliPropertyMapAnonymousAddChainP(void)
565 TestMap(Property::Map map)
572 TestMap mapTest(Property::Map().Add("foo", "bar").Add(std::string("foo2"), "testing").Add(10, "DALi").Add(100, 9));
574 Property::Value* value = mapTest.mMap.Find("foo");
575 DALI_TEST_CHECK(value);
576 DALI_TEST_EQUALS("bar", value->Get<std::string>(), TEST_LOCATION);
578 value = mapTest.mMap.Find("foo2");
579 DALI_TEST_CHECK(value);
580 DALI_TEST_EQUALS("testing", value->Get<std::string>(), TEST_LOCATION);
582 value = mapTest.mMap.Find(10);
583 DALI_TEST_CHECK(value);
584 DALI_TEST_EQUALS("DALi", value->Get<std::string>(), TEST_LOCATION);
586 value = mapTest.mMap.Find(100);
587 DALI_TEST_CHECK(value);
588 DALI_TEST_CHECK(value->Get<int>() == 9);
593 int UtcDaliPropertyMapRemove(void)
600 DALI_TEST_CHECK(map.Count() == 3);
601 DALI_TEST_CHECK(!map.Remove(0));
602 DALI_TEST_CHECK(map.Count() == 3);
603 DALI_TEST_CHECK(!map.Remove("doesnotexist"));
604 DALI_TEST_CHECK(map.Count() == 3);
605 DALI_TEST_CHECK(map.Remove(10));
606 DALI_TEST_CHECK(map.Count() == 2);
607 DALI_TEST_CHECK(map.Remove("hello"));
608 DALI_TEST_CHECK(map.Count() == 1);
609 DALI_TEST_CHECK(map.Remove("world"));
610 DALI_TEST_CHECK(map.Count() == 0);
615 int UtcDaliPropertyMapMerge(void)
622 DALI_TEST_CHECK(map.Count() == 3);
624 // Create another map with the same keys but different values
628 map[10] = "3DEngine";
630 // Merge map2 into map1, count should still be 2, map values should be from map2
632 DALI_TEST_CHECK(map.Count() == 3);
633 DALI_TEST_CHECK(map["hello"].Get<int>() == 3);
634 DALI_TEST_CHECK(map["world"].Get<int>() == 4);
635 DALI_TEST_EQUALS("3DEngine", map[10].Get<std::string>(), TEST_LOCATION);
637 // Create another map with different keys
642 // Merge map3 into map1, count should increase, existing values should match previous and new values should match map3
644 DALI_TEST_CHECK(map.Count() == 5);
645 DALI_TEST_CHECK(map["hello"].Get<int>() == 3);
646 DALI_TEST_CHECK(map["world"].Get<int>() == 4);
647 DALI_TEST_CHECK(map["foo"].Get<int>() == 5);
648 DALI_TEST_EQUALS("3DEngine", map[10].Get<std::string>(), TEST_LOCATION);
649 DALI_TEST_CHECK(map[100].Get<int>() == 6);
651 // Create an empty map and attempt to merge, should be successful, nothing should change
653 DALI_TEST_CHECK(map4.Empty());
655 DALI_TEST_CHECK(map4.Empty());
656 DALI_TEST_CHECK(map.Count() == 5);
657 DALI_TEST_CHECK(map["hello"].Get<int>() == 3);
658 DALI_TEST_CHECK(map["world"].Get<int>() == 4);
659 DALI_TEST_CHECK(map["foo"].Get<int>() == 5);
660 DALI_TEST_EQUALS("3DEngine", map[10].Get<std::string>(), TEST_LOCATION);
661 DALI_TEST_CHECK(map[100].Get<int>() == 6);
663 // Merge map into map4, map4 should be the same as map now.
665 DALI_TEST_CHECK(map4.Count() == 5);
666 DALI_TEST_CHECK(map4["hello"].Get<int>() == 3);
667 DALI_TEST_CHECK(map4["world"].Get<int>() == 4);
668 DALI_TEST_CHECK(map4["foo"].Get<int>() == 5);
669 DALI_TEST_EQUALS("3DEngine", map[10].Get<std::string>(), TEST_LOCATION);
670 DALI_TEST_CHECK(map4[100].Get<int>() == 6);
672 // Attempt to merge into itself, should be successful, nothing should change
674 DALI_TEST_CHECK(map.Count() == 5);
675 DALI_TEST_CHECK(map["hello"].Get<int>() == 3);
676 DALI_TEST_CHECK(map["world"].Get<int>() == 4);
677 DALI_TEST_CHECK(map["foo"].Get<int>() == 5);
678 DALI_TEST_EQUALS("3DEngine", map[10].Get<std::string>(), TEST_LOCATION);
679 DALI_TEST_CHECK(map[100].Get<int>() == 6);
684 int UtcDaliPropertyMapOstream01(void)
688 map.Insert("duration", 5.0f);
689 map.Insert(10, "DALi");
690 map.Insert("delay", 1.0f);
692 map.Insert("value", 100);
694 std::ostringstream oss;
697 tet_printf("Testing ouput of map: %s\n", oss.str().c_str());
699 // string-value pairs first, then index-value pairs
700 DALI_TEST_EQUALS(oss.str().compare("Map(5) = {duration:5, delay:1, value:100, 10:DALi, 100:9}"), 0, TEST_LOCATION);
705 int UtcDaliPropertyMapOstream02(void)
707 Property::Map map, map2;
709 map2.Insert("duration", 5.0f);
710 map2.Insert("delay", 1.0f);
711 map2.Insert(10, "DALi");
712 map.Insert("timePeriod", map2);
714 map.Insert("value", 100);
716 std::ostringstream oss;
719 tet_printf("Testing ouput of map: %s\n", oss.str().c_str());
721 // string-value pairs first, then index-value pairs
722 DALI_TEST_EQUALS(oss.str().compare("Map(3) = {timePeriod:Map(3) = {duration:5, delay:1, 10:DALi}, value:100, 100:9}"), 0, TEST_LOCATION);
727 int UtcDaliPropertyKeyConstructorP(void)
729 Property::Key key1("aKey");
730 DALI_TEST_EQUALS(key1.type, Property::Key::STRING, TEST_LOCATION);
731 DALI_TEST_EQUALS(key1.stringKey, "aKey", TEST_LOCATION);
732 DALI_TEST_EQUALS(key1.indexKey, Property::INVALID_INDEX, TEST_LOCATION);
734 Property::Key key2(Actor::Property::COLOR);
735 DALI_TEST_EQUALS(key2.type, Property::Key::INDEX, TEST_LOCATION);
736 DALI_TEST_EQUALS(key2.indexKey, (Dali::Property::Index)Actor::Property::COLOR, TEST_LOCATION);
740 int UtcDaliPropertyKeyEqualityOperatorP(void)
742 Property::Key key1("aKey");
743 Property::Key key2(113);
745 DALI_TEST_CHECK(key1 == "aKey");
746 DALI_TEST_CHECK(!(key1 == "notTheKey"));
747 DALI_TEST_CHECK(!(key1 == 1));
749 DALI_TEST_CHECK(key2 == 113);
750 DALI_TEST_CHECK(!(key2 == 0));
751 DALI_TEST_CHECK(!(key2 == "One hundred and thirteen"));
753 DALI_TEST_CHECK(!(key1 == key2));
754 DALI_TEST_CHECK(key1 != key2);
756 Property::Key key1B("aKey");
757 Property::Key key2B(113);
759 DALI_TEST_CHECK(key1 == key1B);
760 DALI_TEST_CHECK(key2 == key2B);
765 int UtcDaliPropertyKeyInequalityOperatorP(void)
767 Property::Key key1("aKey");
768 Property::Key key2(113);
770 DALI_TEST_CHECK(key1 != "notTheKey");
771 DALI_TEST_CHECK(key1 != 1);
773 DALI_TEST_CHECK(key2 != 0);
774 DALI_TEST_CHECK(key2 != "One hundred and thirteen");
776 DALI_TEST_CHECK(key1 != key2);
781 int UtcDaliPropertyKeyOutputStream(void)
783 Property::Key key1("aKey");
784 Property::Key key2(113);
786 std::ostringstream oss;
788 DALI_TEST_EQUALS(oss.str(), "aKey", TEST_LOCATION);
790 std::ostringstream oss2;
792 DALI_TEST_EQUALS(oss2.str(), "113", TEST_LOCATION);
797 int UtcDaliPropertyMapInitializerListConstructor(void)
799 auto map = Property::Map{
800 {"number mapped to string", 1},
801 {10, "string mapped to number"},
802 {"string mapped", "to string"},
806 DALI_TEST_CHECK(!map.Empty()); // Should not be empty
807 DALI_TEST_EQUALS(4, map.Count(), TEST_LOCATION); // Should have four items
809 DALI_TEST_EQUALS(1, map["number mapped to string"].Get<int>(), TEST_LOCATION);
810 DALI_TEST_EQUALS("string mapped to number", map[10].Get<std::string>(), TEST_LOCATION);
811 DALI_TEST_EQUALS("to string", map["string mapped"].Get<std::string>(), TEST_LOCATION);
812 DALI_TEST_EQUALS(3, map[100].Get<int>(), TEST_LOCATION);
817 int UtcDaliPropertyMapNestedInitializerListConstructor(void)
819 auto map = Property::Map{
822 {3, {{3, {{3, 3}}}}}};
824 DALI_TEST_CHECK(!map.Empty());
825 DALI_TEST_EQUALS(3, map.Count(), TEST_LOCATION);
829 DALI_TEST_EQUALS(1, map[1].Get<int>(), TEST_LOCATION);
834 auto& value1 = map[2];
835 DALI_TEST_EQUALS(Property::MAP, value1.GetType(), TEST_LOCATION);
837 auto& map2 = *(value1.GetMap());
838 DALI_TEST_EQUALS(1, map2.Count(), TEST_LOCATION);
841 DALI_TEST_EQUALS(2, map2[2].Get<int>(), TEST_LOCATION);
844 // Check the third item
846 auto& value1 = map[3];
847 DALI_TEST_EQUALS(Property::MAP, value1.GetType(), TEST_LOCATION);
849 auto& map2 = *(value1.GetMap());
850 DALI_TEST_EQUALS(1, map2.Count(), TEST_LOCATION);
852 auto& value2 = map2[3];
853 DALI_TEST_EQUALS(Property::MAP, value2.GetType(), TEST_LOCATION);
855 auto& map3 = *(value2.GetMap());
856 DALI_TEST_EQUALS(1, map3.Count(), TEST_LOCATION);
859 DALI_TEST_EQUALS(3, map3[3].Get<int>(), TEST_LOCATION);