License conversion from Flora to Apache 2.0
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-Any.cpp
1 //*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 #include <iostream>
19 #include <stdlib.h>
20
21 #include <dali/dali.h>
22 #include <dali-test-suite-utils.h>
23
24 // Temp include
25 #include <dali/public-api/object/any.h>
26
27 using namespace Dali;
28
29 void utc_dali_any_startup(void)
30 {
31   test_return_value = TET_UNDEF;
32 }
33
34 void utc_dali_any_cleanup(void)
35 {
36   test_return_value = TET_PASS;
37 }
38
39 int UtcDaliAnyConstructors(void)
40 {
41   TestApplication application;
42
43   tet_infoline("Test Any constructors.");
44
45   // Test default constructor.
46   Any value;
47
48   DALI_TEST_CHECK( typeid( void ) == value.GetType() );
49
50   // Test constructor Any( const Type& )
51   Any value1 = 4u;
52
53   // Test constructor Any( const Any& )
54   Any value2 = value1;
55
56   // Test constructor Any( const Any& ) with a non initialized Any
57   Any value3 = value;
58
59   DALI_TEST_CHECK( typeid( unsigned int ) == value1.GetType() );
60   DALI_TEST_CHECK( typeid( unsigned int ) == value2.GetType() );
61   DALI_TEST_CHECK( typeid( void ) == value3.GetType() );
62
63   unsigned int uiValue1 = 0u;
64   unsigned int uiValue2 = 0u;
65   value1.Get( uiValue1 );
66   value2.Get( uiValue2 );
67
68   DALI_TEST_EQUALS( uiValue1, uiValue2, TEST_LOCATION );
69   END_TEST;
70 }
71
72 int UtcDaliAnyAssignmentOperators(void)
73 {
74   TestApplication application;
75
76   tet_infoline("Test assignment operators.");
77
78   float fValue = 0.f;
79
80   Any value1;
81
82   value1 = 4.f; // Test operator=( const Type& ) when current object is not initialized.
83
84   value1.Get( fValue );
85
86   DALI_TEST_EQUALS( fValue, 4.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
87
88   Any value2 = 0.f;
89
90   value2 = 9.f; // Test operator=( const Type& ).
91
92   value2.Get( fValue );
93
94   DALI_TEST_EQUALS( fValue, 9.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
95
96   Any value3 = 5.f;
97
98   value1 = value3; // Test operator=( const Any& ).
99
100   value1.Get( fValue );
101
102   DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
103
104   Any value4;
105
106   value4 = value3; // Test operator=( const Any& ) when current object is not initialized.
107
108   value4.Get( fValue );
109
110   DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
111
112   // Test assign a value to value3 doesn't modify value1.
113   value3 = 3.f;
114
115   value1.Get( fValue );
116
117   DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
118
119   value3.Get( fValue );
120
121   DALI_TEST_EQUALS( fValue, 3.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
122
123   // Test the branch when copying the same object.
124   Any value5 = 3.f;
125   Any& value6( value5 );
126
127   value6 = value5;
128
129   value6.Get( fValue );
130   DALI_TEST_EQUALS( fValue, 3.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
131   END_TEST;
132 }
133
134 int UtcDaliAnyNegativeAssignmentOperators(void)
135 {
136   TestApplication application;
137
138   tet_infoline("Test assignment operators.");
139
140   Any value1 = 4.f;
141   Any value2 = 5u;
142
143   bool assert = false;
144
145   try
146   {
147     value1 = value2; // Test operator=( const Any& );
148   }
149   catch( Dali::DaliException& e )
150   {
151     tet_printf( "Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str() );
152     assert = true;
153   }
154
155   if( assert )
156   {
157     tet_result( TET_PASS );
158   }
159   else
160   {
161     tet_result( TET_FAIL );
162   }
163   END_TEST;
164 }
165
166 int UtcDaliAnyGetType(void)
167 {
168   TestApplication application;
169
170   tet_infoline("Test GetType().");
171
172   Any value;
173
174   DALI_TEST_CHECK( typeid( void ) == value.GetType() );
175
176   value = 5.f;
177
178   DALI_TEST_CHECK( typeid( float ) == value.GetType() );
179   END_TEST;
180 }
181
182 int UtcDaliAnyGet(void)
183 {
184   TestApplication application;
185
186   tet_infoline("Test Get().");
187
188   Any value1( 5.f );
189
190   float fValue = value1.Get<float>();
191
192   DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
193
194   fValue = 0.f;
195   value1.Get( fValue );
196   DALI_TEST_EQUALS( fValue, 5.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
197   END_TEST;
198 }
199
200 int UtcDaliAnyNegativeGet(void)
201 {
202   TestApplication application;
203   tet_infoline("Test Get().");
204
205   Any value1;
206   Any value2( 5.f );
207
208   bool assert1 = false;
209   bool assert2 = false;
210
211   unsigned int uiValue = 0u;
212
213   try
214   {
215     uiValue = value1.Get< unsigned int >();
216   }
217
218   catch( Dali::DaliException& e )
219   {
220     tet_printf( "Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str() );
221     assert1 = true;
222   }
223
224   try
225   {
226     uiValue = value2.Get< unsigned int >();
227   }
228
229   catch( Dali::DaliException& e )
230   {
231     tet_printf( "Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str() );
232     assert2 = true;
233   }
234
235   if( assert1 && assert2 )
236   {
237     tet_result( TET_PASS );
238   }
239   else
240   {
241     tet_result( TET_FAIL );
242   }
243   uiValue++;  // supresss warning from unused variable
244   END_TEST;
245 }