Merge "Refactoring VisualActions" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-GlView.cpp
1 /*
2  * Copyright (c) 2021 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 <unistd.h>
19 #include <thread>
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22 #include <dali-toolkit/public-api/controls/gl-view/gl-view.h>
23 #include <dali/devel-api/adaptor-framework/window-devel.h>
24
25 using namespace Dali;
26 using namespace Dali::Toolkit;
27
28 // Positive test case for a method
29 int UtcDaliGlViewNew(void)
30 {
31   ToolkitTestApplication application;
32   tet_infoline(" UtcDaliGlViewNew");
33   GlView view = GlView::New(GlView::ColorFormat::RGBA8888);
34   DALI_TEST_CHECK( view );
35   END_TEST;
36 }
37
38 // Positive test case for a method
39 int UtcDaliGlViewDownCast(void)
40 {
41   ToolkitTestApplication application;
42   tet_infoline(" UtcDaliGlViewDownCast");
43
44   GlView view = GlView::New(GlView::ColorFormat::RGB888);
45   BaseHandle handle(view);
46
47   Toolkit::GlView view2 = Toolkit::GlView::DownCast( handle );
48   DALI_TEST_CHECK( view );
49   DALI_TEST_CHECK( view2 );
50   DALI_TEST_CHECK( view == view2 );
51   END_TEST;
52 }
53
54 int UtcDaliGlViewCopyAndAssignment(void)
55 {
56   ToolkitTestApplication application;
57   tet_infoline("UtcDaliGlViewCopyAndAssignment");
58
59   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
60   DALI_TEST_CHECK( view );
61
62   GlView copy( view );
63   DALI_TEST_CHECK( view == copy );
64
65   GlView assign;
66   DALI_TEST_CHECK( !assign );
67
68   assign = copy;
69   DALI_TEST_CHECK( assign == view );
70
71   END_TEST;
72 }
73
74 int UtcDaliGlViewMoveAssignment(void)
75 {
76   ToolkitTestApplication application;
77   tet_infoline("UtcDaliGlViewMoveAssignment");
78
79   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
80   DALI_TEST_EQUALS( 1, view.GetBaseObject().ReferenceCount(), TEST_LOCATION );
81
82   GlView moved;
83   moved = std::move( view );
84   DALI_TEST_CHECK( moved );
85   DALI_TEST_EQUALS( 1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION );
86   DALI_TEST_CHECK( !view );
87
88   END_TEST;
89 }
90
91 int UtcDaliGlViewSetGraphicsConfigGles20N(void)
92 {
93   ToolkitTestApplication application;
94   tet_infoline("UtcDaliGlViewSetGraphicsConfigGles20");
95   GlView view;
96   try
97   {
98     view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
99     DALI_TEST_CHECK(false);
100   }
101   catch(...)
102   {
103     DALI_TEST_CHECK(true);
104   }
105   END_TEST;
106 }
107
108 int UtcDaliGlViewSetGraphicsConfigGles30(void)
109 {
110   ToolkitTestApplication application;
111   tet_infoline("UtcDaliGlViewSetGraphicsConfigGles30");
112   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
113
114   try
115   {
116     view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_3_0);
117     DALI_TEST_CHECK(true);
118   }
119   catch(...)
120   {
121     DALI_TEST_CHECK(false);
122   }
123   END_TEST;
124 }
125
126 int UtcDaliGlViewRenderingMode(void)
127 {
128   ToolkitTestApplication application;
129   tet_infoline("UtcDaliGlViewRenderingMode");
130   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
131
132   view.SetRenderingMode(GlView::RenderingMode::ON_DEMAND);
133
134   GlView::RenderingMode mode = view.GetRenderingMode();
135
136   DALI_TEST_EQUALS( GlView::RenderingMode::ON_DEMAND, mode, TEST_LOCATION );
137
138   END_TEST;
139 }
140
141 int UtcDaliGlViewOnSizeSet(void)
142 {
143   ToolkitTestApplication application;
144   tet_infoline("UtcDaliGlViewOnSizeSet");
145   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
146
147
148   application.GetScene().Add( view );
149
150   application.SendNotification();
151   application.Render();
152
153   Vector3 size( 200.0f, 300.0f, 0.0f );
154   view.SetProperty( Actor::Property::SIZE, size );
155
156   application.SendNotification();
157   application.Render();
158
159   DALI_TEST_EQUALS( view.GetCurrentProperty< Vector3 >( Actor::Property::SIZE ), size, TEST_LOCATION );
160
161   END_TEST;
162 }
163
164
165 // Internal callback function
166 void glInit(void)
167 {
168 }
169
170 int glRenderFrame(void)
171 {
172   static unsigned int retFlag = 0;
173   return retFlag++;
174 }
175
176 void glTerminate(void)
177 {
178 }
179
180 void resizeCB(Vector2 size)
181 {
182 }
183
184 int UtcDaliGlViewRegisterGlCallbackN(void)
185 {
186   ToolkitTestApplication application;
187   tet_infoline("UtcDaliGlViewRegisterGlCallback");
188   GlView view;
189
190   try
191   {
192     view.RegisterGlCallback(Dali::MakeCallback(glInit), Dali::MakeCallback(glRenderFrame), Dali::MakeCallback(glTerminate));
193     DALI_TEST_CHECK(false);
194   }
195   catch(...)
196   {
197     DALI_TEST_CHECK(true);
198   }
199   END_TEST;
200 }
201
202 int UtcDaliGlViewSetResizeCallbackN(void)
203 {
204   ToolkitTestApplication application;
205   tet_infoline("UtcDaliGlViewSetResizeCallback");
206   GlView view;
207
208   try
209   {
210     view.SetResizeCallback(Dali::MakeCallback(resizeCB));
211     DALI_TEST_CHECK(false);
212   }
213   catch(...)
214   {
215     DALI_TEST_CHECK(true);
216   }
217   END_TEST;
218 }
219
220 int UtcDaliGlViewRenderOnce(void)
221 {
222   ToolkitTestApplication application;
223   tet_infoline("UtcDaliGlViewRenderOnce");
224   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
225
226   try
227   {
228     view.RenderOnce();
229     DALI_TEST_CHECK(true);
230   }
231   catch(...)
232   {
233     DALI_TEST_CHECK(false);
234   }
235   END_TEST;
236 }
237
238 int UtcDaliGlViewWindowVisibilityChanged(void)
239 {
240   ToolkitTestApplication application;
241   tet_infoline("UtcDaliGlViewWindowVisibilityChanged");
242   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
243   application.GetScene().Add( view );
244   view.SetRenderingMode(GlView::RenderingMode::CONTINUOUS);
245   view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
246   view.RegisterGlCallback(Dali::MakeCallback(glInit), Dali::MakeCallback(glRenderFrame), Dali::MakeCallback(glTerminate));
247   view.SetResizeCallback(Dali::MakeCallback(resizeCB));
248
249   application.SendNotification();
250   application.Render();
251
252   Window window = DevelWindow::Get( view );
253   window.Hide();
254   application.SendNotification();
255   application.Render();
256
257   DALI_TEST_CHECK(true);
258   END_TEST;
259 }
260
261 int UtcDaliGlViewOnScene(void)
262 {
263   ToolkitTestApplication application;
264
265   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
266
267   //Onscene
268   application.GetScene().Add( view );
269   view.SetRenderingMode(GlView::RenderingMode::CONTINUOUS);
270   view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
271   view.RegisterGlCallback(Dali::MakeCallback(glInit), Dali::MakeCallback(glRenderFrame), Dali::MakeCallback(glTerminate));
272
273   application.SendNotification();
274   application.Render();
275
276   //Offscene
277   application.GetScene().Remove(view);
278
279   application.SendNotification();
280   application.Render();
281
282   DALI_TEST_CHECK(true);
283   END_TEST;
284 }
285
286 int UtcDaliGlViewControlVisibilityChanged(void)
287 {
288   ToolkitTestApplication application;
289
290   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
291   application.GetScene().Add( view );
292
293   application.SendNotification();
294   application.Render();
295
296   view.SetProperty( Actor::Property::VISIBLE, false );
297   application.SendNotification();
298   application.Render();
299   DALI_TEST_CHECK(view.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == false);
300
301   view.SetProperty( Actor::Property::VISIBLE, true );
302   application.SendNotification();
303   application.Render();
304   DALI_TEST_CHECK(view.GetCurrentProperty<bool>(Actor::Property::VISIBLE) == true);
305
306   END_TEST;
307 }
308
309 int UtcDaliGlViewResize(void)
310 {
311   ToolkitTestApplication application;
312   tet_infoline("UtcDaliGlViewResize");
313   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
314
315   application.GetScene().Add( view );
316   view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
317   view.RegisterGlCallback(Dali::MakeCallback(glInit), Dali::MakeCallback(glRenderFrame), Dali::MakeCallback(glTerminate));
318   view.SetResizeCallback(Dali::MakeCallback(resizeCB));
319   view.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
320   view.SetProperty(Actor::Property::SIZE, Vector2(360.0f, 360.0f));
321
322   application.SendNotification();
323   application.Render();
324
325   //To GlViewRenderThread can recognize Resize signal the main thread have to sleep.
326   std::this_thread::sleep_for( std::chrono::milliseconds( 100 ) );
327
328   application.SendNotification();
329   application.Render();
330
331   DALI_TEST_CHECK(true);
332   END_TEST;
333 }