2 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <dali-toolkit-test-suite-utils.h>
19 #include <dali-toolkit/dali-toolkit.h>
23 #include <dali-scene3d/public-api/model-components/model-node.h>
24 #include "mesh-builder.h"
27 using namespace Dali::Toolkit;
29 void model_components_model_node_startup(void)
31 test_return_value = TET_UNDEF;
34 void model_components_model_node_cleanup(void)
36 test_return_value = TET_PASS;
39 // Negative test case for a method
40 int UtcDaliModelNodeUninitialized(void)
42 ToolkitTestApplication application;
43 tet_infoline(" UtcDaliModelNodeUninitialized");
45 Scene3D::ModelNode modelNode;
49 // New() must be called to create a ModelNode or it wont be valid.
50 Actor a = Actor::New();
52 DALI_TEST_CHECK(false);
54 catch(Dali::DaliException& e)
56 // Tests that a negative test of an assertion succeeds
57 DALI_TEST_PRINT_ASSERT(e);
58 DALI_TEST_CHECK(!modelNode);
63 // Positive test case for a method
64 int UtcDaliModelNodeNew(void)
66 ToolkitTestApplication application;
67 tet_infoline(" UtcDaliModelNodeNew");
69 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
70 DALI_TEST_CHECK(modelNode);
74 // Positive test case for a method
75 int UtcDaliModelNodeDownCast(void)
77 ToolkitTestApplication application;
78 tet_infoline(" UtcDaliModelNodeDownCast");
80 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
81 BaseHandle handle(modelNode);
83 Scene3D::ModelNode modelNode2 = Scene3D::ModelNode::DownCast(handle);
84 DALI_TEST_CHECK(modelNode);
85 DALI_TEST_CHECK(modelNode2);
86 DALI_TEST_CHECK(modelNode2 == modelNode);
90 int UtcDaliModelNodeTypeRegistry(void)
92 ToolkitTestApplication application;
94 TypeRegistry typeRegistry = TypeRegistry::Get();
95 DALI_TEST_CHECK(typeRegistry);
97 TypeInfo typeInfo = typeRegistry.GetTypeInfo("ModelNode");
98 DALI_TEST_CHECK(typeInfo);
100 BaseHandle handle = typeInfo.CreateInstance();
101 DALI_TEST_CHECK(handle);
103 Scene3D::ModelNode modelNode = Scene3D::ModelNode::DownCast(handle);
104 DALI_TEST_CHECK(modelNode);
109 // Positive test case for a method
110 int UtcDaliModelNodeAddRemove(void)
112 ToolkitTestApplication application;
113 tet_infoline(" UtcDaliModelAddRemove");
115 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
116 DALI_TEST_CHECK(modelNode);
118 Actor actor = Actor::New();
119 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
121 modelNode.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
122 modelNode.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
123 modelNode.Add(actor);
124 application.GetScene().Add(modelNode);
126 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
128 modelNode.Remove(actor);
130 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
134 int UtcDaliModelNodeCopyAndAssignment(void)
136 ToolkitTestApplication application;
138 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
139 DALI_TEST_CHECK(modelNode);
141 Scene3D::ModelNode copy(modelNode);
142 DALI_TEST_CHECK(modelNode == copy);
144 Scene3D::ModelNode assign;
145 DALI_TEST_CHECK(!assign);
148 DALI_TEST_CHECK(assign == modelNode);
153 int UtcDaliModelNodeMoveConstructor(void)
155 ToolkitTestApplication application;
157 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
158 DALI_TEST_EQUALS(1, modelNode.GetBaseObject().ReferenceCount(), TEST_LOCATION);
159 modelNode.SetProperty(Actor::Property::SENSITIVE, false);
160 DALI_TEST_CHECK(false == modelNode.GetProperty<bool>(Actor::Property::SENSITIVE));
162 Scene3D::ModelNode moved = std::move(modelNode);
163 DALI_TEST_CHECK(moved);
164 DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
165 DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
166 DALI_TEST_CHECK(!modelNode);
171 int UtcDaliModelNodeMoveAssignment(void)
173 ToolkitTestApplication application;
175 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
176 DALI_TEST_EQUALS(1, modelNode.GetBaseObject().ReferenceCount(), TEST_LOCATION);
177 modelNode.SetProperty(Actor::Property::SENSITIVE, false);
178 DALI_TEST_CHECK(false == modelNode.GetProperty<bool>(Actor::Property::SENSITIVE));
180 Scene3D::ModelNode moved;
181 moved = std::move(modelNode);
182 DALI_TEST_CHECK(moved);
183 DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
184 DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
185 DALI_TEST_CHECK(!modelNode);
190 int UtcDaliModelNodeOnSizeSet(void)
192 ToolkitTestApplication application;
194 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
196 application.GetScene().Add(modelNode);
198 application.SendNotification();
199 application.Render();
201 Vector2 size(200.0f, 300.0f);
202 modelNode.SetProperty(Actor::Property::SIZE, size);
204 application.SendNotification();
205 application.Render();
207 DALI_TEST_EQUALS(modelNode.GetCurrentProperty<Vector2>(Actor::Property::SIZE), size, TEST_LOCATION);
214 int UtcDaliModelNodeAddRemovePrimitive(void)
216 tet_infoline(" UtcDaliModelNodeAddPrimitive.");
218 ToolkitTestApplication application;
220 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
222 uint32_t expect = 0u;
224 tet_printf("Test empty primitive case\n");
226 DALI_TEST_EQUALS(expect, modelNode.GetModelPrimitiveCount(), TEST_LOCATION);
227 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(0u));
228 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
230 Scene3D::ModelPrimitive primitive1 = Scene3D::ModelPrimitive::New();
231 Scene3D::ModelPrimitive primitive2 = Scene3D::ModelPrimitive::New();
233 Scene3D::Material material = Scene3D::Material::New();
235 primitive1.SetMaterial(material);
236 primitive2.SetMaterial(material);
238 tet_printf("Test primitive appended during off scene\n");
240 modelNode.AddModelPrimitive(primitive1);
242 DALI_TEST_EQUALS(expect, modelNode.GetModelPrimitiveCount(), TEST_LOCATION);
243 DALI_TEST_CHECK(primitive1 == modelNode.GetModelPrimitive(0u));
244 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
246 tet_printf("Test primitive appended during on scene\n");
248 application.GetScene().Add(modelNode);
250 modelNode.AddModelPrimitive(primitive2);
252 DALI_TEST_EQUALS(expect, modelNode.GetModelPrimitiveCount(), TEST_LOCATION);
253 DALI_TEST_CHECK(primitive1 == modelNode.GetModelPrimitive(0u));
254 DALI_TEST_CHECK(primitive2 == modelNode.GetModelPrimitive(1u));
256 modelNode.RemoveModelPrimitive(primitive1);
257 DALI_TEST_CHECK(primitive2 == modelNode.GetModelPrimitive(0u));
258 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
260 modelNode.RemoveModelPrimitive(0u);
261 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(0u));
262 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
264 modelNode.Unparent();
269 int UtcDaliModelNodeFindChildModelNodeByName(void)
271 tet_infoline(" UtcDaliModelNodeFindChildModelNodeByName.");
273 ToolkitTestApplication application;
275 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
276 Scene3D::ModelNode modelNode1 = Scene3D::ModelNode::New();
277 Scene3D::ModelNode modelNode2 = Scene3D::ModelNode::New();
279 modelNode1.SetProperty(Dali::Actor::Property::NAME, "modelNode1");
280 modelNode2.SetProperty(Dali::Actor::Property::NAME, "modelNode2");
281 modelNode.Add(modelNode1);
282 modelNode.Add(modelNode2);
284 Scene3D::ModelNode child1 = modelNode.FindChildModelNodeByName("modelNode1");
285 DALI_TEST_CHECK(child1);
286 DALI_TEST_EQUALS(child1, modelNode1, TEST_LOCATION);
288 Scene3D::ModelNode child2 = modelNode.FindChildModelNodeByName("modelNode2");
289 DALI_TEST_CHECK(child2);
290 DALI_TEST_EQUALS(child2, modelNode2, TEST_LOCATION);
295 int UtcDaliModelNodeCustomNode1(void)
297 tet_infoline(" UtcDaliModelNodeCustomNode1.");
299 ToolkitTestApplication application;
301 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
302 Scene3D::ModelPrimitive modelPrimitive = Scene3D::ModelPrimitive::New();
303 Scene3D::Material material = Scene3D::Material::New();
304 Geometry geometry = CreateQuadGeometry();
306 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 0, TEST_LOCATION);
308 modelNode.AddModelPrimitive(modelPrimitive);
310 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 0, TEST_LOCATION);
312 modelPrimitive.SetGeometry(geometry);
314 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 0, TEST_LOCATION);
316 modelPrimitive.SetMaterial(material);
318 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 1, TEST_LOCATION);
323 int UtcDaliModelNodeCustomNode2(void)
325 tet_infoline(" UtcDaliModelNodeCustomNode2.");
327 ToolkitTestApplication application;
329 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
330 Scene3D::ModelPrimitive modelPrimitive = Scene3D::ModelPrimitive::New();
331 Scene3D::Material material = Scene3D::Material::New();
332 Geometry geometry = CreateQuadGeometry();
333 modelPrimitive.SetGeometry(geometry);
334 modelPrimitive.SetMaterial(material);
336 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 0, TEST_LOCATION);
338 modelNode.AddModelPrimitive(modelPrimitive);
340 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 1, TEST_LOCATION);
345 int UtcDaliModelNodeCustomNode3(void)
347 tet_infoline(" UtcDaliModelNodeCustomNode3.");
349 ToolkitTestApplication application;
351 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
352 Scene3D::ModelPrimitive modelPrimitive = Scene3D::ModelPrimitive::New();
353 Scene3D::Material material = Scene3D::Material::New();
354 Geometry geometry = CreateQuadGeometry();
355 modelPrimitive.SetGeometry(geometry);
356 modelPrimitive.SetMaterial(material);
358 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 0, TEST_LOCATION);
360 modelNode.AddModelPrimitive(modelPrimitive);
362 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 1, TEST_LOCATION);
364 modelNode.AddModelPrimitive(modelPrimitive);
366 DALI_TEST_EQUALS(modelNode.GetRendererCount(), 1, TEST_LOCATION);