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)
45 void tet_infoline(const char* str)
47 fprintf(stderr, "%s\n", str);
50 void tet_printf(const char* format, ...)
53 va_start(arg, format);
54 vfprintf(stderr, format, arg);
59 bool operator==(TimePeriod a, TimePeriod b)
61 return Equals(a.durationSeconds, b.durationSeconds) && Equals(a.delaySeconds, b.delaySeconds);
64 std::ostream& operator<<(std::ostream& ostream, TimePeriod value)
66 return ostream << "( Duration:" << value.durationSeconds << " Delay:" << value.delaySeconds << ")";
69 std::ostream& operator<<(std::ostream& ostream, Radian angle)
71 ostream << angle.radian;
75 std::ostream& operator<<(std::ostream& ostream, Degree angle)
77 ostream << angle.degree;
81 void DALI_TEST_EQUALS(const BaseHandle& baseHandle1, const BaseHandle& baseHandle2, const char* location)
83 DALI_TEST_EQUALS<const BaseHandle&>(baseHandle1, baseHandle2, location);
86 void DALI_TEST_EQUALS(const size_t value1, const uint32_t value2, const char* location)
88 DALI_TEST_EQUALS<uint32_t>((uint32_t)(value1), value2, location);
91 void DALI_TEST_EQUALS(const uint32_t value1, const size_t value2, const char* location)
93 DALI_TEST_EQUALS<uint32_t>(value1, (uint32_t)(value2), location);
96 void DALI_TEST_EQUALS(const Matrix3& matrix1, const Matrix3& matrix2, const char* location)
98 const float* m1 = matrix1.AsFloat();
99 const float* m2 = matrix2.AsFloat();
100 bool equivalent = true;
102 for(int32_t i = 0; i < 9; ++i)
104 if(!(fabsf(m1[i] - m2[i]) < GetRangedEpsilon(m1[i], m2[i])))
112 // Align each float to 1234.67, i.e. 3.6 will be " 3.60"
114 fprintf(stderr, "%s, checking\n"
115 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
116 "%7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f\n"
117 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
119 m1[0],m1[3],m1[6],m2[0],m2[3],m2[6],
120 m1[1],m1[4],m1[7],m2[1],m2[4],m2[7],
121 m1[2],m1[5],m1[8],m2[2],m2[5],m2[8]);
124 tet_result(TET_FAIL);
129 tet_result(TET_PASS);
133 void DALI_TEST_EQUALS(const Matrix3& matrix1, const Matrix3& matrix2, float epsilon, const char* location)
135 const float* m1 = matrix1.AsFloat();
136 const float* m2 = matrix2.AsFloat();
137 bool equivalent = true;
139 for(int32_t i = 0; i < 9; ++i)
141 equivalent &= (fabsf(m1[i] - m2[i]) < epsilon);
146 // Align each float to 1234.67, i.e. 3.6 will be " 3.60"
148 fprintf(stderr, "%s, checking\n"
149 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
150 "%7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f\n"
151 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
153 m1[0],m1[3],m1[6],m2[0],m2[3],m2[6],
154 m1[1],m1[4],m1[7],m2[1],m2[4],m2[7],
155 m1[2],m1[5],m1[8],m2[2],m2[5],m2[8]);
158 tet_result(TET_FAIL);
163 tet_result(TET_PASS);
167 void DALI_TEST_EQUALS(const Matrix& matrix1, const Matrix& matrix2, const char* location)
169 const float* m1 = matrix1.AsFloat();
170 const float* m2 = matrix2.AsFloat();
171 bool identical = true;
174 for(i = 0; i < 16; ++i)
185 // Align each float to 1234.67, i.e. 3.6 will be " 3.60"
187 fprintf(stderr, "%s, checking\n"
188 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
189 "%7.2f %7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f %7.2f\n"
190 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
191 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
193 m1[0],m1[4],m1[8],m1[12],m2[0],m2[4],m2[8],m2[12],
194 m1[1],m1[5],m1[9],m1[13],m2[1],m2[5],m2[9],m2[13],
195 m1[2],m1[6],m1[10],m1[14],m2[2],m2[6],m2[10],m2[14],
196 m1[3],m1[7],m1[11],m1[15],m2[3],m2[7],m2[11],m2[15]);
199 tet_result(TET_FAIL);
204 tet_result(TET_PASS);
208 void DALI_TEST_EQUALS(const Matrix& matrix1, const Matrix& matrix2, float epsilon, const char* location)
210 const float* m1 = matrix1.AsFloat();
211 const float* m2 = matrix2.AsFloat();
212 bool equivalent = true;
214 for(int32_t i = 0; i < 16; ++i)
216 equivalent &= (fabsf(m1[i] - m2[i]) < epsilon);
221 // Align each float to 1234.67, i.e. 3.6 will be " 3.60"
223 fprintf(stderr, "%s, checking\n"
224 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
225 "%7.2f %7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f %7.2f\n"
226 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n"
227 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
229 m1[0],m1[4],m1[8],m1[12],m2[0],m2[4],m2[8],m2[12],
230 m1[1],m1[5],m1[9],m1[13],m2[1],m2[5],m2[9],m2[13],
231 m1[2],m1[6],m1[10],m1[14],m2[2],m2[6],m2[10],m2[14],
232 m1[3],m1[7],m1[11],m1[15],m2[3],m2[7],m2[11],m2[15]);
235 tet_result(TET_FAIL);
240 tet_result(TET_PASS);
245 * Test whether two strings are equal.
246 * @param[in] str1 The first string
247 * @param[in] str2 The second string
248 * @param[in] location The TEST_LOCATION macro should be used here
250 void DALI_TEST_EQUALS(const std::string& str1, const char* str2, const char* location)
252 DALI_TEST_EQUALS(str1.c_str(), str2, location);
255 void DALI_TEST_EQUALS(Property::Value& str1, const char* str2, const char* location)
259 if(str1.GetType() == Property::STRING)
263 result = !string.compare(str2);
268 tet_result(TET_PASS);
272 tet_result(TET_FAIL);
277 void DALI_TEST_EQUALS(const char* str1, const std::string& str2, const char* location)
279 DALI_TEST_EQUALS(str1, str2.c_str(), location);
282 void DALI_TEST_ASSERT(DaliException& e, std::string conditionSubString, const char* location)
284 if(NULL == strstr(e.condition, conditionSubString.c_str()))
286 fprintf(stderr, "Expected substring '%s' : actual exception string '%s' : location %s\n", conditionSubString.c_str(), e.condition, location);
287 tet_result(TET_FAIL);
292 tet_result(TET_PASS);
296 // Functor to test whether an Applied signal is emitted
297 ConstraintAppliedCheck::ConstraintAppliedCheck(bool& signalReceived)
298 : mSignalReceived(signalReceived)
302 void ConstraintAppliedCheck::operator()(Constraint& constraint)
304 mSignalReceived = true;
307 void ConstraintAppliedCheck::Reset()
309 mSignalReceived = false;
312 void ConstraintAppliedCheck::CheckSignalReceived()
316 fprintf(stderr, "Expected Applied signal was not received\n");
317 tet_result(TET_FAIL);
322 tet_result(TET_PASS);
326 void ConstraintAppliedCheck::CheckSignalNotReceived()
330 fprintf(stderr, "Unexpected Applied signal was received\n");
331 tet_result(TET_FAIL);
336 tet_result(TET_PASS);
342 struct ObjectDestructionFunctor
344 // Create a ObjectDestructionFunctor passing in a Dali::RefObject* to be monitored and a bool variable.
345 // Create ObjectRegistry instance and connect to the ObjectDestroyedSignal passing in the above functor for the callback.
346 // Get the ObjectPointer (Actor::GetObjectPtr) of the Actor to be checked for destruction and assign it to the Dali::RefObject*
347 // Check the bool variable which would be true when object destroyed.
348 ObjectDestructionFunctor(Dali::RefObject* objectPtr, bool& refObjectDestroyed)
349 : refObjectPointerToCheck(objectPtr),
350 refObjectDestroyedBoolean(refObjectDestroyed)
352 refObjectDestroyed = false;
355 void operator()(const Dali::RefObject* objectPointer)
357 if(refObjectPointerToCheck == objectPointer)
359 refObjectDestroyedBoolean = true;
363 Dali::RefObject* refObjectPointerToCheck;
364 bool& refObjectDestroyedBoolean;
367 ObjectDestructionTracker::ObjectDestructionTracker(ObjectRegistry objectRegistry)
368 : mObjectRegistry(objectRegistry),
369 mRefObjectDestroyed(false)
373 void ObjectDestructionTracker::Start(Actor actor)
375 ObjectDestructionFunctor destructionFunctor(actor.GetObjectPtr(), mRefObjectDestroyed);
376 mObjectRegistry.ObjectDestroyedSignal().Connect(this, destructionFunctor);
379 bool ObjectDestructionTracker::IsDestroyed()
381 return mRefObjectDestroyed;