2 * Copyright (c) 2020 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.
19 #include "dali-test-suite-utils.h"
25 #include <dali/public-api/dali-core.h>
29 int32_t test_return_value = TET_UNDEF;
31 void tet_result(int32_t value)
33 // First TET_PASS should set to zero
34 // first TET_FAIL should prevent any further TET_PASS from setting back to zero
35 // Any TET_FAIL should set to fail or leave as fail
36 if( test_return_value != 1 )
37 test_return_value = value;
41 return ((test_return_value>0)?1:0)
44 void tet_infoline(const char* str)
46 fprintf(stderr, "%s\n", str);
49 void tet_printf(const char *format, ...)
52 va_start(arg, format);
53 vfprintf(stderr, format, arg);
57 bool operator==(TimePeriod a, TimePeriod b)
59 return Equals(a.durationSeconds, b.durationSeconds) && Equals(a.delaySeconds, b.delaySeconds) ;
62 std::ostream& operator<<( std::ostream& ostream, TimePeriod value )
64 return ostream << "( Duration:" << value.durationSeconds << " Delay:" << value.delaySeconds << ")";
67 std::ostream& operator<<( std::ostream& ostream, Radian angle )
69 ostream << angle.radian;
73 std::ostream& operator<<( std::ostream& ostream, Degree angle )
75 ostream << angle.degree;
79 void DALI_TEST_EQUALS( const BaseHandle& baseHandle1, const BaseHandle& baseHandle2, const char* location )
81 DALI_TEST_EQUALS< const BaseHandle& >( baseHandle1, baseHandle2, location );
84 void DALI_TEST_EQUALS( const size_t value1, const uint32_t value2, const char* location )
86 DALI_TEST_EQUALS< uint32_t >( ( uint32_t )( value1 ), value2, location );
89 void DALI_TEST_EQUALS( const uint32_t value1, const size_t value2, const char* location )
91 DALI_TEST_EQUALS< uint32_t >( value1, ( uint32_t )( value2 ), location );
94 void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, const char* location)
96 const float* m1 = matrix1.AsFloat();
97 const float* m2 = matrix2.AsFloat();
98 bool equivalent = true;
100 for (int32_t i=0;i<9;++i)
102 if( ! (fabsf(m1[i] - m2[i])< GetRangedEpsilon(m1[i], m2[i])) )
110 // Align each float to 1234.67, i.e. 3.6 will be " 3.60"
111 fprintf( stderr, "%s, checking\n"
112 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
113 "%7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f\n"
114 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
116 m1[0], m1[3], m1[6], m2[0], m2[3], m2[6],
117 m1[1], m1[4], m1[7], m2[1], m2[4], m2[7],
118 m1[2], m1[5], m1[8], m2[2], m2[5], m2[8] );
120 tet_result(TET_FAIL);
125 tet_result(TET_PASS);
129 void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, float epsilon, const char* location)
131 const float* m1 = matrix1.AsFloat();
132 const float* m2 = matrix2.AsFloat();
133 bool equivalent = true;
135 for (int32_t i=0;i<9;++i)
137 equivalent &= (fabsf(m1[i] - m2[i])<epsilon);
142 // Align each float to 1234.67, i.e. 3.6 will be " 3.60"
143 fprintf( stderr, "%s, checking\n"
144 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
145 "%7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f\n"
146 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
148 m1[0], m1[3], m1[6], m2[0], m2[3], m2[6],
149 m1[1], m1[4], m1[7], m2[1], m2[4], m2[7],
150 m1[2], m1[5], m1[8], m2[2], m2[5], m2[8] );
152 tet_result(TET_FAIL);
157 tet_result(TET_PASS);
161 void DALI_TEST_EQUALS( const Matrix& matrix1, const Matrix& matrix2, const char* location)
163 const float* m1 = matrix1.AsFloat();
164 const float* m2 = matrix2.AsFloat();
165 bool identical = true;
179 // Align each float to 1234.67, i.e. 3.6 will be " 3.60"
180 fprintf( stderr, "%s, checking\n"
181 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
182 "%7.2f %7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f %7.2f\n"
183 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
184 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
186 m1[0], m1[4], m1[8], m1[12], m2[0], m2[4], m2[8], m2[12],
187 m1[1], m1[5], m1[9], m1[13], m2[1], m2[5], m2[9], m2[13],
188 m1[2], m1[6], m1[10], m1[14], m2[2], m2[6], m2[10], m2[14],
189 m1[3], m1[7], m1[11], m1[15], m2[3], m2[7], m2[11], m2[15] );
191 tet_result(TET_FAIL);
196 tet_result(TET_PASS);
200 void DALI_TEST_EQUALS( const Matrix& matrix1, const Matrix& matrix2, float epsilon, const char* location)
202 const float* m1 = matrix1.AsFloat();
203 const float* m2 = matrix2.AsFloat();
204 bool equivalent = true;
206 for (int32_t i=0;i<16;++i)
208 equivalent &= (fabsf(m1[i] - m2[i])<epsilon);
213 // Align each float to 1234.67, i.e. 3.6 will be " 3.60"
214 fprintf( stderr, "%s, checking\n"
215 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
216 "%7.2f %7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f %7.2f\n"
217 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
218 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
220 m1[0], m1[4], m1[8], m1[12], m2[0], m2[4], m2[8], m2[12],
221 m1[1], m1[5], m1[9], m1[13], m2[1], m2[5], m2[9], m2[13],
222 m1[2], m1[6], m1[10], m1[14], m2[2], m2[6], m2[10], m2[14],
223 m1[3], m1[7], m1[11], m1[15], m2[3], m2[7], m2[11], m2[15] );
225 tet_result(TET_FAIL);
230 tet_result(TET_PASS);
236 * Test whether two strings are equal.
237 * @param[in] str1 The first string
238 * @param[in] str2 The second string
239 * @param[in] location The TEST_LOCATION macro should be used here
241 void DALI_TEST_EQUALS( const std::string &str1, const char* str2, const char* location)
243 DALI_TEST_EQUALS(str1.c_str(), str2, location);
246 void DALI_TEST_EQUALS( Property::Value& str1, const char* str2, const char* location)
250 if( str1.GetType() == Property::STRING )
254 result = !string.compare(str2);
259 tet_result(TET_PASS);
263 tet_result(TET_FAIL);
268 void DALI_TEST_EQUALS( const char* str1, const std::string &str2, const char* location)
270 DALI_TEST_EQUALS(str1, str2.c_str(), location);
273 void DALI_TEST_ASSERT( DaliException& e, std::string conditionSubString, const char* location )
275 if( NULL == strstr( e.condition, conditionSubString.c_str() ) )
277 fprintf(stderr, "Expected substring '%s' : actual exception string '%s' : location %s\n", conditionSubString.c_str(), e.condition, location );
278 tet_result(TET_FAIL);
283 tet_result(TET_PASS);
287 // Functor to test whether an Applied signal is emitted
288 ConstraintAppliedCheck::ConstraintAppliedCheck( bool& signalReceived )
289 : mSignalReceived( signalReceived )
293 void ConstraintAppliedCheck::operator()( Constraint& constraint )
295 mSignalReceived = true;
298 void ConstraintAppliedCheck::Reset()
300 mSignalReceived = false;
303 void ConstraintAppliedCheck::CheckSignalReceived()
305 if ( !mSignalReceived )
307 fprintf(stderr, "Expected Applied signal was not received\n" );
308 tet_result( TET_FAIL );
313 tet_result( TET_PASS );
317 void ConstraintAppliedCheck::CheckSignalNotReceived()
319 if ( mSignalReceived )
321 fprintf(stderr, "Unexpected Applied signal was received\n" );
322 tet_result( TET_FAIL );
327 tet_result( TET_PASS );
334 struct ObjectDestructionFunctor
336 // Create a ObjectDestructionFunctor passing in a Dali::RefObject* to be monitored and a bool variable.
337 // Create ObjectRegistry instance and connect to the ObjectDestroyedSignal passing in the above functor for the callback.
338 // Get the ObjectPointer (Actor::GetObjectPtr) of the Actor to be checked for destruction and assign it to the Dali::RefObject*
339 // Check the bool variable which would be true when object destroyed.
340 ObjectDestructionFunctor( Dali::RefObject* objectPtr, bool& refObjectDestroyed )
341 : refObjectPointerToCheck( objectPtr ),
342 refObjectDestroyedBoolean( refObjectDestroyed )
344 refObjectDestroyed = false;
347 void operator()( const Dali::RefObject* objectPointer )
349 if ( refObjectPointerToCheck == objectPointer )
351 refObjectDestroyedBoolean = true;
355 Dali::RefObject* refObjectPointerToCheck;
356 bool& refObjectDestroyedBoolean;
359 ObjectDestructionTracker::ObjectDestructionTracker( ObjectRegistry objectRegistry )
360 : mObjectRegistry( objectRegistry ),
361 mRefObjectDestroyed( false)
365 void ObjectDestructionTracker::Start( Actor actor )
367 ObjectDestructionFunctor destructionFunctor( actor.GetObjectPtr(), mRefObjectDestroyed );
368 mObjectRegistry.ObjectDestroyedSignal().Connect( this, destructionFunctor );
371 bool ObjectDestructionTracker::IsDestroyed()
373 return mRefObjectDestroyed;