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>
25 #include <dali/public-api/object/any.h>
36 MyStruct( float fValue, int iValue )
37 : mFloatValue( fValue ),
41 MyStruct( const MyStruct& myStruct )
42 : mFloatValue( myStruct.mFloatValue ),
43 mIntValue( myStruct.mIntValue )
46 MyStruct& operator=( const MyStruct& myStruct )
48 mFloatValue = myStruct.mFloatValue;
49 mIntValue = myStruct.mIntValue;
61 void utc_dali_any_startup(void)
63 test_return_value = TET_UNDEF;
66 void utc_dali_any_cleanup(void)
68 test_return_value = TET_PASS;
71 int UtcDaliAnyConstructors(void)
73 TestApplication application;
75 tet_infoline("Test Any constructors.");
77 // Test default constructor.
80 DALI_TEST_CHECK( typeid( void ) == value.GetType() );
82 // Test constructor Any( const Type& )
85 // Test constructor Any( const Any& )
88 // Test constructor Any( const Any& ) with a non initialized Any
91 DALI_TEST_CHECK( typeid( unsigned int ) == value1.GetType() );
92 DALI_TEST_CHECK( typeid( unsigned int ) == value2.GetType() );
93 DALI_TEST_CHECK( typeid( void ) == value3.GetType() );
95 unsigned int uiValue1 = 0u;
96 unsigned int uiValue2 = 0u;
97 value1.Get( uiValue1 );
98 value2.Get( uiValue2 );
100 DALI_TEST_EQUALS( uiValue1, uiValue2, TEST_LOCATION );
104 int UtcDaliAnyAssignmentOperators(void)
106 TestApplication application;
108 tet_infoline("Test assignment operators.");
114 value1 = 4.f; // Test operator=( const Type& ) when current object is not initialized.
116 value1.Get( fValue );
118 DALI_TEST_EQUALS( fValue, 4.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
120 value1 = 9.f; // Test operator=( const Type& ).
122 value1.Get( fValue );
124 DALI_TEST_EQUALS( fValue, 9.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
128 value1 = value3; // Test operator=( const Any& ).
130 value1.Get( fValue );
132 DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
136 value4 = value3; // Test operator=( const Any& ) when current object is not initialized.
138 value4.Get( fValue );
140 DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
142 // Test assign a value to value3 doesn't modify value1.
145 value1.Get( fValue );
147 DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
149 value3.Get( fValue );
151 DALI_TEST_EQUALS( fValue, 3.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
153 // Test the branch when copying the same object.
155 Any& value6( value5 );
159 value6.Get( fValue );
160 DALI_TEST_EQUALS( fValue, 3.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
162 // test assignment for non-empty Any = empty Any
165 DALI_TEST_CHECK( value6.Empty() );
171 int UtcDaliAnyNegativeAssignmentOperators(void)
173 TestApplication application;
175 tet_infoline("Test assignment operators.");
184 value1 = value2; // Test operator=( const Any& );
186 catch( Dali::DaliException& e )
188 DALI_TEST_PRINT_ASSERT( e );
194 tet_result( TET_PASS );
198 tet_result( TET_FAIL );
203 int UtcDaliAnyGetType(void)
205 TestApplication application;
207 tet_infoline("Test GetType().");
211 DALI_TEST_CHECK( typeid( void ) == value.GetType() );
215 DALI_TEST_CHECK( typeid( float ) == value.GetType() );
219 int UtcDaliAnyGet(void)
221 TestApplication application;
223 tet_infoline("Test Get().");
227 float fValue = value1.Get<float>();
229 DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
232 value1.Get( fValue );
233 DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
238 MyClass( float fValue, int iValue )
239 : mAny( MyStruct( fValue, iValue ) )
243 const MyStruct& Get() const
245 return AnyCastReference<MyStruct>( mAny );
248 MyStruct* GetPointer()
250 return AnyCast<MyStruct>( &mAny );
253 const MyStruct* GetPointer() const
255 return AnyCast<MyStruct>( &mAny );
262 MyClass myClass( 3.25f, 3 );
264 MyStruct myStruct1 = myClass.Get();
265 const MyStruct& myStruct2 = myClass.Get();
266 MyStruct* myStruct3 = myClass.GetPointer();
267 const MyStruct* myStruct4 = myClass.GetPointer();
269 if( myStruct3 == NULL )
271 tet_result( TET_FAIL );
275 if( myStruct4 == NULL )
277 tet_result( TET_FAIL );
281 DALI_TEST_EQUALS( myStruct1.mFloatValue, 3.25f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
282 DALI_TEST_EQUALS( myStruct2.mFloatValue, 3.25f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
283 DALI_TEST_EQUALS( myStruct3->mFloatValue, 3.25f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
284 DALI_TEST_EQUALS( myStruct4->mFloatValue, 3.25f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
285 DALI_TEST_EQUALS( myStruct1.mIntValue, 3, TEST_LOCATION );
286 DALI_TEST_EQUALS( myStruct2.mIntValue, 3, TEST_LOCATION );
287 DALI_TEST_EQUALS( myStruct3->mIntValue, 3, TEST_LOCATION );
288 DALI_TEST_EQUALS( myStruct4->mIntValue, 3, TEST_LOCATION );
290 // Test on empty any object
292 float* f = myAny.GetPointer<float>();
293 DALI_TEST_CHECK( f == NULL );
295 // Test on getting wrong type
299 myAny.GetPointer<int>();
300 tet_result( TET_FAIL );
302 catch( Dali::DaliException& e )
304 DALI_TEST_PRINT_ASSERT( e );
310 int UtcDaliAnyNegativeGet(void)
312 TestApplication application;
313 tet_infoline("Test Get().");
318 bool assert1 = false;
319 bool assert2 = false;
321 unsigned int uiValue = 0u;
325 uiValue = value1.Get< unsigned int >();
328 catch( Dali::DaliException& e )
330 DALI_TEST_PRINT_ASSERT( e );
336 uiValue = value2.Get< unsigned int >();
339 catch( Dali::DaliException& e )
341 DALI_TEST_PRINT_ASSERT( e );
345 if( assert1 && assert2 )
347 tet_result( TET_PASS );
351 tet_result( TET_FAIL );
353 uiValue++; // supresss warning from unused variable