Add animated vector image visual
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Visuals-internal.cpp
1 /*
2  * Copyright (c) 2018 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
20 #include <stdlib.h>
21
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <toolkit-text-utils.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
27 #include <dali-toolkit/internal/visuals/color/color-visual.h>
28 #include <dali-toolkit/internal/visuals/npatch-loader.h>
29 #include <dummy-visual.h>
30 #include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h>
31
32 using namespace Dali;
33 using namespace Toolkit;
34
35 namespace
36 {
37
38 const char* TEST_VECTOR_IMAGE_FILE_NAME =  TEST_RESOURCE_DIR  "/insta_camera.json";
39
40 }
41
42 int UtcDaliVisualAction(void)
43 {
44   ToolkitTestApplication application;
45   tet_infoline( "Register an ImageVisual and and perform an Action on Visual directly" );
46   Vector2 controlSize( 20.f, 30.f );
47
48   //Created DummyVisual
49   Property::Map settings;
50   Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
51
52   DummyControl dummyControl = DummyControl::New( true );
53   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
54
55   tet_infoline( "Register visual and stage control" );
56
57   Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( dummyVisualPtr.Get() );
58   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
59   dummyControl.SetSize(200.f, 200.f);
60   Stage::GetCurrent().Add( dummyControl );
61
62   application.SendNotification();
63   application.Render();
64
65   tet_infoline( "Check action counter is 0 before DoAction" );
66   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
67
68   tet_infoline( "Perform TEST_ACTION action on Visual. Should increase the action counter" );
69
70   Property::Map attributes;
71   Toolkit::Internal::Visual::Base& internalVisualBase =  GetImplementation( visualBaseHandle );
72   internalVisualBase.DoAction( Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
73   application.SendNotification();
74   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 1, TEST_LOCATION );
75
76   END_TEST;
77 }
78
79 int UtcDaliVisualActionNotImplemented(void)
80 {
81   ToolkitTestApplication application;
82   tet_infoline( "Register an ImageVisual and and perform an Action on a Visual which does not support any Actions" );
83   Vector2 controlSize( 20.f, 30.f );
84
85   //Created DummyVisual
86   Property::Map settings;
87   Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
88
89   DummyControl dummyControl = DummyControl::New( true );
90   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
91
92   tet_infoline( "Register visual and stage control" );
93
94   VisualFactory factory = VisualFactory::Get();
95   Property::Map propertyMap;
96   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
97   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
98   Visual::Base visual = factory.CreateVisual( propertyMap );
99
100   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
101   dummyControl.SetSize(200.f, 200.f);
102   Stage::GetCurrent().Add( dummyControl );
103
104   application.SendNotification();
105   application.Render();
106
107   tet_infoline( "Check action counter is 0 before DoAction" );
108   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
109
110   tet_infoline( "Perform TEST_ACTION action on Color Visual which does not support it.. Should not increment the action counter" );
111   Property::Map attributes;
112   GetImplementation( visual ).DoAction( Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
113   application.SendNotification();
114   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
115
116   END_TEST;
117 }
118
119 int UtcDaliVisualSetProperties(void)
120 {
121   ToolkitTestApplication application;
122   tet_infoline( "Register a visual and SetProperties" );
123
124   Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
125
126   //Created ColorVisual
127   Property::Map propertyMap1;
128   propertyMap1.Insert(Visual::Property::TYPE,  Visual::COLOR);
129   propertyMap1.Insert(ColorVisual::Property::MIX_COLOR,  Color::RED);
130   Toolkit::Internal::ColorVisualPtr colorVisualPtr = Toolkit::Internal::ColorVisual::New( *factoryCache, propertyMap1 );
131
132   DummyControl dummyControl = DummyControl::New( true );
133   Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
134
135   Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( colorVisualPtr.Get() );
136   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
137   dummyControl.SetSize( 200.f, 200.f );
138   Stage::GetCurrent().Add( dummyControl );
139
140   application.SendNotification();
141   application.Render();
142
143   Property::Map propertyMap;
144   propertyMap.Insert( Visual::Property::MIX_COLOR,  Color::BLUE );
145
146   colorVisualPtr->SetProperties( propertyMap );
147   application.SendNotification();
148   application.Render();
149
150   Property::Map resultMap;
151   visualBaseHandle.CreatePropertyMap( resultMap );
152
153   Property::Value* colorValue = resultMap.Find( Visual::Property::MIX_COLOR,  Property::VECTOR4 );
154   DALI_TEST_CHECK( colorValue );
155   DALI_TEST_CHECK( colorValue->Get< Vector4 >() == Color::BLUE );
156
157   delete factoryCache;
158
159   END_TEST;
160 }
161
162 int UtcDaliNPatchBufferGetRedOffsetAndMask(void)
163 {
164   TestApplication application;
165
166   tet_infoline("UtcDaliNPatchBufferGetRedOffsetAndMask");
167
168   int byteOffset = 0;
169   int bitMask = 0;
170
171   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::A8, byteOffset, bitMask );
172   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
173   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::L8, byteOffset, bitMask );
174   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
175   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::LA88, byteOffset, bitMask );
176   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
177
178   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB888, byteOffset, bitMask );
179   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xff );
180   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB8888, byteOffset, bitMask );
181   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xff );
182   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGBA8888, byteOffset, bitMask );
183   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xff );
184
185   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGR8888, byteOffset, bitMask );
186   DALI_TEST_CHECK( byteOffset == 2 && bitMask == 0xff );
187   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGRA8888, byteOffset, bitMask );
188   DALI_TEST_CHECK( byteOffset == 2 && bitMask == 0xff );
189
190   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB565, byteOffset, bitMask );
191   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xf8 );
192
193   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGR565, byteOffset, bitMask );
194   DALI_TEST_CHECK( byteOffset == 1 && bitMask == 0x1f );
195
196   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGBA4444, byteOffset, bitMask );
197   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xf0 );
198
199   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGRA4444, byteOffset, bitMask );
200   DALI_TEST_CHECK( byteOffset == 1 && bitMask == 0xf0 );
201
202   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGBA5551, byteOffset, bitMask );
203   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xf8 );
204
205   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGRA5551, byteOffset, bitMask );
206   DALI_TEST_CHECK( byteOffset == 1 && bitMask == 0x1e );
207
208   // Compressed formats are not supported
209   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::INVALID, byteOffset, bitMask );
210   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
211   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_R11_EAC, byteOffset, bitMask );
212   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
213   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SIGNED_R11_EAC, byteOffset, bitMask );
214   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
215   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RG11_EAC, byteOffset, bitMask );
216   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
217   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SIGNED_RG11_EAC, byteOffset, bitMask );
218   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
219   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGB8_ETC2, byteOffset, bitMask );
220   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
221   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ETC2, byteOffset, bitMask );
222   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
223   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGB8_ETC1, byteOffset, bitMask );
224   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
225   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGB_PVRTC_4BPPV1, byteOffset, bitMask );
226   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
227   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, byteOffset, bitMask );
228   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
229   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, byteOffset, bitMask );
230   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
231   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA8_ETC2_EAC, byteOffset, bitMask );
232   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
233   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, byteOffset, bitMask );
234   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
235   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_4x4_KHR, byteOffset, bitMask );
236   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
237   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_5x4_KHR, byteOffset, bitMask );
238   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
239   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_5x5_KHR, byteOffset, bitMask );
240   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
241   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_6x5_KHR, byteOffset, bitMask );
242   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
243   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_6x6_KHR, byteOffset, bitMask );
244   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
245   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_8x5_KHR, byteOffset, bitMask );
246   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
247   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_8x6_KHR, byteOffset, bitMask );
248   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
249   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_8x8_KHR, byteOffset, bitMask );
250   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
251   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_10x5_KHR, byteOffset, bitMask );
252   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
253   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_10x6_KHR, byteOffset, bitMask );
254   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
255   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_10x8_KHR, byteOffset, bitMask );
256   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
257   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_10x10_KHR, byteOffset, bitMask );
258   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
259   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_12x10_KHR, byteOffset, bitMask );
260   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
261   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_12x12_KHR, byteOffset, bitMask );
262   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
263   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, byteOffset, bitMask );
264   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
265   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, byteOffset, bitMask );
266   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
267   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, byteOffset, bitMask );
268   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
269   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, byteOffset, bitMask );
270   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
271   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, byteOffset, bitMask );
272   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
273   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, byteOffset, bitMask );
274   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
275   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, byteOffset, bitMask );
276   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
277   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, byteOffset, bitMask );
278   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
279   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, byteOffset, bitMask );
280   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
281   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, byteOffset, bitMask );
282   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
283   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, byteOffset, bitMask );
284   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
285   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, byteOffset, bitMask );
286   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
287   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, byteOffset, bitMask );
288   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
289   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, byteOffset, bitMask );
290   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
291
292   // Not supported
293   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB16F, byteOffset, bitMask );
294   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
295   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB32F, byteOffset, bitMask );
296   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
297
298   END_TEST;
299 }
300
301 int UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap(void)
302 {
303   ToolkitTestApplication application;
304   tet_infoline( "UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap" );
305
306   Property::Map propertyMap;
307   propertyMap.Add( Toolkit::Visual::Property::TYPE,  DevelVisual::ANIMATED_VECTOR_IMAGE )
308              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
309
310   // request AnimatedVectorImageVisual with a property map
311   VisualFactory factory = VisualFactory::Get();
312   Visual::Base visual = factory.CreateVisual( propertyMap );
313   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
314
315   Property::Map resultMap;
316   visualImpl.CreateInstancePropertyMap( resultMap );
317
318   // check the property values from the returned map from a visual
319   DALI_TEST_CHECK( resultMap.Empty() );   // Now the map is empty
320
321   END_TEST;
322 }