Merge branch 'devel/master' into tizen
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-scene3d / utc-Dali-ModelNode.cpp
1 /*
2  * Copyright (c) 2023 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 <dali-toolkit-test-suite-utils.h>
19 #include <dali-toolkit/dali-toolkit.h>
20 #include <stdlib.h>
21 #include <iostream>
22
23 #include <dali-scene3d/public-api/model-components/model-node.h>
24
25 using namespace Dali;
26 using namespace Dali::Toolkit;
27
28 void model_components_model_node_startup(void)
29 {
30   test_return_value = TET_UNDEF;
31 }
32
33 void model_components_model_node_cleanup(void)
34 {
35   test_return_value = TET_PASS;
36 }
37
38 namespace
39 {
40 } // namespace
41
42 // Negative test case for a method
43 int UtcDaliModelNodeUninitialized(void)
44 {
45   ToolkitTestApplication application;
46   tet_infoline(" UtcDaliModelNodeUninitialized");
47
48   Scene3D::ModelNode modelNode;
49
50   try
51   {
52     // New() must be called to create a ModelNode or it wont be valid.
53     Actor a = Actor::New();
54     modelNode.Add(a);
55     DALI_TEST_CHECK(false);
56   }
57   catch(Dali::DaliException& e)
58   {
59     // Tests that a negative test of an assertion succeeds
60     DALI_TEST_PRINT_ASSERT(e);
61     DALI_TEST_CHECK(!modelNode);
62   }
63   END_TEST;
64 }
65
66 // Positive test case for a method
67 int UtcDaliModelNodeNew(void)
68 {
69   ToolkitTestApplication application;
70   tet_infoline(" UtcDaliModelNodeNew");
71
72   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
73   DALI_TEST_CHECK(modelNode);
74   END_TEST;
75 }
76
77 // Positive test case for a method
78 int UtcDaliModelNodeDownCast(void)
79 {
80   ToolkitTestApplication application;
81   tet_infoline(" UtcDaliModelNodeDownCast");
82
83   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
84   BaseHandle         handle(modelNode);
85
86   Scene3D::ModelNode modelNode2 = Scene3D::ModelNode::DownCast(handle);
87   DALI_TEST_CHECK(modelNode);
88   DALI_TEST_CHECK(modelNode2);
89   DALI_TEST_CHECK(modelNode2 == modelNode);
90   END_TEST;
91 }
92
93 int UtcDaliModelNodeTypeRegistry(void)
94 {
95   ToolkitTestApplication application;
96
97   TypeRegistry typeRegistry = TypeRegistry::Get();
98   DALI_TEST_CHECK(typeRegistry);
99
100   TypeInfo typeInfo = typeRegistry.GetTypeInfo("ModelNode");
101   DALI_TEST_CHECK(typeInfo);
102
103   BaseHandle handle = typeInfo.CreateInstance();
104   DALI_TEST_CHECK(handle);
105
106   Scene3D::ModelNode modelNode = Scene3D::ModelNode::DownCast(handle);
107   DALI_TEST_CHECK(modelNode);
108
109   END_TEST;
110 }
111
112 // Positive test case for a method
113 int UtcDaliModelNodeAddRemove(void)
114 {
115   ToolkitTestApplication application;
116   tet_infoline(" UtcDaliModelAddRemove");
117
118   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
119   DALI_TEST_CHECK(modelNode);
120
121   Actor actor = Actor::New();
122   DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
123
124   modelNode.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
125   modelNode.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
126   modelNode.Add(actor);
127   application.GetScene().Add(modelNode);
128
129   DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
130
131   modelNode.Remove(actor);
132
133   DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
134   END_TEST;
135 }
136
137 int UtcDaliModelNodeCopyAndAssignment(void)
138 {
139   ToolkitTestApplication application;
140
141   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
142   DALI_TEST_CHECK(modelNode);
143
144   Scene3D::ModelNode copy(modelNode);
145   DALI_TEST_CHECK(modelNode == copy);
146
147   Scene3D::ModelNode assign;
148   DALI_TEST_CHECK(!assign);
149
150   assign = copy;
151   DALI_TEST_CHECK(assign == modelNode);
152
153   END_TEST;
154 }
155
156 int UtcDaliModelNodeMoveConstructor(void)
157 {
158   ToolkitTestApplication application;
159
160   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
161   DALI_TEST_EQUALS(1, modelNode.GetBaseObject().ReferenceCount(), TEST_LOCATION);
162   modelNode.SetProperty(Actor::Property::SENSITIVE, false);
163   DALI_TEST_CHECK(false == modelNode.GetProperty<bool>(Actor::Property::SENSITIVE));
164
165   Scene3D::ModelNode moved = std::move(modelNode);
166   DALI_TEST_CHECK(moved);
167   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
168   DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
169   DALI_TEST_CHECK(!modelNode);
170
171   END_TEST;
172 }
173
174 int UtcDaliModelNodeMoveAssignment(void)
175 {
176   ToolkitTestApplication application;
177
178   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
179   DALI_TEST_EQUALS(1, modelNode.GetBaseObject().ReferenceCount(), TEST_LOCATION);
180   modelNode.SetProperty(Actor::Property::SENSITIVE, false);
181   DALI_TEST_CHECK(false == modelNode.GetProperty<bool>(Actor::Property::SENSITIVE));
182
183   Scene3D::ModelNode moved;
184   moved = std::move(modelNode);
185   DALI_TEST_CHECK(moved);
186   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
187   DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
188   DALI_TEST_CHECK(!modelNode);
189
190   END_TEST;
191 }
192
193 int UtcDaliModelNodeOnSizeSet(void)
194 {
195   ToolkitTestApplication application;
196
197   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
198
199   application.GetScene().Add(modelNode);
200
201   application.SendNotification();
202   application.Render();
203
204   Vector2 size(200.0f, 300.0f);
205   modelNode.SetProperty(Actor::Property::SIZE, size);
206
207   application.SendNotification();
208   application.Render();
209
210   DALI_TEST_EQUALS(modelNode.GetCurrentProperty<Vector2>(Actor::Property::SIZE), size, TEST_LOCATION);
211
212   END_TEST;
213 }
214
215 // Method test
216
217 int UtcDaliModelNodeAddRemovePrimitive(void)
218 {
219   tet_infoline(" UtcDaliModelNodeAddPrimitive.");
220
221   ToolkitTestApplication application;
222
223   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
224
225   uint32_t expect = 0u;
226
227   tet_printf("Test empty primitive case\n");
228
229   DALI_TEST_EQUALS(expect, modelNode.GetModelPrimitiveCount(), TEST_LOCATION);
230   DALI_TEST_CHECK(!modelNode.GetModelPrimitive(0u));
231   DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
232
233   Scene3D::ModelPrimitive primitive1 = Scene3D::ModelPrimitive::New();
234   Scene3D::ModelPrimitive primitive2 = Scene3D::ModelPrimitive::New();
235
236   Scene3D::Material material = Scene3D::Material::New();
237
238   primitive1.SetMaterial(material);
239   primitive2.SetMaterial(material);
240
241   tet_printf("Test primitive appended during off scene\n");
242
243   modelNode.AddModelPrimitive(primitive1);
244   ++expect;
245   DALI_TEST_EQUALS(expect, modelNode.GetModelPrimitiveCount(), TEST_LOCATION);
246   DALI_TEST_CHECK(primitive1 == modelNode.GetModelPrimitive(0u));
247   DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
248
249   tet_printf("Test primitive appended during on scene\n");
250
251   application.GetScene().Add(modelNode);
252
253   modelNode.AddModelPrimitive(primitive2);
254   ++expect;
255   DALI_TEST_EQUALS(expect, modelNode.GetModelPrimitiveCount(), TEST_LOCATION);
256   DALI_TEST_CHECK(primitive1 == modelNode.GetModelPrimitive(0u));
257   DALI_TEST_CHECK(primitive2 == modelNode.GetModelPrimitive(1u));
258
259   modelNode.RemoveModelPrimitive(primitive1);
260   DALI_TEST_CHECK(primitive2 == modelNode.GetModelPrimitive(0u));
261   DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
262
263   modelNode.RemoveModelPrimitive(0u);
264   DALI_TEST_CHECK(!modelNode.GetModelPrimitive(0u));
265   DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
266
267   modelNode.Unparent();
268
269   END_TEST;
270 }
271
272 int UtcDaliModelNodeFindChildModelNodeByName(void)
273 {
274   tet_infoline(" UtcDaliModelNodeFindChildModelNodeByName.");
275
276   ToolkitTestApplication application;
277
278   Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
279   Scene3D::ModelNode modelNode1 = Scene3D::ModelNode::New();
280   Scene3D::ModelNode modelNode2 = Scene3D::ModelNode::New();
281
282   modelNode1.SetProperty(Dali::Actor::Property::NAME, "modelNode1");
283   modelNode2.SetProperty(Dali::Actor::Property::NAME, "modelNode2");
284   modelNode.Add(modelNode1);
285   modelNode.Add(modelNode2);
286
287   Scene3D::ModelNode child1 = modelNode.FindChildModelNodeByName("modelNode1");
288   DALI_TEST_CHECK(child1);
289   DALI_TEST_EQUALS(child1, modelNode1, TEST_LOCATION);
290
291   Scene3D::ModelNode child2 = modelNode.FindChildModelNodeByName("modelNode2");
292   DALI_TEST_CHECK(child2);
293   DALI_TEST_EQUALS(child2, modelNode2, TEST_LOCATION);
294
295   END_TEST;
296 }