2 * Copyright (c) 2019 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.
21 #include <dali/public-api/dali-core.h>
22 #include <dali-test-suite-utils.h>
26 void utc_dali_property_map_startup(void)
28 test_return_value = TET_UNDEF;
31 void utc_dali_property_map_cleanup(void)
33 test_return_value = TET_PASS;
36 int UtcDaliPropertyMapPopulate(void)
39 DALI_TEST_CHECK( map.Empty() );
43 map[ "world" ] = "world";
45 map[ "world" ] = 3; // same item as line above
46 DALI_TEST_CHECK( !map.Empty() ); // Should no longer be empty
47 DALI_TEST_CHECK( map.Count() == 4 ); // Should only have four items, not five!!
48 DALI_TEST_CHECK( map["hello"].Get<int>() == 1 );
49 DALI_TEST_CHECK( map["world"].Get<int>() == 3 );
50 DALI_TEST_EQUALS( "DALi", map[ 10 ].Get<std::string>(), TEST_LOCATION );
51 DALI_TEST_CHECK( map[100].Get<int>() == 9 );
54 DALI_TEST_CHECK( map.Empty() );
58 int UtcDaliPropertyMapCopyAndAssignment(void)
65 Property::Map assignedMap;
66 assignedMap[ "foo" ] = 3;
67 assignedMap[ 100 ] = 9;
68 DALI_TEST_CHECK( assignedMap.Count() == 2 );
70 DALI_TEST_CHECK( assignedMap.Count() == 3 );
72 Property::Map copiedMap( map );
73 DALI_TEST_CHECK( copiedMap.Count() == 3 );
76 DALI_TEST_CHECK( map.Count() == 3 );
78 DALI_TEST_CHECK( map.Count() == 3 );
83 int UtcDaliPropertyMapMoveConstructor(void)
89 DALI_TEST_EQUALS( 3u, map1.Count(), TEST_LOCATION );
91 Property::Map map2( std::move( map1 ) );
92 DALI_TEST_EQUALS( 3u, map2.Count(), TEST_LOCATION );
94 // Calling any methods on map1 will debug assert
95 const char * exceptionMessage = "Cannot use an object previously used as an r-value";
96 DALI_TEST_ASSERTION( map1.Count(), exceptionMessage );
97 DALI_TEST_ASSERTION( map1.Empty(), exceptionMessage );
98 DALI_TEST_ASSERTION( map1.Insert( (const char *)"key", Property::Value() ), exceptionMessage );
99 DALI_TEST_ASSERTION( map1.Insert( std::string( "key" ), Property::Value() ), exceptionMessage );
100 DALI_TEST_ASSERTION( map1.Insert( 0, Property::Value() ), exceptionMessage );
101 DALI_TEST_ASSERTION( map1.GetValue( 0 ), exceptionMessage );
102 DALI_TEST_ASSERTION( map1.GetKey( 0 ), exceptionMessage );
103 DALI_TEST_ASSERTION( map1.GetKeyAt( 1 ), exceptionMessage );
104 DALI_TEST_ASSERTION( map1.GetPair( 0 ), exceptionMessage );
105 DALI_TEST_ASSERTION( map1.GetKeyValue( 0 ), exceptionMessage );
106 DALI_TEST_ASSERTION( map1.Find( (const char *)"key" ), exceptionMessage );
107 DALI_TEST_ASSERTION( map1.Find( std::string( "key" ) ), exceptionMessage );
108 DALI_TEST_ASSERTION( map1.Find( 0 ), exceptionMessage );
109 DALI_TEST_ASSERTION( map1.Find( 0, "key" ), exceptionMessage );
110 DALI_TEST_ASSERTION( map1.Find( "key", Property::INTEGER ), exceptionMessage );
111 DALI_TEST_ASSERTION( map1.Find( 0, Property::INTEGER ), exceptionMessage );
112 DALI_TEST_ASSERTION( map1.Clear(), exceptionMessage );
113 DALI_TEST_ASSERTION( map1.Merge( Property::Map() ), exceptionMessage );
114 DALI_TEST_ASSERTION( map1[ "key" ], exceptionMessage );
115 DALI_TEST_ASSERTION( const_cast< const Property::Map& >( map1 )[ "key" ], exceptionMessage );
116 DALI_TEST_ASSERTION( map1[ 0 ], exceptionMessage );
117 DALI_TEST_ASSERTION( const_cast< const Property::Map& >( map1 )[ 0 ], exceptionMessage );
118 DALI_TEST_ASSERTION( Property::Map temp; map1 = temp, exceptionMessage );
123 int UtcDaliPropertyMapMoveAssignmentOperator(void)
129 DALI_TEST_EQUALS( 3u, map1.Count(), TEST_LOCATION );
132 map2[ 10 ] = "DALi again";
133 DALI_TEST_EQUALS( 1u, map2.Count(), TEST_LOCATION );
135 map2 = std::move( map1 );
136 DALI_TEST_EQUALS( 3u, map2.Count(), TEST_LOCATION );
138 // Calling any methods on map1 will debug assert
139 const char * exceptionMessage = "Cannot use an object previously used as an r-value";
140 DALI_TEST_ASSERTION( map1.Count(), exceptionMessage );
141 DALI_TEST_ASSERTION( map1.Empty(), exceptionMessage );
142 DALI_TEST_ASSERTION( map1.Insert( (const char *)"key", Property::Value() ), exceptionMessage );
143 DALI_TEST_ASSERTION( map1.Insert( std::string( "key" ), Property::Value() ), exceptionMessage );
144 DALI_TEST_ASSERTION( map1.Insert( 0, Property::Value() ), exceptionMessage );
145 DALI_TEST_ASSERTION( map1.GetValue( 0 ), exceptionMessage );
146 DALI_TEST_ASSERTION( map1.GetKey( 0 ), exceptionMessage );
147 DALI_TEST_ASSERTION( map1.GetKeyAt( 1 ), exceptionMessage );
148 DALI_TEST_ASSERTION( map1.GetPair( 0 ), exceptionMessage );
149 DALI_TEST_ASSERTION( map1.GetKeyValue( 0 ), exceptionMessage );
150 DALI_TEST_ASSERTION( map1.Find( (const char *)"key" ), exceptionMessage );
151 DALI_TEST_ASSERTION( map1.Find( std::string( "key" ) ), exceptionMessage );
152 DALI_TEST_ASSERTION( map1.Find( 0 ), exceptionMessage );
153 DALI_TEST_ASSERTION( map1.Find( 0, "key" ), exceptionMessage );
154 DALI_TEST_ASSERTION( map1.Find( "key", Property::INTEGER ), exceptionMessage );
155 DALI_TEST_ASSERTION( map1.Find( 0, Property::INTEGER ), exceptionMessage );
156 DALI_TEST_ASSERTION( map1.Clear(), exceptionMessage );
157 DALI_TEST_ASSERTION( map1.Merge( Property::Map() ), exceptionMessage );
158 DALI_TEST_ASSERTION( map1[ "key" ], exceptionMessage );
159 DALI_TEST_ASSERTION( const_cast< const Property::Map& >( map1 )[ "key" ], exceptionMessage );
160 DALI_TEST_ASSERTION( map1[ 0 ], exceptionMessage );
161 DALI_TEST_ASSERTION( const_cast< const Property::Map& >( map1 )[ 0 ], exceptionMessage );
162 DALI_TEST_ASSERTION( Property::Map temp; map1 = temp, exceptionMessage );
165 map2 = std::move( map2 );
166 DALI_TEST_EQUALS( 3u, map2.Count(), TEST_LOCATION ); // No debug assert as nothing should happen
171 int UtcDaliPropertyMapConstOperator(void)
177 DALI_TEST_CHECK( map.Count() == 3 );
179 const Property::Map& constMap( map );
180 DALI_TEST_CHECK( constMap[ "world" ].Get<int>() == 2 );
181 DALI_TEST_CHECK( constMap.Count() == 3 ); // Ensure count hasn't gone up
183 DALI_TEST_EQUALS( "DALi", map[ 10 ].Get<std::string>(), TEST_LOCATION );
184 DALI_TEST_CHECK( constMap.Count() == 3 ); // Ensure count hasn't gone up
189 constMap[ "invalidKey" ];
190 tet_result( TET_FAIL );
192 catch ( DaliException& e )
194 DALI_TEST_ASSERT( e, "! \"Invalid Key\"", TEST_LOCATION );
200 int UtcDaliPropertyMapGetValue(void)
205 map[ Actor::Property::COLOR ] = Color::MAGENTA;
207 Property::Value& value = map.GetValue( 0 );
208 DALI_TEST_CHECK( value.Get<int>() == 1 );
209 value = 10; // Allows the actual changing of the value as we have a ref
210 DALI_TEST_CHECK( map[ "hello" ].Get<int>() == 10 );
212 Property::Value& value2 = map.GetValue( 2 );
213 DALI_TEST_CHECK( value2.Get<Vector4>() == Color::MAGENTA );
214 value2 = Color::CYAN;
215 DALI_TEST_EQUALS( map[ Actor::Property::COLOR].Get<Vector4>(), Color::CYAN, TEST_LOCATION);
221 tet_result( TET_FAIL );
223 catch ( DaliException& e )
225 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
231 // deprecated API, only retrieve the key from the string-value pairs
232 int UtcDaliPropertyMapGetKey(void)
237 map[ Actor::Property::COLOR ] = Color::MAGENTA;
239 DALI_TEST_CHECK( map.GetKey( 0 ) == "hello" );
240 DALI_TEST_CHECK( map.GetKey( 1 ) == "world" );
246 tet_result( TET_FAIL );
248 catch ( DaliException& e )
250 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
257 tet_result( TET_FAIL );
259 catch ( DaliException& e )
261 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
268 int UtcDaliPropertyMapGetKeyAt(void)
273 map[ Actor::Property::COLOR ] = Color::MAGENTA;
275 DALI_TEST_CHECK( map.GetKeyAt( 0 ) == "hello" );
276 DALI_TEST_CHECK( map.GetKeyAt( 1 ) == "world" );
277 DALI_TEST_CHECK( map.GetKeyAt( 2 ) == Actor::Property::COLOR );
283 tet_result( TET_FAIL );
285 catch ( DaliException& e )
287 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
293 int UtcDaliPropertyMapGetPair(void)
298 map[ Actor::Property::COLOR ] = Color::MAGENTA;
300 DALI_TEST_CHECK( map.GetPair( 0 ).first == "hello" );
301 DALI_TEST_CHECK( map.GetPair( 0 ).second.Get< int >() == 1 );
302 DALI_TEST_CHECK( map.GetPair( 1 ).first == "world" );
303 DALI_TEST_CHECK( map.GetPair( 1 ).second.Get< int >() == 2 );
309 tet_result( TET_FAIL );
311 catch ( DaliException& e )
313 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
320 tet_result( TET_FAIL );
322 catch ( DaliException& e )
324 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
330 int UtcDaliPropertyMapGetKeyValue(void)
335 map[ Actor::Property::COLOR ] = Color::MAGENTA;
337 DALI_TEST_CHECK( map.GetKeyValue( 0 ).first == "hello" );
338 DALI_TEST_CHECK( map.GetKeyValue( 0 ).second.Get< int >() == 1 );
339 DALI_TEST_CHECK( map.GetKeyValue( 1 ).first == "world" );
340 DALI_TEST_CHECK( map.GetKeyValue( 1 ).second.Get< int >() == 2 );
341 DALI_TEST_CHECK( map.GetKeyValue( 2 ).first == Actor::Property::COLOR );
342 DALI_TEST_CHECK( map.GetKeyValue( 2 ).second.Get< Vector4 >() == Color::MAGENTA );
348 tet_result( TET_FAIL );
350 catch ( DaliException& e )
352 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
358 int UtcDaliPropertyMapFind(void)
366 Property::Value* value = NULL;
368 value = map.Find( "hello" );
369 DALI_TEST_CHECK( value );
370 DALI_TEST_CHECK( value->Get<int>() == 1 );
372 const std::string world("world");
373 value = map.Find( world );
374 DALI_TEST_CHECK( value );
375 DALI_TEST_CHECK( value->Get<int>() == 2 );
377 value = map.Find( 100 );
378 DALI_TEST_CHECK( value );
379 DALI_TEST_CHECK( value->Get<int>() == 9 );
381 value = map.Find( 10, Property::STRING );
382 DALI_TEST_CHECK( value );
383 DALI_TEST_EQUALS( "DALi", value->Get<std::string>(), TEST_LOCATION );
385 value = map.Find( 10, Property::INTEGER );
386 DALI_TEST_CHECK( value == NULL );
388 value = map.Find( "invalidKey" );
389 DALI_TEST_CHECK( !value );
394 int UtcDaliPropertyMapFindIndexThenString(void)
396 // Define the valid keys and values to test with.
397 std::string stringKeyValid = "bar";
398 std::string stringKeyInvalid = "aardvark";
399 int indexKeyValid = 100;
400 int indexKeyInvalid = 101;
402 // Define invalid key and value to test with.
403 std::string stringValueValid = "DALi";
404 int indexValueValid = 3;
406 // Set up a property map containing the valid keys and values defined above.
409 map[ 10 ] = "string";
410 map[ stringKeyValid ] = stringValueValid;
411 map[ indexKeyValid ] = indexValueValid;
413 Property::Value* value = NULL;
415 // TEST: If both index and string are valid, the Property::Value of the index is returned.
416 value = map.Find( indexKeyValid, stringKeyValid );
418 DALI_TEST_EQUALS( value->Get<int>(), indexValueValid, TEST_LOCATION );
421 // TEST: If only the index is valid, the Property::Value of the index is returned.
422 value = map.Find( indexKeyValid, stringKeyInvalid );
424 DALI_TEST_EQUALS( value->Get<int>(), indexValueValid, TEST_LOCATION );
427 // TEST: If only the string is valid, the Property::Value of the string is returned.
428 value = map.Find( indexKeyInvalid, stringKeyValid );
430 DALI_TEST_EQUALS( value->Get<std::string>(), stringValueValid, TEST_LOCATION );
433 // TEST: If neither the index or string are valid, then a NULL pointer is returned.
434 value = map.Find( indexKeyInvalid, stringKeyInvalid );
436 DALI_TEST_CHECK( value == NULL );
441 int UtcDaliPropertyMapOperatorIndex(void)
449 const Property::Map map2 = map;
450 const Property::Value& value10 = map2[10];
451 DALI_TEST_EQUALS( value10.Get<std::string>(), "DALi", TEST_LOCATION );
453 const Property::Value& value100 = map2[100];
454 DALI_TEST_EQUALS( value100.Get<int>(), 9, TEST_LOCATION );
456 const Property::Value& valueHello = map2["hello"];
457 DALI_TEST_EQUALS( valueHello.Get<int>(), 1, TEST_LOCATION );
462 int UtcDaliPropertyMapInsertP(void)
465 DALI_TEST_EQUALS( 0u, map.Count(), TEST_LOCATION );
466 map.Insert( "foo", "bar");
467 DALI_TEST_EQUALS( 1u, map.Count(), TEST_LOCATION );
468 Property::Value* value = map.Find( "foo" );
469 DALI_TEST_CHECK( value );
470 DALI_TEST_EQUALS( "bar", value->Get<std::string>(), TEST_LOCATION );
472 map.Insert( std::string("foo2"), "testing" );
473 DALI_TEST_EQUALS( 2u, map.Count(), TEST_LOCATION );
474 value = map.Find( "foo2" );
475 DALI_TEST_CHECK( value );
476 DALI_TEST_EQUALS( "testing", value->Get<std::string>(), TEST_LOCATION );
478 map.Insert( 10, "DALi" );
479 DALI_TEST_EQUALS( 3u, map.Count(), TEST_LOCATION );
480 value = map.Find( 10 );
481 DALI_TEST_CHECK( value );
482 DALI_TEST_EQUALS( "DALi", value->Get<std::string>(), TEST_LOCATION );
484 map.Insert( 100, 9 );
485 DALI_TEST_EQUALS( 4u, map.Count(), TEST_LOCATION );
486 value = map.Find( 100 );
487 DALI_TEST_CHECK( value );
488 DALI_TEST_CHECK( value->Get<int>() == 9 );
494 int UtcDaliPropertyMapAddP(void)
497 DALI_TEST_EQUALS( 0u, map.Count(), TEST_LOCATION );
498 map.Add( "foo", "bar");
499 DALI_TEST_EQUALS( 1u, map.Count(), TEST_LOCATION );
500 Property::Value* value = map.Find( "foo" );
501 DALI_TEST_CHECK( value );
502 DALI_TEST_EQUALS( "bar", value->Get<std::string>(), TEST_LOCATION );
504 map.Add( std::string("foo2"), "testing" );
505 DALI_TEST_EQUALS( 2u, map.Count(), TEST_LOCATION );
506 value = map.Find( "foo2" );
507 DALI_TEST_CHECK( value );
508 DALI_TEST_EQUALS( "testing", value->Get<std::string>(), TEST_LOCATION );
510 map.Add( 10, "DALi" );
511 DALI_TEST_EQUALS( 3u, map.Count(), TEST_LOCATION );
512 value = map.Find( 10 );
513 DALI_TEST_CHECK( value );
514 DALI_TEST_EQUALS( "DALi", value->Get<std::string>(), TEST_LOCATION );
517 DALI_TEST_EQUALS( 4u, map.Count(), TEST_LOCATION );
518 value = map.Find( 100 );
519 DALI_TEST_CHECK( value );
520 DALI_TEST_CHECK( value->Get<int>() == 9 );
525 int UtcDaliPropertyMapAddChainP(void)
528 DALI_TEST_EQUALS( 0u, map.Count(), TEST_LOCATION );
531 .Add( std::string("foo2"), "testing" )
535 DALI_TEST_EQUALS( 4u, map.Count(), TEST_LOCATION );
537 Property::Value* value = map.Find( "foo" );
538 DALI_TEST_CHECK( value );
539 DALI_TEST_EQUALS( "bar", value->Get<std::string>(), TEST_LOCATION );
541 value = map.Find( "foo2" );
542 DALI_TEST_CHECK( value );
543 DALI_TEST_EQUALS( "testing", value->Get<std::string>(), TEST_LOCATION );
545 value = map.Find( 10 );
546 DALI_TEST_CHECK( value );
547 DALI_TEST_EQUALS( "DALi", value->Get<std::string>(), TEST_LOCATION );
549 value = map.Find( 100 );
550 DALI_TEST_CHECK( value );
551 DALI_TEST_CHECK( value->Get<int>() == 9 );
556 int UtcDaliPropertyMapAnonymousAddChainP(void)
561 TestMap(Property::Map map)
568 TestMap mapTest( Property::Map().Add( "foo", "bar")
569 .Add( std::string("foo2"), "testing" )
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 );
594 int UtcDaliPropertyMapMerge(void)
601 DALI_TEST_CHECK( map.Count() == 3 );
603 // Create another map with the same keys but different values
607 map[ 10 ] = "3DEngine";
609 // Merge map2 into map1, count should still be 2, map values should be from map2
611 DALI_TEST_CHECK( map.Count() == 3 );
612 DALI_TEST_CHECK( map[ "hello" ].Get< int >() == 3 );
613 DALI_TEST_CHECK( map[ "world"].Get< int >() == 4 );
614 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
616 // Create another map with different keys
621 // Merge map3 into map1, count should increase, existing values should match previous and new values should match map3
623 DALI_TEST_CHECK( map.Count() == 5 );
624 DALI_TEST_CHECK( map[ "hello" ].Get< int >() == 3 );
625 DALI_TEST_CHECK( map[ "world"].Get< int >() == 4 );
626 DALI_TEST_CHECK( map[ "foo"].Get< int >() == 5 );
627 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
628 DALI_TEST_CHECK( map[ 100].Get< int >() == 6 );
630 // Create an empty map and attempt to merge, should be successful, nothing should change
632 DALI_TEST_CHECK( map4.Empty() );
634 DALI_TEST_CHECK( map4.Empty() );
635 DALI_TEST_CHECK( map.Count() == 5 );
636 DALI_TEST_CHECK( map[ "hello" ].Get< int >() == 3 );
637 DALI_TEST_CHECK( map[ "world"].Get< int >() == 4 );
638 DALI_TEST_CHECK( map[ "foo"].Get< int >() == 5 );
639 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
640 DALI_TEST_CHECK( map[ 100 ].Get< int >() == 6 );
642 // Merge map into map4, map4 should be the same as map now.
644 DALI_TEST_CHECK( map4.Count() == 5 );
645 DALI_TEST_CHECK( map4[ "hello" ].Get< int >() == 3 );
646 DALI_TEST_CHECK( map4[ "world"].Get< int >() == 4 );
647 DALI_TEST_CHECK( map4[ "foo"].Get< int >() == 5 );
648 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
649 DALI_TEST_CHECK( map4[ 100 ].Get< int >() == 6 );
651 // Attempt to merge into itself, should be successful, nothing should change
653 DALI_TEST_CHECK( map.Count() == 5 );
654 DALI_TEST_CHECK( map[ "hello" ].Get< int >() == 3 );
655 DALI_TEST_CHECK( map[ "world"].Get< int >() == 4 );
656 DALI_TEST_CHECK( map[ "foo"].Get< int >() == 5 );
657 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
658 DALI_TEST_CHECK( map[ 100 ].Get< int >() == 6 );
663 int UtcDaliPropertyMapOstream01(void)
667 map.Insert("duration", 5.0f);
668 map.Insert( 10, "DALi" );
669 map.Insert("delay", 1.0f);
670 map.Insert( 100, 9 );
671 map.Insert("value", 100);
673 std::ostringstream oss;
676 tet_printf("Testing ouput of map: %s\n", oss.str().c_str());
678 // string-value pairs first, then index-value pairs
679 DALI_TEST_EQUALS( oss.str().compare("Map(5) = {duration:5, delay:1, value:100, 10:DALi, 100:9}"), 0, TEST_LOCATION );
685 int UtcDaliPropertyMapOstream02(void)
687 Property::Map map, map2;
689 map2.Insert("duration", 5.0f);
690 map2.Insert("delay", 1.0f);
691 map2.Insert( 10, "DALi" );
692 map.Insert("timePeriod", map2);
693 map.Insert( 100, 9 );
694 map.Insert("value", 100);
696 std::ostringstream oss;
699 tet_printf("Testing ouput of map: %s\n", oss.str().c_str());
701 // string-value pairs first, then index-value pairs
702 DALI_TEST_EQUALS( oss.str().compare("Map(3) = {timePeriod:Map(3) = {duration:5, delay:1, 10:DALi}, value:100, 100:9}"), 0, TEST_LOCATION );
707 int UtcDaliPropertyKeyConstructorP(void)
709 Property::Key key1( "aKey" );
710 DALI_TEST_EQUALS( key1.type, Property::Key::STRING, TEST_LOCATION );
711 DALI_TEST_EQUALS( key1.stringKey, "aKey", TEST_LOCATION );
712 DALI_TEST_EQUALS( key1.indexKey, Property::INVALID_INDEX, TEST_LOCATION );
714 Property::Key key2( Actor::Property::COLOR );
715 DALI_TEST_EQUALS( key2.type, Property::Key::INDEX, TEST_LOCATION );
716 DALI_TEST_EQUALS( key2.indexKey, (Dali::Property::Index)Actor::Property::COLOR, TEST_LOCATION );
720 int UtcDaliPropertyKeyEqualityOperatorP(void)
722 Property::Key key1( "aKey" );
723 Property::Key key2( 113 );
725 DALI_TEST_CHECK( key1 == "aKey" );
726 DALI_TEST_CHECK( ! (key1 == "notTheKey") );
727 DALI_TEST_CHECK( ! (key1 == 1) );
729 DALI_TEST_CHECK( key2 == 113 );
730 DALI_TEST_CHECK( ! (key2 == 0) );
731 DALI_TEST_CHECK( ! (key2 == "One hundred and thirteen" ) );
733 DALI_TEST_CHECK( ! (key1 == key2) );
734 DALI_TEST_CHECK( key1 != key2 );
736 Property::Key key1B( "aKey" );
737 Property::Key key2B( 113 );
739 DALI_TEST_CHECK( key1 == key1B );
740 DALI_TEST_CHECK( key2 == key2B );
745 int UtcDaliPropertyKeyInequalityOperatorP(void)
747 Property::Key key1( "aKey" );
748 Property::Key key2( 113 );
750 DALI_TEST_CHECK( key1 != "notTheKey" );
751 DALI_TEST_CHECK( key1 != 1 );
753 DALI_TEST_CHECK( key2 != 0 );
754 DALI_TEST_CHECK( key2 != "One hundred and thirteen" );
756 DALI_TEST_CHECK( key1 != key2 );
762 int UtcDaliPropertyKeyOutputStream(void)
764 Property::Key key1( "aKey" );
765 Property::Key key2( 113 );
767 std::ostringstream oss;
769 DALI_TEST_EQUALS( oss.str(), "aKey", TEST_LOCATION );
771 std::ostringstream oss2;
773 DALI_TEST_EQUALS( oss2.str(), "113", TEST_LOCATION );
778 int UtcDaliPropertyMapInitializerListConstructor(void)
780 auto map = Property::Map{
781 {"number mapped to string", 1},
782 {10, "string mapped to number"},
783 {"string mapped", "to string"},
787 DALI_TEST_CHECK( !map.Empty() ); // Should not be empty
788 DALI_TEST_EQUALS( 4, map.Count(), TEST_LOCATION ); // Should have four items
790 DALI_TEST_EQUALS( 1, map[ "number mapped to string" ].Get< int >(), TEST_LOCATION );
791 DALI_TEST_EQUALS( "string mapped to number", map[ 10 ].Get< std::string >(), TEST_LOCATION );
792 DALI_TEST_EQUALS( "to string", map[ "string mapped" ].Get< std::string >(), TEST_LOCATION );
793 DALI_TEST_EQUALS( 3, map[ 100 ].Get< int >(), TEST_LOCATION );
798 int UtcDaliPropertyMapNestedInitializerListConstructor(void)
800 auto map = Property::Map
807 DALI_TEST_CHECK( !map.Empty() );
808 DALI_TEST_EQUALS( 3, map.Count(), TEST_LOCATION );
812 DALI_TEST_EQUALS( 1, map[ 1 ].Get< int >(), TEST_LOCATION );
817 auto& value1 = map[ 2 ];
818 DALI_TEST_EQUALS( Property::MAP, value1.GetType(), TEST_LOCATION );
820 auto& map2 = *(value1.GetMap());
821 DALI_TEST_EQUALS( 1, map2.Count(), TEST_LOCATION );
824 DALI_TEST_EQUALS( 2, map2[ 2 ].Get< int >(), TEST_LOCATION );
827 // Check the third item
829 auto& value1 = map[ 3 ];
830 DALI_TEST_EQUALS( Property::MAP, value1.GetType(), TEST_LOCATION );
832 auto& map2 = *(value1.GetMap());
833 DALI_TEST_EQUALS( 1, map2.Count(), TEST_LOCATION );
835 auto& value2 = map2[ 3 ];
836 DALI_TEST_EQUALS( Property::MAP, value2.GetType(), TEST_LOCATION );
838 auto& map3 = *(value2.GetMap());
839 DALI_TEST_EQUALS( 1, map3.Count(), TEST_LOCATION );
842 DALI_TEST_EQUALS( 3, map3[ 3 ].Get< int >(), TEST_LOCATION );