[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-scene3d / utc-Dali-BlendShapeIndex.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-motion/motion-index/blend-shape-index.h>
24 #include <dali-scene3d/public-api/model-motion/motion-index/motion-index.h>
25
26 using namespace Dali;
27 using namespace Dali::Toolkit;
28 using namespace Dali::Scene3D;
29
30 void model_motion_blend_shape_index_startup(void)
31 {
32   test_return_value = TET_UNDEF;
33 }
34
35 void model_motion_blend_shape_index_cleanup(void)
36 {
37   test_return_value = TET_PASS;
38 }
39
40 namespace
41 {
42 const char* const WEIGHTS_UNIFORM = "uBlendShapeWeight";
43
44 std::string GetPropertyNameFromIndex(int index)
45 {
46   if(index >= 0)
47   {
48     char weightNameBuffer[32];
49
50     // Get return value of snprintf to avoid SVACE.
51     [[maybe_unused]] auto prefixSize = snprintf(weightNameBuffer, sizeof(weightNameBuffer), "%s[%d]", WEIGHTS_UNIFORM, index);
52
53     return weightNameBuffer;
54   }
55   return "";
56 }
57 } // namespace
58
59 // Positive test case for a method
60 int UtcDaliBlendShapeIndexNew(void)
61 {
62   ToolkitTestApplication application;
63   tet_infoline(" UtcDaliBlendShapeIndexNew");
64
65   BlendShapeIndex blendShapeIndex = BlendShapeIndex::New();
66   DALI_TEST_CHECK(blendShapeIndex);
67   DALI_TEST_EQUALS(blendShapeIndex.GetModelNodeId().stringKey, "", TEST_LOCATION);
68   DALI_TEST_EQUALS(blendShapeIndex.GetBlendShapeId().indexKey, Property::INVALID_INDEX, TEST_LOCATION);
69
70   blendShapeIndex = BlendShapeIndex::New("dummy", 3u);
71   DALI_TEST_CHECK(blendShapeIndex);
72   DALI_TEST_EQUALS(blendShapeIndex.GetModelNodeId().stringKey, "dummy", TEST_LOCATION);
73   DALI_TEST_EQUALS(blendShapeIndex.GetBlendShapeId().indexKey, 3u, TEST_LOCATION);
74   END_TEST;
75 }
76
77 // Positive test case for a method
78 int UtcDaliBlendShapeIndexDownCast(void)
79 {
80   ToolkitTestApplication application;
81   tet_infoline(" UtcDaliBlendShapeIndexDownCast");
82
83   BlendShapeIndex blendShapeIndex = BlendShapeIndex::New();
84   BaseHandle      handle(blendShapeIndex);
85
86   BlendShapeIndex blendShapeIndex2 = BlendShapeIndex::DownCast(handle);
87   DALI_TEST_CHECK(blendShapeIndex);
88   DALI_TEST_CHECK(blendShapeIndex2);
89   DALI_TEST_CHECK(blendShapeIndex2 == blendShapeIndex);
90   END_TEST;
91 }
92
93 int UtcDaliBlendShapeIndexTypeRegistry(void)
94 {
95   ToolkitTestApplication application;
96
97   TypeRegistry typeRegistry = TypeRegistry::Get();
98   DALI_TEST_CHECK(typeRegistry);
99
100   TypeInfo typeInfo = typeRegistry.GetTypeInfo("BlendShapeIndex");
101   DALI_TEST_CHECK(typeInfo);
102
103   BaseHandle handle = typeInfo.CreateInstance();
104   DALI_TEST_CHECK(handle);
105
106   BlendShapeIndex blendShapeIndex = BlendShapeIndex::DownCast(handle);
107   DALI_TEST_CHECK(blendShapeIndex);
108
109   END_TEST;
110 }
111
112 int UtcDaliBlendShapeIndexCopyAndAssignment(void)
113 {
114   ToolkitTestApplication application;
115
116   BlendShapeIndex blendShapeIndex = BlendShapeIndex::New();
117   DALI_TEST_CHECK(blendShapeIndex);
118
119   BlendShapeIndex copy(blendShapeIndex);
120   DALI_TEST_CHECK(blendShapeIndex == copy);
121
122   BlendShapeIndex assign;
123   DALI_TEST_CHECK(!assign);
124
125   assign = copy;
126   DALI_TEST_CHECK(assign == blendShapeIndex);
127
128   END_TEST;
129 }
130
131 int UtcDaliBlendShapeIndexMoveConstructor(void)
132 {
133   ToolkitTestApplication application;
134
135   BlendShapeIndex blendShapeIndex = BlendShapeIndex::New();
136   DALI_TEST_EQUALS(1, blendShapeIndex.GetBaseObject().ReferenceCount(), TEST_LOCATION);
137
138   BlendShapeIndex moved = std::move(blendShapeIndex);
139   DALI_TEST_CHECK(moved);
140   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
141   DALI_TEST_CHECK(!blendShapeIndex);
142
143   END_TEST;
144 }
145
146 int UtcDaliBlendShapeIndexMoveAssignment(void)
147 {
148   ToolkitTestApplication application;
149
150   BlendShapeIndex blendShapeIndex = BlendShapeIndex::New();
151   DALI_TEST_EQUALS(1, blendShapeIndex.GetBaseObject().ReferenceCount(), TEST_LOCATION);
152
153   BlendShapeIndex moved;
154   moved = std::move(blendShapeIndex);
155   DALI_TEST_CHECK(moved);
156   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
157
158   END_TEST;
159 }
160
161 // Method test
162
163 int UtcDaliBlendShapeIndexGetPropertyName(void)
164 {
165   std::string     expectPropertyName  = "";
166   Property::Index expectPropertyIndex = Property::INVALID_INDEX;
167
168   uint32_t blendShapeIndex;
169
170   MotionIndex index = BlendShapeIndex::New();
171
172   // Invalid motion index return empty string, invalid index
173   DALI_TEST_EQUALS(expectPropertyName, index.GetPropertyName(), TEST_LOCATION);
174   DALI_TEST_EQUALS(expectPropertyIndex, index.GetPropertyIndex(), TEST_LOCATION);
175
176   blendShapeIndex    = 0u;
177   index              = BlendShapeIndex::New("", blendShapeIndex);
178   expectPropertyName = GetPropertyNameFromIndex(blendShapeIndex);
179   DALI_TEST_EQUALS(expectPropertyName, index.GetPropertyName(), TEST_LOCATION);
180
181   blendShapeIndex    = 45u;
182   index              = BlendShapeIndex::New("", blendShapeIndex);
183   expectPropertyName = GetPropertyNameFromIndex(blendShapeIndex);
184   DALI_TEST_EQUALS(expectPropertyName, index.GetPropertyName(), TEST_LOCATION);
185
186   blendShapeIndex    = 109u;
187   index              = BlendShapeIndex::New("", blendShapeIndex);
188   expectPropertyName = GetPropertyNameFromIndex(blendShapeIndex);
189   DALI_TEST_EQUALS(expectPropertyName, index.GetPropertyName(), TEST_LOCATION);
190
191   END_TEST;
192 }
193
194 int UtcDaliBlendShapeIndexSetGetBlendShapeId(void)
195 {
196   Property::Index expectPropertyIndex = 0u;
197
198   BlendShapeIndex index = BlendShapeIndex::New("", expectPropertyIndex);
199
200   // Invalid motion index return empty string, invalid index
201   DALI_TEST_CHECK(index.GetBlendShapeId().type == Property::Key::Type::INDEX);
202   DALI_TEST_EQUALS(expectPropertyIndex, index.GetBlendShapeId().indexKey, TEST_LOCATION);
203
204   std::string expectPropertyName = "hello";
205   index.SetBlendShapeId(expectPropertyName);
206   DALI_TEST_CHECK(index.GetBlendShapeId().type == Property::Key::Type::STRING);
207   DALI_TEST_EQUALS(expectPropertyName, index.GetBlendShapeId().stringKey, TEST_LOCATION);
208
209   expectPropertyIndex = 100u;
210   index.SetBlendShapeId(expectPropertyIndex);
211   DALI_TEST_CHECK(index.GetBlendShapeId().type == Property::Key::Type::INDEX);
212   DALI_TEST_EQUALS(expectPropertyIndex, index.GetBlendShapeId().indexKey, TEST_LOCATION);
213
214   END_TEST;
215 }