Merge "fix issue in negative line spacing with key arrow down" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-GlView.cpp
1 /*
2  * Copyright (c) 2022 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
21 #include <dali-toolkit-test-suite-utils.h>
22
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <dali-toolkit/public-api/controls/gl-view/gl-view.h>
25 #include <dali/devel-api/adaptor-framework/window-devel.h>
26
27 using namespace Dali;
28 using namespace Dali::Toolkit;
29
30 // Positive test case for a method
31 int UtcDaliGlViewNew(void)
32 {
33   ToolkitTestApplication application;
34   tet_infoline(" UtcDaliGlViewNew");
35   GlView view = GlView::New(GlView::ColorFormat::RGBA8888);
36   DALI_TEST_CHECK(view);
37   END_TEST;
38 }
39
40 // Positive test case for a method
41 int UtcDaliGlViewDownCast(void)
42 {
43   ToolkitTestApplication application;
44   tet_infoline(" UtcDaliGlViewDownCast");
45
46   GlView     view = GlView::New(GlView::ColorFormat::RGB888);
47   BaseHandle handle(view);
48
49   Toolkit::GlView view2 = Toolkit::GlView::DownCast(handle);
50   DALI_TEST_CHECK(view);
51   DALI_TEST_CHECK(view2);
52   DALI_TEST_CHECK(view == view2);
53   END_TEST;
54 }
55
56 int UtcDaliGlViewCopyAndAssignment(void)
57 {
58   ToolkitTestApplication application;
59   tet_infoline("UtcDaliGlViewCopyAndAssignment");
60
61   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
62   DALI_TEST_CHECK(view);
63
64   GlView copy(view);
65   DALI_TEST_CHECK(view == copy);
66
67   GlView assign;
68   DALI_TEST_CHECK(!assign);
69
70   assign = copy;
71   DALI_TEST_CHECK(assign == view);
72
73   END_TEST;
74 }
75
76 int UtcDaliGlViewMoveAssignment(void)
77 {
78   ToolkitTestApplication application;
79   tet_infoline("UtcDaliGlViewMoveAssignment");
80
81   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
82   DALI_TEST_EQUALS(1, view.GetBaseObject().ReferenceCount(), TEST_LOCATION);
83
84   GlView moved;
85   moved = std::move(view);
86   DALI_TEST_CHECK(moved);
87   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
88   DALI_TEST_CHECK(!view);
89
90   END_TEST;
91 }
92
93 int UtcDaliGlViewSetGraphicsConfigGles20N(void)
94 {
95   ToolkitTestApplication application;
96   tet_infoline("UtcDaliGlViewSetGraphicsConfigGles20");
97   GlView view;
98   try
99   {
100     view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
101     DALI_TEST_CHECK(false);
102   }
103   catch(...)
104   {
105     DALI_TEST_CHECK(true);
106   }
107   END_TEST;
108 }
109
110 int UtcDaliGlViewSetGraphicsConfigGles30(void)
111 {
112   ToolkitTestApplication application;
113   tet_infoline("UtcDaliGlViewSetGraphicsConfigGles30");
114   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
115
116   try
117   {
118     view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_3_0);
119     DALI_TEST_CHECK(true);
120   }
121   catch(...)
122   {
123     DALI_TEST_CHECK(false);
124   }
125   END_TEST;
126 }
127
128 int UtcDaliGlViewRenderingMode(void)
129 {
130   ToolkitTestApplication application;
131   tet_infoline("UtcDaliGlViewRenderingMode");
132   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
133
134   view.SetRenderingMode(GlView::RenderingMode::ON_DEMAND);
135
136   GlView::RenderingMode mode = view.GetRenderingMode();
137
138   DALI_TEST_EQUALS(GlView::RenderingMode::ON_DEMAND, mode, TEST_LOCATION);
139
140   END_TEST;
141 }
142
143 int UtcDaliGlViewOnSizeSet(void)
144 {
145   ToolkitTestApplication application;
146   tet_infoline("UtcDaliGlViewOnSizeSet");
147   GlView view = Toolkit::GlView::New(GlView::ColorFormat::RGB888);
148
149   application.GetScene().Add(view);
150
151   application.SendNotification();
152   application.Render();
153
154   Vector3 size(200.0f, 300.0f, 0.0f);
155   view.SetProperty(Actor::Property::SIZE, size);
156
157   application.SendNotification();
158   application.Render();
159
160   DALI_TEST_EQUALS(view.GetCurrentProperty<Vector3>(Actor::Property::SIZE), size, TEST_LOCATION);
161
162   END_TEST;
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 UtcDaliGlViewRegisterGlCallbacksN(void)
185 {
186   ToolkitTestApplication application;
187   tet_infoline("UtcDaliGlViewRegisterGlCallbacksN");
188   GlView view;
189
190   try
191   {
192     view.RegisterGlCallbacks(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.RegisterGlCallbacks(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.RegisterGlCallbacks(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.RegisterGlCallbacks(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 }