Make NPatchData receive LoadComplete call from TextureManager.
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Visuals-internal.cpp
1 /*
2  * Copyright (c) 2020 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 <toolkit-event-thread-callback.h>
26 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
27 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
28 #include <dali-toolkit/internal/visuals/color/color-visual.h>
29 #include <dummy-visual.h>
30 #include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h>
31 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
32
33 using namespace Dali;
34 using namespace Toolkit;
35
36 namespace
37 {
38
39 const char* TEST_VECTOR_IMAGE_FILE_NAME =  TEST_RESOURCE_DIR  "/insta_camera.json";
40
41 }
42
43 int UtcDaliVisualAction(void)
44 {
45   ToolkitTestApplication application;
46   tet_infoline( "Register an ImageVisual and and perform an Action on Visual directly" );
47   Vector2 controlSize( 20.f, 30.f );
48
49   //Created DummyVisual
50   Property::Map settings;
51   Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
52
53   DummyControl dummyControl = DummyControl::New( true );
54   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
55
56   tet_infoline( "Register visual and stage control" );
57
58   Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( dummyVisualPtr.Get() );
59   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
60   dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
61   application.GetScene().Add( dummyControl );
62
63   application.SendNotification();
64   application.Render();
65
66   tet_infoline( "Check action counter is 0 before DoAction" );
67   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
68
69   tet_infoline( "Perform TEST_ACTION action on Visual. Should increase the action counter" );
70
71   Property::Map attributes;
72   Toolkit::Internal::Visual::Base& internalVisualBase =  GetImplementation( visualBaseHandle );
73   internalVisualBase.DoAction( Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
74   application.SendNotification();
75   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 1, TEST_LOCATION );
76
77   END_TEST;
78 }
79
80 int UtcDaliVisualActionNotImplemented(void)
81 {
82   ToolkitTestApplication application;
83   tet_infoline( "Register an ImageVisual and and perform an Action on a Visual which does not support any Actions" );
84   Vector2 controlSize( 20.f, 30.f );
85
86   //Created DummyVisual
87   Property::Map settings;
88   Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
89
90   DummyControl dummyControl = DummyControl::New( true );
91   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
92
93   tet_infoline( "Register visual and stage control" );
94
95   VisualFactory factory = VisualFactory::Get();
96   Property::Map propertyMap;
97   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
98   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
99   Visual::Base visual = factory.CreateVisual( propertyMap );
100
101   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
102   dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
103   application.GetScene().Add( dummyControl );
104
105   application.SendNotification();
106   application.Render();
107
108   tet_infoline( "Check action counter is 0 before DoAction" );
109   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
110
111   tet_infoline( "Perform TEST_ACTION action on Color Visual which does not support it.. Should not increment the action counter" );
112   Property::Map attributes;
113   GetImplementation( visual ).DoAction( Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
114   application.SendNotification();
115   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
116
117   END_TEST;
118 }
119
120 int UtcDaliVisualSetProperties(void)
121 {
122   ToolkitTestApplication application;
123   tet_infoline( "Register a visual and SetProperties" );
124
125   Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
126
127   //Created ColorVisual
128   Property::Map propertyMap1;
129   propertyMap1.Insert(Visual::Property::TYPE,  Visual::COLOR);
130   propertyMap1.Insert(ColorVisual::Property::MIX_COLOR,  Color::RED);
131   Toolkit::Internal::ColorVisualPtr colorVisualPtr = Toolkit::Internal::ColorVisual::New( *factoryCache, propertyMap1 );
132
133   DummyControl dummyControl = DummyControl::New( true );
134   Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
135
136   Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( colorVisualPtr.Get() );
137   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
138   dummyControl.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
139   application.GetScene().Add( dummyControl );
140
141   application.SendNotification();
142   application.Render();
143
144   Property::Map propertyMap;
145   propertyMap.Insert( Visual::Property::MIX_COLOR,  Color::BLUE );
146
147   colorVisualPtr->SetProperties( propertyMap );
148   application.SendNotification();
149   application.Render();
150
151   Property::Map resultMap;
152   visualBaseHandle.CreatePropertyMap( resultMap );
153
154   Property::Value* colorValue = resultMap.Find( Visual::Property::MIX_COLOR,  Property::VECTOR4 );
155   DALI_TEST_CHECK( colorValue );
156   DALI_TEST_CHECK( colorValue->Get< Vector4 >() == Color::BLUE );
157
158   delete factoryCache;
159
160   END_TEST;
161 }
162
163 int UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap(void)
164 {
165   ToolkitTestApplication application;
166   tet_infoline( "UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap" );
167
168   Property::Map propertyMap;
169   propertyMap.Add( Toolkit::Visual::Property::TYPE,  DevelVisual::ANIMATED_VECTOR_IMAGE )
170              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
171
172   // request AnimatedVectorImageVisual with a property map
173   VisualFactory factory = VisualFactory::Get();
174   Visual::Base visual = factory.CreateVisual( propertyMap );
175   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
176
177   Property::Map resultMap;
178   visualImpl.CreateInstancePropertyMap( resultMap );
179
180   // check the property values from the returned map from a visual
181   DALI_TEST_CHECK( resultMap.Empty() );   // Now the map is empty
182
183   END_TEST;
184 }
185
186 int UtcDaliAnimatedVectorImageVisualSetProperties(void)
187 {
188   ToolkitTestApplication application;
189   tet_infoline( "UtcDaliAnimatedVectorImageVisualSetProperties" );
190
191   Property::Map propertyMap;
192   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
193              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
194              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
195              .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.2f, 0.8f )  );
196
197   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
198   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
199   DALI_TEST_CHECK( visual );
200
201   DummyControl actor = DummyControl::New( true );
202   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
203   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
204   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) );
205   application.GetScene().Add( actor );
206
207   application.SendNotification();
208   application.Render();
209
210   // renderer is added to actor
211   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
212   Renderer renderer = actor.GetRendererAt( 0u );
213   DALI_TEST_CHECK( renderer );
214
215   Property::Map propertyMap1;
216   propertyMap1.Add( DevelImageVisual::Property::LOOP_COUNT, 1  )
217               .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.4f, 0.6f )  );
218
219   visualImpl.SetProperties( propertyMap1 );
220
221   application.SendNotification();
222   application.Render();
223
224   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
225   renderer = actor.GetRendererAt( 0u );
226   DALI_TEST_CHECK( renderer );
227
228   actor.Unparent( );
229   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
230
231   END_TEST;
232 }
233
234 int UtcDaliArcVisualCreateInstancePropertyMap(void)
235 {
236   ToolkitTestApplication application;
237   tet_infoline( "UtcDaliArcVisualCreateInstancePropertyMap" );
238
239   Property::Map propertyMap;
240   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ARC )
241              .Add( DevelArcVisual::Property::THICKNESS, 20.0f );
242
243   // request ArcVisual with a property map
244   VisualFactory factory = VisualFactory::Get();
245   Visual::Base visual = factory.CreateVisual( propertyMap );
246   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
247
248   Property::Map resultMap;
249   visualImpl.CreateInstancePropertyMap( resultMap );
250
251   // check the property values from the returned map from a visual
252   DALI_TEST_CHECK( resultMap.Empty() );   // Now the map is empty
253
254   END_TEST;
255 }