2 * Copyright (c) 2014 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 UtcDaliPropertyMapConstOperator(void)
89 DALI_TEST_CHECK( map.Count() == 3 );
91 const Property::Map& constMap( map );
92 DALI_TEST_CHECK( constMap[ "world" ].Get<int>() == 2 );
93 DALI_TEST_CHECK( constMap.Count() == 3 ); // Ensure count hasn't gone up
95 DALI_TEST_EQUALS( "DALi", map[ 10 ].Get<std::string>(), TEST_LOCATION );
96 DALI_TEST_CHECK( constMap.Count() == 3 ); // Ensure count hasn't gone up
101 constMap[ "invalidKey" ];
102 tet_result( TET_FAIL );
104 catch ( DaliException& e )
106 DALI_TEST_ASSERT( e, "! \"Invalid Key\"", TEST_LOCATION );
112 // deprecated API, only retrieve the value from string-value pairs
113 int UtcDaliPropertyMapGetValue(void)
119 Property::Value& value = map.GetValue( 0 );
120 DALI_TEST_CHECK( value.Get<int>() == 1 );
121 value = 10; // Allows the actual changing of the value as we have a ref
122 DALI_TEST_CHECK( map[ "hello" ].Get<int>() == 10 );
128 tet_result( TET_FAIL );
130 catch ( DaliException& e )
132 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
138 // deprecated API, only retrieve the key from the string-value pairs
139 int UtcDaliPropertyMapGetKey(void)
145 DALI_TEST_CHECK( map.GetKey( 0 ) == "hello" );
146 DALI_TEST_CHECK( map.GetKey( 1 ) == "world" );
152 tet_result( TET_FAIL );
154 catch ( DaliException& e )
156 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
162 // deprecated API, only retrieve the string-value pairs
163 int UtcDaliPropertyMapGetPair(void)
169 DALI_TEST_CHECK( map.GetPair( 0 ).first == "hello" );
170 DALI_TEST_CHECK( map.GetPair( 0 ).second.Get< int >() == 1 );
171 DALI_TEST_CHECK( map.GetPair( 1 ).first == "world" );
172 DALI_TEST_CHECK( map.GetPair( 1 ).second.Get< int >() == 2 );
178 tet_result( TET_FAIL );
180 catch ( DaliException& e )
182 DALI_TEST_ASSERT( e, "position", TEST_LOCATION );
188 int UtcDaliPropertyMapFind(void)
196 Property::Value* value = NULL;
198 value = map.Find( "hello" );
199 DALI_TEST_CHECK( value );
200 DALI_TEST_CHECK( value->Get<int>() == 1 );
202 const std::string world("world");
203 value = map.Find( world );
204 DALI_TEST_CHECK( value );
205 DALI_TEST_CHECK( value->Get<int>() == 2 );
207 value = map.Find( 100 );
208 DALI_TEST_CHECK( value );
209 DALI_TEST_CHECK( value->Get<int>() == 9 );
211 value = map.Find( 10, Property::STRING );
212 DALI_TEST_CHECK( value );
213 DALI_TEST_EQUALS( "DALi", value->Get<std::string>(), TEST_LOCATION );
215 value = map.Find( 10, Property::INTEGER );
216 DALI_TEST_CHECK( value == NULL );
218 value = map.Find( "invalidKey" );
219 DALI_TEST_CHECK( !value );
224 int UtcDaliPropertyMapFindIndexThenString(void)
226 // Define the valid keys and values to test with.
227 std::string stringKeyValid = "bar";
228 std::string stringKeyInvalid = "aardvark";
229 int indexKeyValid = 100;
230 int indexKeyInvalid = 101;
232 // Define invalid key and value to test with.
233 std::string stringValueValid = "DALi";
234 int indexValueValid = 3;
236 // Set up a property map containing the valid keys and values defined above.
239 map[ 10 ] = "string";
240 map[ stringKeyValid ] = stringValueValid;
241 map[ indexKeyValid ] = indexValueValid;
243 Property::Value* value = NULL;
245 // TEST: If both index and string are valid, the Property::Value of the index is returned.
246 value = map.Find( indexKeyValid, stringKeyValid );
248 DALI_TEST_EQUALS( value->Get<int>(), indexValueValid, TEST_LOCATION );
251 // TEST: If only the index is valid, the Property::Value of the index is returned.
252 value = map.Find( indexKeyValid, stringKeyInvalid );
254 DALI_TEST_EQUALS( value->Get<int>(), indexValueValid, TEST_LOCATION );
257 // TEST: If only the string is valid, the Property::Value of the string is returned.
258 value = map.Find( indexKeyInvalid, stringKeyValid );
260 DALI_TEST_EQUALS( value->Get<std::string>(), stringValueValid, TEST_LOCATION );
263 // TEST: If neither the index or string are valid, then a NULL pointer is returned.
264 value = map.Find( indexKeyInvalid, stringKeyInvalid );
266 DALI_TEST_CHECK( value == NULL );
271 int UtcDaliPropertyMapOperatorIndex(void)
279 const Property::Map map2 = map;
280 const Property::Value& value10 = map2[10];
281 DALI_TEST_EQUALS( value10.Get<std::string>(), "DALi", TEST_LOCATION );
283 const Property::Value& value100 = map2[100];
284 DALI_TEST_EQUALS( value100.Get<int>(), 9, TEST_LOCATION );
286 const Property::Value& valueHello = map2["hello"];
287 DALI_TEST_EQUALS( valueHello.Get<int>(), 1, TEST_LOCATION );
292 int UtcDaliPropertyMapInsertP(void)
295 DALI_TEST_EQUALS( 0u, map.Count(), TEST_LOCATION );
296 map.Insert( "foo", "bar");
297 DALI_TEST_EQUALS( 1u, map.Count(), TEST_LOCATION );
298 Property::Value* value = map.Find( "foo" );
299 DALI_TEST_CHECK( value );
300 DALI_TEST_EQUALS( "bar", value->Get<std::string>(), TEST_LOCATION );
302 map.Insert( std::string("foo2"), "testing" );
303 DALI_TEST_EQUALS( 2u, map.Count(), TEST_LOCATION );
304 value = map.Find( "foo2" );
305 DALI_TEST_CHECK( value );
306 DALI_TEST_EQUALS( "testing", value->Get<std::string>(), TEST_LOCATION );
308 map.Insert( 10, "DALi" );
309 DALI_TEST_EQUALS( 3u, map.Count(), TEST_LOCATION );
310 value = map.Find( 10 );
311 DALI_TEST_CHECK( value );
312 DALI_TEST_EQUALS( "DALi", value->Get<std::string>(), TEST_LOCATION );
314 map.Insert( 100, 9 );
315 DALI_TEST_EQUALS( 4u, map.Count(), TEST_LOCATION );
316 value = map.Find( 100 );
317 DALI_TEST_CHECK( value );
318 DALI_TEST_CHECK( value->Get<int>() == 9 );
323 int UtcDaliPropertyMapMerge(void)
330 DALI_TEST_CHECK( map.Count() == 3 );
332 // Create another map with the same keys but different values
336 map[ 10 ] = "3DEngine";
338 // Merge map2 into map1, count should still be 2, map values should be from map2
340 DALI_TEST_CHECK( map.Count() == 3 );
341 DALI_TEST_CHECK( map[ "hello" ].Get< int >() == 3 );
342 DALI_TEST_CHECK( map[ "world"].Get< int >() == 4 );
343 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
345 // Create another map with different keys
350 // Merge map3 into map1, count should increase, existing values should match previous and new values should match map3
352 DALI_TEST_CHECK( map.Count() == 5 );
353 DALI_TEST_CHECK( map[ "hello" ].Get< int >() == 3 );
354 DALI_TEST_CHECK( map[ "world"].Get< int >() == 4 );
355 DALI_TEST_CHECK( map[ "foo"].Get< int >() == 5 );
356 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
357 DALI_TEST_CHECK( map[ 100].Get< int >() == 6 );
359 // Create an empty map and attempt to merge, should be successful, nothing should change
361 DALI_TEST_CHECK( map4.Empty() );
363 DALI_TEST_CHECK( map4.Empty() );
364 DALI_TEST_CHECK( map.Count() == 5 );
365 DALI_TEST_CHECK( map[ "hello" ].Get< int >() == 3 );
366 DALI_TEST_CHECK( map[ "world"].Get< int >() == 4 );
367 DALI_TEST_CHECK( map[ "foo"].Get< int >() == 5 );
368 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
369 DALI_TEST_CHECK( map[ 100 ].Get< int >() == 6 );
371 // Merge map into map4, map4 should be the same as map now.
373 DALI_TEST_CHECK( map4.Count() == 5 );
374 DALI_TEST_CHECK( map4[ "hello" ].Get< int >() == 3 );
375 DALI_TEST_CHECK( map4[ "world"].Get< int >() == 4 );
376 DALI_TEST_CHECK( map4[ "foo"].Get< int >() == 5 );
377 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
378 DALI_TEST_CHECK( map4[ 100 ].Get< int >() == 6 );
380 // Attempt to merge into itself, should be successful, nothing should change
382 DALI_TEST_CHECK( map.Count() == 5 );
383 DALI_TEST_CHECK( map[ "hello" ].Get< int >() == 3 );
384 DALI_TEST_CHECK( map[ "world"].Get< int >() == 4 );
385 DALI_TEST_CHECK( map[ "foo"].Get< int >() == 5 );
386 DALI_TEST_EQUALS( "3DEngine", map[ 10 ].Get<std::string>(), TEST_LOCATION );
387 DALI_TEST_CHECK( map[ 100 ].Get< int >() == 6 );
392 int UtcDaliPropertyMapOstream01(void)
396 map.Insert("duration", 5.0f);
397 map.Insert( 10, "DALi" );
398 map.Insert("delay", 1.0f);
399 map.Insert( 100, 9 );
400 map.Insert("value", 100);
402 std::ostringstream oss;
405 tet_printf("Testing ouput of map: %s\n", oss.str().c_str());
407 // string-value pairs first, then index-value pairs
408 DALI_TEST_EQUALS( oss.str().compare("Map(5) = {duration:5, delay:1, value:100, 10:DALi, 100:9}"), 0, TEST_LOCATION );
414 int UtcDaliPropertyMapOstream02(void)
416 Property::Map map, map2;
418 map2.Insert("duration", 5.0f);
419 map2.Insert("delay", 1.0f);
420 map2.Insert( 10, "DALi" );
421 map.Insert("timePeriod", map2);
422 map.Insert( 100, 9 );
423 map.Insert("value", 100);
425 std::ostringstream oss;
428 tet_printf("Testing ouput of map: %s\n", oss.str().c_str());
430 // string-value pairs first, then index-value pairs
431 DALI_TEST_EQUALS( oss.str().compare("Map(3) = {timePeriod:Map(3) = {duration:5, delay:1, 10:DALi}, value:100, 100:9}"), 0, TEST_LOCATION );