Merge "Do not reposition the text's popup when buttons are pressed." into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ControlRenderer.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 #include <iostream>
18 #include <stdlib.h>
19 #include <dali-toolkit-test-suite-utils.h>
20 #include <dali/devel-api/rendering/renderer.h>
21 #include <dali/devel-api/rendering/material.h>
22 #include <dali/devel-api/rendering/shader.h>
23 #include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
24
25 using namespace Dali;
26 using namespace Dali::Toolkit;
27
28 namespace
29 {
30 const char* TEST_IMAGE_FILE_NAME =  "gallery_image_01.jpg";
31 const char* TEST_NPATCH_FILE_NAME =  "gallery_image_01.9.jpg";
32 }
33
34 void dali_control_renderer_startup(void)
35 {
36   test_return_value = TET_UNDEF;
37 }
38
39 void dali_control_renderer_cleanup(void)
40 {
41   test_return_value = TET_PASS;
42 }
43
44 int UtcDaliControlRendererCopyAndAssignment(void)
45 {
46   ToolkitTestApplication application;
47   tet_infoline( "UtcDaliControlRendererCopyAndAssignment" );
48
49   RendererFactory factory = RendererFactory::Get();
50   Property::Map propertyMap;
51   propertyMap.Insert("renderer-type", "color-renderer");
52   propertyMap.Insert("blend-color", Color::BLUE);
53   ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
54
55   ControlRenderer controlRendererCopy( controlRenderer );
56   DALI_TEST_CHECK(controlRenderer == controlRendererCopy);
57
58   ControlRenderer emptyControlRenderer;
59   ControlRenderer emptyControlRendererCopy( emptyControlRenderer );
60   DALI_TEST_CHECK(emptyControlRenderer == emptyControlRendererCopy);
61
62   ControlRenderer controlRendererEquals;
63   controlRendererEquals = controlRenderer;
64   DALI_TEST_CHECK(controlRenderer == controlRendererEquals);
65
66   ControlRenderer emptyControlRendererEquals;
67   emptyControlRendererEquals = emptyControlRenderer;
68   DALI_TEST_CHECK( emptyControlRenderer == emptyControlRendererEquals );
69
70   //self assignment
71   controlRenderer = controlRenderer;
72   DALI_TEST_CHECK( controlRenderer = controlRendererCopy );
73
74   END_TEST;
75 }
76
77 int UtcDaliControlRendererSetDepthIndex(void)
78 {
79   ToolkitTestApplication application;
80   tet_infoline( "UtcDaliControlRendererSetDepthIndex" );
81
82   RendererFactory factory = RendererFactory::Get();
83   Property::Map propertyMap;
84   propertyMap.Insert("renderer-type", "color-renderer");
85   propertyMap.Insert("blend-color", Color::BLUE);
86   ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
87
88   controlRenderer.SetDepthIndex( 1.f );
89
90   Actor actor = Actor::New();
91   actor.SetSize(200.f, 200.f);
92   Stage::GetCurrent().Add( actor );
93   controlRenderer.SetOnStage( actor );
94
95   DALI_TEST_EQUALS( actor.GetRendererAt(0u).GetDepthIndex(), 1.f, TEST_LOCATION );
96
97   controlRenderer.SetDepthIndex( -1.f );
98   DALI_TEST_EQUALS( actor.GetRendererAt(0u).GetDepthIndex(), -1.f, TEST_LOCATION );
99
100   END_TEST;
101 }
102
103 int UtcDaliControlRendererSetOnOffStage(void)
104 {
105   ToolkitTestApplication application;
106   tet_infoline( "UtcDaliControlRendererSetDepthIndex" );
107
108   RendererFactory factory = RendererFactory::Get();
109   Property::Map propertyMap;
110   propertyMap.Insert("renderer-type", "color-renderer");
111   propertyMap.Insert("blend-color", Color::BLUE);
112   ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
113
114   Actor actor = Actor::New();
115   actor.SetSize(200.f, 200.f);
116   Stage::GetCurrent().Add( actor );
117
118   application.SendNotification();
119   application.Render(0);
120   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
121
122   controlRenderer.SetOnStage( actor );
123   application.SendNotification();
124   application.Render(0);
125   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
126
127   controlRenderer.SetOffStage( actor );
128   application.SendNotification();
129   application.Render(0);
130   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
131
132   END_TEST;
133 }
134
135 int UtcDaliControlRendererGetPropertyMap1(void)
136 {
137   ToolkitTestApplication application;
138   tet_infoline( "UtcDaliControlRendererGetPropertyMap1: ColorRenderer" );
139
140   RendererFactory factory = RendererFactory::Get();
141   Property::Map propertyMap;
142   propertyMap.Insert("renderer-type", "color-renderer");
143   propertyMap.Insert("blend-color", Color::BLUE);
144   ControlRenderer colorRenderer = factory.GetControlRenderer( propertyMap );
145
146   Property::Map resultMap;
147   colorRenderer.CreatePropertyMap( resultMap );
148
149   Property::Value* typeValue = resultMap.Find( "renderer-type", Property::STRING );
150   DALI_TEST_CHECK( typeValue );
151   DALI_TEST_CHECK( typeValue->Get<std::string>() == "color-renderer" );
152
153   Property::Value* colorValue = resultMap.Find( "blend-color", Property::VECTOR4 );
154   DALI_TEST_CHECK( colorValue );
155   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
156
157   // change the blend color
158   factory.ResetRenderer( colorRenderer, Color::CYAN );
159   colorRenderer.CreatePropertyMap( resultMap );
160
161   colorValue = resultMap.Find( "blend-color", Property::VECTOR4 );
162   DALI_TEST_CHECK( colorValue );
163   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
164
165   END_TEST;
166 }
167
168 int UtcDaliControlRendererGetPropertyMap2(void)
169 {
170   ToolkitTestApplication application;
171   tet_infoline( "UtcDaliControlRendererGetPropertyMap2: BorderRenderer" );
172
173   RendererFactory factory = RendererFactory::Get();
174   Property::Map propertyMap;
175   propertyMap.Insert("renderer-type", "border-renderer");
176   propertyMap.Insert("border-color", Color::BLUE);
177   propertyMap.Insert("border-size", 5.f);
178   ControlRenderer borderRenderer = factory.GetControlRenderer( propertyMap );
179
180   Property::Map resultMap;
181   borderRenderer.CreatePropertyMap( resultMap );
182
183   // check the property values from the returned map from control renderer
184   Property::Value* typeValue = resultMap.Find( "renderer-type", Property::STRING );
185   DALI_TEST_CHECK( typeValue );
186   DALI_TEST_CHECK( typeValue->Get<std::string>() == "border-renderer" );
187
188   Property::Value* colorValue = resultMap.Find( "border-color", Property::VECTOR4 );
189   DALI_TEST_CHECK( colorValue );
190   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
191
192   Property::Value* sizeValue = resultMap.Find( "border-size", Property::FLOAT );
193   DALI_TEST_CHECK( sizeValue );
194   DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
195
196   borderRenderer = factory.GetControlRenderer( 10.f, Color::CYAN );
197   borderRenderer.CreatePropertyMap( resultMap );
198
199   typeValue = resultMap.Find( "renderer-type", Property::STRING );
200   DALI_TEST_CHECK( typeValue );
201   DALI_TEST_CHECK( typeValue->Get<std::string>() == "border-renderer" );
202
203    colorValue = resultMap.Find( "border-color", Property::VECTOR4 );
204   DALI_TEST_CHECK( colorValue );
205   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
206
207   colorValue = resultMap.Find( "border-size", Property::FLOAT );
208   DALI_TEST_CHECK( colorValue );
209   DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
210
211   END_TEST;
212 }
213
214 int UtcDaliControlRendererGetPropertyMap3(void)
215 {
216   ToolkitTestApplication application;
217   tet_infoline( "UtcDaliControlRendererGetPropertyMap3: linear GradientRenderer" );
218
219   RendererFactory factory = RendererFactory::Get();
220   DALI_TEST_CHECK( factory );
221
222   Property::Map propertyMap;
223   propertyMap.Insert("renderer-type", "gradient-renderer");
224
225   Vector2 start(-1.f, -1.f);
226   Vector2 end(1.f, 1.f);
227   propertyMap.Insert("gradient-start-position", start);
228   propertyMap.Insert("gradient-end-position", end);
229   propertyMap.Insert("gradient-spread-method", "repeat");
230
231   propertyMap.Insert("gradient-stop-offset", Vector2(0.2f, 0.8f));
232
233   Property::Array stopColors;
234   stopColors.PushBack( Color::RED );
235   stopColors.PushBack( Color::GREEN );
236   propertyMap.Insert("gradient-stop-color", stopColors);
237
238   ControlRenderer gradientRenderer = factory.GetControlRenderer(propertyMap);
239
240   Property::Map resultMap;
241   gradientRenderer.CreatePropertyMap( resultMap );
242
243   // check the property values from the returned map from control renderer
244   Property::Value* value = resultMap.Find( "renderer-type", Property::STRING );
245   DALI_TEST_CHECK( value );
246   DALI_TEST_CHECK( value->Get<std::string>() == "gradient-renderer" );
247
248   value = resultMap.Find( "gradient-units", Property::STRING );
249   DALI_TEST_CHECK( value );
250   DALI_TEST_CHECK( value->Get<std::string>() == "object-bounding-box" );
251
252   value = resultMap.Find( "gradient-spread-method", Property::STRING );
253   DALI_TEST_CHECK( value );
254   DALI_TEST_CHECK( value->Get<std::string>() == "repeat" );
255
256   value = resultMap.Find( "gradient-start-position", Property::VECTOR2 );
257   DALI_TEST_CHECK( value );
258   DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
259
260   value = resultMap.Find( "gradient-end-position", Property::VECTOR2 );
261   DALI_TEST_CHECK( value );
262   DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
263
264   value = resultMap.Find( "gradient-stop-offset", Property::ARRAY );
265   DALI_TEST_CHECK( value );
266   Property::Array* offsetArray = value->GetArray();
267   DALI_TEST_CHECK( offsetArray->Count() == 2 );
268   DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
269   DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
270
271   value = resultMap.Find( "gradient-stop-color", Property::ARRAY );
272   DALI_TEST_CHECK( value );
273   Property::Array* colorArray = value->GetArray();
274   DALI_TEST_CHECK( colorArray->Count() == 2 );
275   DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
276   DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
277
278   END_TEST;
279 }
280
281 int UtcDaliControlRendererGetPropertyMap4(void)
282 {
283   ToolkitTestApplication application;
284   tet_infoline( "UtcDaliControlRendererGetPropertyMap4: radial GradientRenderer" );
285
286   RendererFactory factory = RendererFactory::Get();
287   DALI_TEST_CHECK( factory );
288
289   Property::Map propertyMap;
290   propertyMap.Insert("renderer-type", "gradient-renderer");
291
292   Vector2 center(100.f, 100.f);
293   float radius = 100.f;
294   propertyMap.Insert("gradient-units", "user-space");
295   propertyMap.Insert("gradient-center", center);
296   propertyMap.Insert("gradient-radius", radius);
297   propertyMap.Insert("gradient-stop-offset", Vector3(0.1f, 0.3f, 1.1f));
298
299   Property::Array stopColors;
300   stopColors.PushBack( Color::RED );
301   stopColors.PushBack( Color::BLACK );
302   stopColors.PushBack( Color::GREEN );
303   propertyMap.Insert("gradient-stop-color", stopColors);
304
305   ControlRenderer gradientRenderer = factory.GetControlRenderer(propertyMap);
306   DALI_TEST_CHECK( gradientRenderer );
307
308   Property::Map resultMap;
309   gradientRenderer.CreatePropertyMap( resultMap );
310
311   // check the property values from the returned map from control renderer
312   Property::Value* value = resultMap.Find( "renderer-type", Property::STRING );
313   DALI_TEST_CHECK( value );
314   DALI_TEST_CHECK( value->Get<std::string>() == "gradient-renderer" );
315
316   value = resultMap.Find( "gradient-units", Property::STRING );
317   DALI_TEST_CHECK( value );
318   DALI_TEST_CHECK( value->Get<std::string>() == "user-space" );
319
320   value = resultMap.Find( "gradient-spread-method", Property::STRING );
321   DALI_TEST_CHECK( value );
322   DALI_TEST_CHECK( value->Get<std::string>() == "pad" );
323
324   value = resultMap.Find( "gradient-center", Property::VECTOR2 );
325   DALI_TEST_CHECK( value );
326   DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
327
328   value = resultMap.Find( "gradient-radius", Property::FLOAT );
329   DALI_TEST_CHECK( value );
330   DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
331
332   value = resultMap.Find( "gradient-stop-offset", Property::ARRAY );
333   DALI_TEST_CHECK( value );
334   Property::Array* offsetArray = value->GetArray();
335   DALI_TEST_CHECK( offsetArray->Count() == 3 );
336   DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
337   DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
338   // any stop value will be clamped to [0.0, 1.0];
339   DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
340
341   value = resultMap.Find( "gradient-stop-color", Property::ARRAY );
342   DALI_TEST_CHECK( value );
343   Property::Array* colorArray = value->GetArray();
344   DALI_TEST_CHECK( colorArray->Count() == 3 );
345   DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
346   DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
347   DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
348
349   END_TEST;
350 }
351
352 int UtcDaliControlRendererGetPropertyMap5(void)
353 {
354   ToolkitTestApplication application;
355   tet_infoline( "UtcDaliControlRendererGetPropertyMap5: ImageRenderer" );
356
357   RendererFactory factory = RendererFactory::Get();
358   Property::Map propertyMap;
359   propertyMap.Insert( "renderer-type", "image-renderer" );
360   propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
361   propertyMap.Insert( "image-desired-width", 20 );
362   propertyMap.Insert( "image-desired-height", 30 );
363   propertyMap.Insert( "image-fitting-mode", "fit-height" );
364   propertyMap.Insert( "image-sampling-mode", "box-then-nearest" );
365
366   ControlRenderer imageRenderer = factory.GetControlRenderer(propertyMap);
367   DALI_TEST_CHECK( imageRenderer );
368
369   Property::Map resultMap;
370   imageRenderer.CreatePropertyMap( resultMap );
371
372   // check the property values from the returned map from control renderer
373   Property::Value* value = resultMap.Find( "renderer-type", Property::STRING );
374   DALI_TEST_CHECK( value );
375   DALI_TEST_CHECK( value->Get<std::string>() == "image-renderer" );
376
377   value = resultMap.Find( "image-url", Property::STRING );
378   DALI_TEST_CHECK( value );
379   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
380
381   value = resultMap.Find( "image-fitting-mode", Property::STRING );
382   DALI_TEST_CHECK( value );
383   DALI_TEST_CHECK( value->Get<std::string>() == "fit-height" );
384
385   value = resultMap.Find( "image-sampling-mode", Property::STRING );
386   DALI_TEST_CHECK( value );
387   DALI_TEST_CHECK( value->Get<std::string>() == "box-then-nearest" );
388
389   value = resultMap.Find( "image-desired-width", Property::INTEGER );
390   DALI_TEST_CHECK( value );
391   DALI_TEST_CHECK( value->Get<int>() == 20 );
392
393   value = resultMap.Find( "image-desired-height", Property::INTEGER );
394   DALI_TEST_CHECK( value );
395   DALI_TEST_CHECK( value->Get<int>() == 30 );
396
397   // Get an image renderer with an image handle, and test the default property values
398   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
399   imageRenderer = factory.GetControlRenderer(image);
400   imageRenderer.CreatePropertyMap( resultMap );
401
402   value = resultMap.Find( "renderer-type", Property::STRING );
403   DALI_TEST_CHECK( value );
404   DALI_TEST_CHECK( value->Get<std::string>() == "image-renderer" );
405
406   value = resultMap.Find( "image-url", Property::STRING );
407   DALI_TEST_CHECK( value );
408   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
409
410   value = resultMap.Find( "image-fitting-mode", Property::STRING );
411   DALI_TEST_CHECK( value );
412   DALI_TEST_CHECK( value->Get<std::string>() == "shrink-to-fit" );
413
414   value = resultMap.Find( "image-sampling-mode", Property::STRING );
415   DALI_TEST_CHECK( value );
416   DALI_TEST_CHECK( value->Get<std::string>() == "box" );
417
418   value = resultMap.Find( "image-desired-width", Property::INTEGER );
419   DALI_TEST_CHECK( value );
420   DALI_TEST_CHECK( value->Get<int>() == 100 );
421
422   value = resultMap.Find( "image-desired-height", Property::INTEGER );
423   DALI_TEST_CHECK( value );
424   DALI_TEST_CHECK( value->Get<int>() == 200 );
425
426   END_TEST;
427 }
428
429 int UtcDaliControlRendererGetPropertyMap6(void)
430 {
431   ToolkitTestApplication application;
432   tet_infoline( "UtcDaliControlRendererGetPropertyMap6: NPatchRenderer" );
433
434   RendererFactory factory = RendererFactory::Get();
435   Property::Map propertyMap;
436   propertyMap.Insert( "renderer-type", "n-patch-renderer" );
437   propertyMap.Insert( "image-url", TEST_NPATCH_FILE_NAME );
438   propertyMap.Insert( "border-only", true );
439   ControlRenderer nPatchRenderer = factory.GetControlRenderer( propertyMap );
440
441   Property::Map resultMap;
442   nPatchRenderer.CreatePropertyMap( resultMap );
443
444   // check the property values from the returned map from control renderer
445   Property::Value* value = resultMap.Find( "renderer-type", Property::STRING );
446   DALI_TEST_CHECK( value );
447   DALI_TEST_CHECK( value->Get<std::string>() == "n-patch-renderer" );
448
449   value = resultMap.Find( "image-url", Property::STRING );
450   DALI_TEST_CHECK( value );
451   DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
452
453   value = resultMap.Find( "border-only", Property::BOOLEAN );
454   DALI_TEST_CHECK( value );
455   DALI_TEST_CHECK( value->Get<bool>() );
456
457   END_TEST;
458 }