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.
18 #include <dali-test-suite-utils.h>
19 #include <dali/public-api/dali-core.h>
25 #include <dali/public-api/object/any.h>
37 MyStruct(float fValue, int iValue)
38 : mFloatValue(fValue),
43 MyStruct(const MyStruct& myStruct)
44 : mFloatValue(myStruct.mFloatValue),
45 mIntValue(myStruct.mIntValue)
49 MyStruct& operator=(const MyStruct& myStruct)
51 mFloatValue = myStruct.mFloatValue;
52 mIntValue = myStruct.mIntValue;
64 void utc_dali_any_startup(void)
66 test_return_value = TET_UNDEF;
69 void utc_dali_any_cleanup(void)
71 test_return_value = TET_PASS;
74 int UtcDaliAnyConstructors(void)
76 TestApplication application;
78 tet_infoline("Test Any constructors.");
80 // Test default constructor.
83 DALI_TEST_CHECK(typeid(void) == value.GetType());
85 // Test constructor Any( const Type& )
88 // Test constructor Any( const Any& )
91 // Test constructor Any( const Any& ) with a non initialized Any
94 DALI_TEST_CHECK(typeid(unsigned int) == value1.GetType());
95 DALI_TEST_CHECK(typeid(unsigned int) == value2.GetType());
96 DALI_TEST_CHECK(typeid(void) == value3.GetType());
98 unsigned int uiValue1 = 0u;
99 unsigned int uiValue2 = 0u;
100 value1.Get(uiValue1);
101 value2.Get(uiValue2);
103 DALI_TEST_EQUALS(uiValue1, uiValue2, TEST_LOCATION);
107 int UtcDaliAnyAssignmentOperators(void)
109 TestApplication application;
111 tet_infoline("Test assignment operators.");
117 value1 = 4.f; // Test operator=( const Type& ) when current object is not initialized.
121 DALI_TEST_EQUALS(fValue, 4.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
123 value1 = 9.f; // Test operator=( const Type& ).
127 DALI_TEST_EQUALS(fValue, 9.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
131 value1 = value3; // Test operator=( const Any& ).
135 DALI_TEST_EQUALS(fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
139 value4 = value3; // Test operator=( const Any& ) when current object is not initialized.
143 DALI_TEST_EQUALS(fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
145 // Test assign a value to value3 doesn't modify value1.
150 DALI_TEST_EQUALS(fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
154 DALI_TEST_EQUALS(fValue, 3.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
156 // Test the branch when copying the same object.
163 DALI_TEST_EQUALS(fValue, 3.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
165 // test assignment for non-empty Any = empty Any
168 DALI_TEST_CHECK(value6.Empty());
173 int UtcDaliAnyNegativeAssignmentOperators(void)
175 TestApplication application;
177 tet_infoline("Test assignment operators.");
186 value1 = value2; // Test operator=( const Any& );
188 catch(Dali::DaliException& e)
190 DALI_TEST_PRINT_ASSERT(e);
196 tet_result(TET_PASS);
200 tet_result(TET_FAIL);
205 int UtcDaliAnyGetType(void)
207 TestApplication application;
209 tet_infoline("Test GetType().");
213 DALI_TEST_CHECK(typeid(void) == value.GetType());
217 DALI_TEST_CHECK(typeid(float) == value.GetType());
221 int UtcDaliAnyGet(void)
223 TestApplication application;
225 tet_infoline("Test Get().");
229 float fValue = value1.Get<float>();
231 DALI_TEST_EQUALS(fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
235 DALI_TEST_EQUALS(fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
240 MyClass(float fValue, int iValue)
241 : mAny(MyStruct(fValue, iValue))
245 const MyStruct& Get() const
247 return AnyCastReference<MyStruct>(mAny);
250 MyStruct* GetPointer()
252 return AnyCast<MyStruct>(&mAny);
255 const MyStruct* GetPointer() const
257 return AnyCast<MyStruct>(&mAny);
264 MyClass myClass(3.25f, 3);
266 MyStruct myStruct1 = myClass.Get();
267 const MyStruct& myStruct2 = myClass.Get();
268 MyStruct* myStruct3 = myClass.GetPointer();
269 const MyStruct* myStruct4 = myClass.GetPointer();
271 if(myStruct3 == NULL)
273 tet_result(TET_FAIL);
277 if(myStruct4 == NULL)
279 tet_result(TET_FAIL);
283 DALI_TEST_EQUALS(myStruct1.mFloatValue, 3.25f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
284 DALI_TEST_EQUALS(myStruct2.mFloatValue, 3.25f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
285 DALI_TEST_EQUALS(myStruct3->mFloatValue, 3.25f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
286 DALI_TEST_EQUALS(myStruct4->mFloatValue, 3.25f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
287 DALI_TEST_EQUALS(myStruct1.mIntValue, 3, TEST_LOCATION);
288 DALI_TEST_EQUALS(myStruct2.mIntValue, 3, TEST_LOCATION);
289 DALI_TEST_EQUALS(myStruct3->mIntValue, 3, TEST_LOCATION);
290 DALI_TEST_EQUALS(myStruct4->mIntValue, 3, TEST_LOCATION);
292 // Test on empty any object
294 float* f = myAny.GetPointer<float>();
295 DALI_TEST_CHECK(f == NULL);
297 // Test on getting wrong type
301 myAny.GetPointer<int>();
302 tet_result(TET_FAIL);
304 catch(Dali::DaliException& e)
306 DALI_TEST_PRINT_ASSERT(e);
312 int UtcDaliAnyNegativeGet(void)
314 TestApplication application;
315 tet_infoline("Test Get().");
320 bool assert1 = false;
321 bool assert2 = false;
323 unsigned int uiValue = 0u;
327 uiValue = value1.Get<unsigned int>();
330 catch(Dali::DaliException& e)
332 DALI_TEST_PRINT_ASSERT(e);
338 uiValue = value2.Get<unsigned int>();
341 catch(Dali::DaliException& e)
343 DALI_TEST_PRINT_ASSERT(e);
347 if(assert1 && assert2)
349 tet_result(TET_PASS);
353 tet_result(TET_FAIL);
355 uiValue++; // supresss warning from unused variable