938d585903b669437131fd8ed4349db54b6fddc5
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / dali-test-suite-utils / dali-test-suite-utils.cpp
1 /*
2  * Copyright (c) 2015 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 // CLASS HEADER
19 #include "dali-test-suite-utils.h"
20
21 // EXTERNAL INCLUDES
22 #include <ostream>
23
24 // INTERNAL INCLUDES
25 #include <dali/public-api/dali-core.h>
26
27 using namespace Dali;
28
29 int test_return_value = TET_UNDEF;
30
31 void tet_result(int value)
32 {
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;
38 }
39
40 #define END_TEST \
41   return ((test_return_value>0)?1:0)
42
43
44 void tet_infoline(const char* str)
45 {
46   fprintf(stderr, "%s\n", str);
47 }
48
49 void tet_printf(const char *format, ...)
50 {
51   va_list arg;
52   va_start(arg, format);
53   vfprintf(stderr, format, arg);
54   va_end(arg);
55 }
56
57 bool operator==(TimePeriod a, TimePeriod b)
58 {
59   return Equals(a.durationSeconds, b.durationSeconds) && Equals(a.delaySeconds, b.delaySeconds) ;
60 }
61
62 std::ostream& operator<<( std::ostream& ostream, TimePeriod value )
63 {
64   return ostream << "( Duration:" << value.durationSeconds << " Delay:" << value.delaySeconds << ")";
65 }
66
67 std::ostream& operator<<( std::ostream& ostream, Radian angle )
68 {
69   ostream << angle.radian;
70   return ostream;
71 }
72
73 std::ostream& operator<<( std::ostream& ostream, Degree angle )
74 {
75   ostream << angle.degree;
76   return ostream;
77 }
78
79 void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, const char* location)
80 {
81   const float* m1 = matrix1.AsFloat();
82   const float* m2 = matrix2.AsFloat();
83   bool equivalent = true;
84
85   for (int i=0;i<9;++i)
86   {
87     equivalent &= (m1[i] != m2[i]);
88   }
89
90   if (!equivalent)
91   {
92     fprintf(stderr, "%s, checking\n"
93                "(%f, %f, %f)    (%f, %f, %f)\n"
94                "(%f, %f, %f) == (%f, %f, %f)\n"
95                "(%f, %f, %f)    (%f, %f, %f)\n",
96                location,
97                m1[0],  m1[1], m1[2],   m2[0],  m2[1], m2[2],
98                m1[3],  m1[4], m1[5],   m2[3],  m2[4], m2[5],
99                m1[6],  m1[7], m1[8],   m2[6],  m2[7], m2[8]);
100
101     tet_result(TET_FAIL);
102   }
103   else
104   {
105     tet_result(TET_PASS);
106   }
107 }
108
109 void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, float epsilon, const char* location)
110 {
111   const float* m1 = matrix1.AsFloat();
112   const float* m2 = matrix2.AsFloat();
113   bool equivalent = true;
114
115   for (int i=0;i<9;++i)
116   {
117     equivalent &= (fabsf(m1[i] - m2[i])<epsilon);
118   }
119
120   if (!equivalent)
121   {
122     fprintf(stderr, "%s, checking\n"
123                "(%f, %f, %f)    (%f, %f, %f)\n"
124                "(%f, %f, %f) == (%f, %f, %f)\n"
125                "(%f, %f, %f)    (%f, %f, %f)\n",
126                location,
127                m1[0],  m1[1], m1[2],   m2[0],  m2[1], m2[2],
128                m1[3],  m1[4], m1[5],   m2[3],  m2[4], m2[5],
129                m1[6],  m1[7], m1[8],   m2[6],  m2[7], m2[8]);
130
131     tet_result(TET_FAIL);
132   }
133   else
134   {
135     tet_result(TET_PASS);
136   }
137 }
138
139 void DALI_TEST_EQUALS( const Matrix& matrix1, const Matrix& matrix2, const char* location)
140 {
141   const float* m1 = matrix1.AsFloat();
142   const float* m2 = matrix2.AsFloat();
143   bool identical = true;
144
145   int i;
146   for (i=0;i<16;++i)
147   {
148     if(m1[i] != m2[i])
149     {
150       identical = false;
151       break;
152     }
153   }
154
155   if (!identical)
156   {
157     fprintf(stderr, "%s, checking\n"
158                "(%f, %f, %f, %f)    (%f, %f, %f, %f)\n"
159                "(%f, %f, %f, %f) == (%f, %f, %f, %f)\n"
160                "(%f, %f, %f, %f)    (%f, %f, %f, %f)\n"
161                "(%f, %f, %f, %f)    (%f, %f, %f, %f)\n", location,
162                m1[0],  m1[1],  m1[2],  m1[3],   m2[0],  m2[1],  m2[2],  m2[3],
163                m1[4],  m1[5],  m1[6],  m1[7],   m2[4],  m2[5],  m2[6],  m2[7],
164                m1[8],  m1[9], m1[10], m1[11],   m2[8],  m2[9], m2[10], m2[11],
165               m1[12], m1[13], m1[14], m1[15],  m2[12], m2[13], m2[14], m2[15]);
166
167     tet_result(TET_FAIL);
168   }
169   else
170   {
171     tet_result(TET_PASS);
172   }
173 }
174
175 void DALI_TEST_EQUALS( const Matrix& matrix1, const Matrix& matrix2, float epsilon, const char* location)
176 {
177   const float* m1 = matrix1.AsFloat();
178   const float* m2 = matrix2.AsFloat();
179   bool equivalent = true;
180
181   for (int i=0;i<16;++i)
182   {
183     equivalent &= (fabsf(m1[i] - m2[i])<epsilon);
184   }
185
186   if (!equivalent)
187   {
188     fprintf(stderr, "%s, checking\n"
189                "(%f, %f, %f, %f)    (%f, %f, %f, %f)\n"
190                "(%f, %f, %f, %f) == (%f, %f, %f, %f)\n"
191                "(%f, %f, %f, %f)    (%f, %f, %f, %f)\n"
192                "(%f, %f, %f, %f)    (%f, %f, %f, %f)\n", location,
193                m1[0],  m1[1],  m1[2],  m1[3],   m2[0],  m2[1],  m2[2],  m2[3],
194                m1[4],  m1[5],  m1[6],  m1[7],   m2[4],  m2[5],  m2[6],  m2[7],
195                m1[8],  m1[9], m1[10], m1[11],   m2[8],  m2[9], m2[10], m2[11],
196               m1[12], m1[13], m1[14], m1[15],  m2[12], m2[13], m2[14], m2[15]);
197
198     tet_result(TET_FAIL);
199   }
200   else
201   {
202     tet_result(TET_PASS);
203   }
204 }
205
206
207 /**
208  * Test whether two strings are equal.
209  * @param[in] str1 The first string
210  * @param[in] str2 The second string
211  * @param[in] location The TEST_LOCATION macro should be used here
212  */
213 void DALI_TEST_EQUALS( const std::string &str1, const char* str2, const char* location)
214 {
215   DALI_TEST_EQUALS(str1.c_str(), str2, location);
216 }
217
218 /**
219  * Test whether two strings are equal.
220  * @param[in] str1 The first string
221  * @param[in] str2 The second string
222  * @param[in] location The TEST_LOCATION macro should be used here
223  */
224 void DALI_TEST_EQUALS( const char* str1, const std::string &str2, const char* location)
225 {
226   DALI_TEST_EQUALS(str1, str2.c_str(), location);
227 }
228
229 void DALI_TEST_ASSERT( DaliException& e, std::string conditionSubString, const char* location )
230 {
231   if( NULL == strstr( e.condition, conditionSubString.c_str() ) )
232   {
233     fprintf(stderr, "Expected substring '%s' : actual exception string '%s' : location %s\n", conditionSubString.c_str(), e.condition, location );
234     tet_result(TET_FAIL);
235   }
236   else
237   {
238     tet_result(TET_PASS);
239   }
240 }
241
242 // Functor to test whether an Applied signal is emitted
243 ConstraintAppliedCheck::ConstraintAppliedCheck( bool& signalReceived )
244 : mSignalReceived( signalReceived )
245 {
246 }
247
248 void ConstraintAppliedCheck::operator()( Constraint& constraint )
249 {
250   mSignalReceived = true;
251 }
252
253 void ConstraintAppliedCheck::Reset()
254 {
255   mSignalReceived = false;
256 }
257
258 void ConstraintAppliedCheck::CheckSignalReceived()
259 {
260   if ( !mSignalReceived )
261   {
262     fprintf(stderr,  "Expected Applied signal was not received\n" );
263     tet_result( TET_FAIL );
264   }
265   else
266   {
267     tet_result( TET_PASS );
268   }
269 }
270
271 void ConstraintAppliedCheck::CheckSignalNotReceived()
272 {
273   if ( mSignalReceived )
274   {
275     fprintf(stderr,  "Unexpected Applied signal was received\n" );
276     tet_result( TET_FAIL );
277   }
278   else
279   {
280     tet_result( TET_PASS );
281   }
282 }
283
284 BufferImage CreateBufferImage()
285 {
286   BufferImage image = BufferImage::New(4,4,Pixel::RGBA8888);
287
288   PixelBuffer* pixbuf = image.GetBuffer();
289
290   // Using a 4x4 image gives a better blend with the GL implementation
291   // than a 3x3 image
292   for(size_t i=0; i<16; i++)
293   {
294     pixbuf[i*4+0] = 0xFF;
295     pixbuf[i*4+1] = 0xFF;
296     pixbuf[i*4+2] = 0xFF;
297     pixbuf[i*4+3] = 0xFF;
298   }
299
300   return image;
301 }