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>
26 using namespace Dali::Toolkit;
28 void model_components_model_node_startup(void)
30 test_return_value = TET_UNDEF;
33 void model_components_model_node_cleanup(void)
35 test_return_value = TET_PASS;
42 // Negative test case for a method
43 int UtcDaliModelNodeUninitialized(void)
45 ToolkitTestApplication application;
46 tet_infoline(" UtcDaliModelNodeUninitialized");
48 Scene3D::ModelNode modelNode;
52 // New() must be called to create a ModelNode or it wont be valid.
53 Actor a = Actor::New();
55 DALI_TEST_CHECK(false);
57 catch(Dali::DaliException& e)
59 // Tests that a negative test of an assertion succeeds
60 DALI_TEST_PRINT_ASSERT(e);
61 DALI_TEST_CHECK(!modelNode);
66 // Positive test case for a method
67 int UtcDaliModelNodeNew(void)
69 ToolkitTestApplication application;
70 tet_infoline(" UtcDaliModelNodeNew");
72 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
73 DALI_TEST_CHECK(modelNode);
77 // Positive test case for a method
78 int UtcDaliModelNodeDownCast(void)
80 ToolkitTestApplication application;
81 tet_infoline(" UtcDaliModelNodeDownCast");
83 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
84 BaseHandle handle(modelNode);
86 Scene3D::ModelNode modelNode2 = Scene3D::ModelNode::DownCast(handle);
87 DALI_TEST_CHECK(modelNode);
88 DALI_TEST_CHECK(modelNode2);
89 DALI_TEST_CHECK(modelNode2 == modelNode);
93 int UtcDaliModelNodeTypeRegistry(void)
95 ToolkitTestApplication application;
97 TypeRegistry typeRegistry = TypeRegistry::Get();
98 DALI_TEST_CHECK(typeRegistry);
100 TypeInfo typeInfo = typeRegistry.GetTypeInfo("ModelNode");
101 DALI_TEST_CHECK(typeInfo);
103 BaseHandle handle = typeInfo.CreateInstance();
104 DALI_TEST_CHECK(handle);
106 Scene3D::ModelNode modelNode = Scene3D::ModelNode::DownCast(handle);
107 DALI_TEST_CHECK(modelNode);
112 // Positive test case for a method
113 int UtcDaliModelNodeAddRemove(void)
115 ToolkitTestApplication application;
116 tet_infoline(" UtcDaliModelAddRemove");
118 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
119 DALI_TEST_CHECK(modelNode);
121 Actor actor = Actor::New();
122 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
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);
129 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
131 modelNode.Remove(actor);
133 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
137 int UtcDaliModelNodeCopyAndAssignment(void)
139 ToolkitTestApplication application;
141 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
142 DALI_TEST_CHECK(modelNode);
144 Scene3D::ModelNode copy(modelNode);
145 DALI_TEST_CHECK(modelNode == copy);
147 Scene3D::ModelNode assign;
148 DALI_TEST_CHECK(!assign);
151 DALI_TEST_CHECK(assign == modelNode);
156 int UtcDaliModelNodeMoveConstructor(void)
158 ToolkitTestApplication application;
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));
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);
174 int UtcDaliModelNodeMoveAssignment(void)
176 ToolkitTestApplication application;
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));
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);
193 int UtcDaliModelNodeOnSizeSet(void)
195 ToolkitTestApplication application;
197 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
199 application.GetScene().Add(modelNode);
201 application.SendNotification();
202 application.Render();
204 Vector2 size(200.0f, 300.0f);
205 modelNode.SetProperty(Actor::Property::SIZE, size);
207 application.SendNotification();
208 application.Render();
210 DALI_TEST_EQUALS(modelNode.GetCurrentProperty<Vector2>(Actor::Property::SIZE), size, TEST_LOCATION);
217 int UtcDaliModelNodeAddRemovePrimitive(void)
219 tet_infoline(" UtcDaliModelNodeAddPrimitive.");
221 ToolkitTestApplication application;
223 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
225 uint32_t expect = 0u;
227 tet_printf("Test empty primitive case\n");
229 DALI_TEST_EQUALS(expect, modelNode.GetModelPrimitiveCount(), TEST_LOCATION);
230 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(0u));
231 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
233 Scene3D::ModelPrimitive primitive1 = Scene3D::ModelPrimitive::New();
234 Scene3D::ModelPrimitive primitive2 = Scene3D::ModelPrimitive::New();
236 Scene3D::Material material = Scene3D::Material::New();
238 primitive1.SetMaterial(material);
239 primitive2.SetMaterial(material);
241 tet_printf("Test primitive appended during off scene\n");
243 modelNode.AddModelPrimitive(primitive1);
245 DALI_TEST_EQUALS(expect, modelNode.GetModelPrimitiveCount(), TEST_LOCATION);
246 DALI_TEST_CHECK(primitive1 == modelNode.GetModelPrimitive(0u));
247 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
249 tet_printf("Test primitive appended during on scene\n");
251 application.GetScene().Add(modelNode);
253 modelNode.AddModelPrimitive(primitive2);
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));
259 modelNode.RemoveModelPrimitive(primitive1);
260 DALI_TEST_CHECK(primitive2 == modelNode.GetModelPrimitive(0u));
261 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
263 modelNode.RemoveModelPrimitive(0u);
264 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(0u));
265 DALI_TEST_CHECK(!modelNode.GetModelPrimitive(1u));
267 modelNode.Unparent();
272 int UtcDaliModelNodeFindChildModelNodeByName(void)
274 tet_infoline(" UtcDaliModelNodeFindChildModelNodeByName.");
276 ToolkitTestApplication application;
278 Scene3D::ModelNode modelNode = Scene3D::ModelNode::New();
279 Scene3D::ModelNode modelNode1 = Scene3D::ModelNode::New();
280 Scene3D::ModelNode modelNode2 = Scene3D::ModelNode::New();
282 modelNode1.SetProperty(Dali::Actor::Property::NAME, "modelNode1");
283 modelNode2.SetProperty(Dali::Actor::Property::NAME, "modelNode2");
284 modelNode.Add(modelNode1);
285 modelNode.Add(modelNode2);
287 Scene3D::ModelNode child1 = modelNode.FindChildModelNodeByName("modelNode1");
288 DALI_TEST_CHECK(child1);
289 DALI_TEST_EQUALS(child1, modelNode1, TEST_LOCATION);
291 Scene3D::ModelNode child2 = modelNode.FindChildModelNodeByName("modelNode2");
292 DALI_TEST_CHECK(child2);
293 DALI_TEST_EQUALS(child2, modelNode2, TEST_LOCATION);