2 * Copyright (c) 2020 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-test-suite-utils.h>
19 #include <dali/public-api/dali-core.h>
27 void utc_dali_property_array_startup(void)
29 test_return_value = TET_UNDEF;
32 void utc_dali_property_array_cleanup(void)
34 test_return_value = TET_PASS;
37 int UtcDaliPropertyArrayPushBackP(void)
39 Property::Array array;
41 DALI_TEST_CHECK(0 == array.Size());
45 DALI_TEST_CHECK(1 == array.Size());
47 DALI_TEST_CHECK(array[0].Get<int>() == 1);
52 int UtcDaliPropertyArrayAddP(void)
54 Property::Array array;
56 DALI_TEST_CHECK(0 == array.Size());
60 DALI_TEST_CHECK(1 == array.Size());
61 DALI_TEST_CHECK(array[0].Get<int>() == 1);
67 DALI_TEST_EQUALS(4u, array.Size(), TEST_LOCATION);
68 DALI_TEST_EQUALS(array[1].Get<int>(), 2, TEST_LOCATION);
69 DALI_TEST_EQUALS(array[2].Get<int>(), 3, TEST_LOCATION);
70 DALI_TEST_EQUALS(array[3].Get<float>(), 4.f, Math::MACHINE_EPSILON_1, TEST_LOCATION);
75 int UtcDaliPropertyArrayCapacityP(void)
77 Property::Array array;
78 DALI_TEST_CHECK(array.Empty());
82 DALI_TEST_CHECK(3 == array.Capacity());
86 int UtcDaliPropertyArrayReserveP(void)
88 Property::Array array;
89 DALI_TEST_CHECK(array.Empty());
93 DALI_TEST_CHECK(3 == array.Capacity());
94 DALI_TEST_CHECK(0 == array.Size());
97 array.PushBack("world");
102 int UtcDaliPropertyArraySizeP(void)
104 Property::Array array;
105 DALI_TEST_CHECK(0 == array.Capacity());
106 DALI_TEST_CHECK(0 == array.Size());
110 DALI_TEST_CHECK(3 == array.Capacity());
111 DALI_TEST_CHECK(0 == array.Size());
114 array.PushBack("world");
117 DALI_TEST_CHECK(3 == array.Size());
122 int UtcDaliPropertyArrayCountP(void)
124 Property::Array array;
125 DALI_TEST_CHECK(0 == array.Capacity());
126 DALI_TEST_CHECK(0 == array.Count());
130 DALI_TEST_CHECK(3 == array.Capacity());
131 DALI_TEST_CHECK(0 == array.Count());
134 array.PushBack("world");
137 DALI_TEST_CHECK(3 == array.Count());
142 int UtcDaliPropertyArrayEmptyP(void)
144 Property::Array array;
145 DALI_TEST_CHECK(array.Empty());
149 DALI_TEST_CHECK(array.Empty());
152 array.PushBack("world");
155 DALI_TEST_CHECK(!array.Empty());
160 int UtcDaliPropertyArrayClearP(void)
162 Property::Array array;
163 DALI_TEST_CHECK(array.Empty());
167 DALI_TEST_CHECK(array.Empty());
170 array.PushBack("world");
173 DALI_TEST_CHECK(!array.Empty());
177 DALI_TEST_CHECK(array.Empty());
182 int UtcDaliPropertyArrayIndexOperatorP(void)
184 Property::Array array;
188 array.PushBack("world");
191 DALI_TEST_CHECK(array[0].Get<int>() == 1);
192 DALI_TEST_CHECK(array[1].Get<std::string>() == "world");
193 DALI_TEST_CHECK(array[2].Get<int>() == 3);
198 int UtcDaliPropertyArrayConstIndexOperatorP(void)
200 Property::Array anArray;
204 anArray.PushBack("world");
207 const Property::Array array(anArray);
209 DALI_TEST_CHECK(array[0].Get<int>() == 1);
210 DALI_TEST_CHECK(array[1].Get<std::string>() == "world");
211 DALI_TEST_CHECK(array[2].Get<int>() == 3);
216 int UtcDaliPropertyArrayAssignmentOperatorP(void)
218 Property::Array anArray;
222 anArray.PushBack("world");
225 Property::Array array = anArray;
227 DALI_TEST_CHECK(array[0].Get<int>() == 1);
228 DALI_TEST_CHECK(array[1].Get<std::string>() == "world");
229 DALI_TEST_CHECK(array[2].Get<int>() == 3);
234 int UtcDaliPropertyArrayResize(void)
236 Property::Array array;
239 DALI_TEST_CHECK(array.Count() == 3);
242 DALI_TEST_CHECK(array.Count() == 5);
247 int UtcDaliPropertyArrayOstream01(void)
249 std::ostringstream oss;
251 Property::Array array;
257 DALI_TEST_EQUALS(oss.str().compare("Array(3) = [0, 1, 2]"), 0, TEST_LOCATION);
262 int UtcDaliPropertyArrayOstream02(void)
264 std::ostringstream oss;
266 Property::Array array1;
271 Property::Array array2;
272 array2.PushBack(array1);
277 DALI_TEST_EQUALS(oss.str().compare("Array(3) = [Array(3) = [0, 1, 2], 1, 2]"), 0, TEST_LOCATION);
282 int UtcDaliPropertyArrayCopyConstructor(void)
284 Property::Array array1;
288 DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
290 Property::Array array2(array1);
291 DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
292 DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION);
297 int UtcDaliPropertyArrayAssignmentOperator(void)
299 Property::Array array1;
303 DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
305 Property::Array array2;
307 DALI_TEST_EQUALS(1u, array2.Size(), TEST_LOCATION);
310 DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
311 DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION);
316 int UtcDaliPropertyArrayMoveConstructor(void)
318 Property::Array array1;
322 DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
324 Property::Array array2(std::move(array1));
325 DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION);
327 // Calling any methods on array1 will debug assert
328 const char* exceptionMessage = "Cannot use an object previously used as an r-value";
329 DALI_TEST_ASSERTION(array1.Count(), exceptionMessage);
330 DALI_TEST_ASSERTION(array1.PushBack(Property::Value()), exceptionMessage);
331 DALI_TEST_ASSERTION(array1.Count(), exceptionMessage);
332 DALI_TEST_ASSERTION(array1.Clear(), exceptionMessage);
333 DALI_TEST_ASSERTION(array1.Reserve(1), exceptionMessage);
334 DALI_TEST_ASSERTION(array1.Resize(1), exceptionMessage);
335 DALI_TEST_ASSERTION(array1.Capacity(), exceptionMessage);
336 DALI_TEST_ASSERTION(array1[0], exceptionMessage);
337 DALI_TEST_ASSERTION(const_cast<const Property::Array&>(array1)[0], exceptionMessage);
338 DALI_TEST_ASSERTION(Property::Array temp; array1 = temp, exceptionMessage);
343 int UtcDaliPropertyArrayMoveAssignmentOperator(void)
345 Property::Array array1;
349 DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
351 Property::Array array2;
353 DALI_TEST_EQUALS(1u, array2.Size(), TEST_LOCATION);
355 array2 = std::move(array1);
356 DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION);
358 // Calling any methods on array1 will debug assert
359 const char* exceptionMessage = "Cannot use an object previously used as an r-value";
360 DALI_TEST_ASSERTION(array1.Count(), exceptionMessage);
361 DALI_TEST_ASSERTION(array1.PushBack(Property::Value()), exceptionMessage);
362 DALI_TEST_ASSERTION(array1.Count(), exceptionMessage);
363 DALI_TEST_ASSERTION(array1.Clear(), exceptionMessage);
364 DALI_TEST_ASSERTION(array1.Reserve(1), exceptionMessage);
365 DALI_TEST_ASSERTION(array1.Resize(1), exceptionMessage);
366 DALI_TEST_ASSERTION(array1.Capacity(), exceptionMessage);
367 DALI_TEST_ASSERTION(array1[0], exceptionMessage);
368 DALI_TEST_ASSERTION(const_cast<const Property::Array&>(array1)[0], exceptionMessage);
369 DALI_TEST_ASSERTION(Property::Array temp; array1 = temp, exceptionMessage);
372 array2 = std::move(array2);
373 DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION); // still works, no debug assert
378 int UtcDaliPropertyArrayInitializerListConstructor(void)
380 Property::Array array{1, 2, "hello"};
381 DALI_TEST_EQUALS(3u, array.Size(), TEST_LOCATION);
382 DALI_TEST_EQUALS(Property::INTEGER, array.GetElementAt(0).GetType(), TEST_LOCATION);
383 DALI_TEST_EQUALS(Property::INTEGER, array.GetElementAt(1).GetType(), TEST_LOCATION);
384 DALI_TEST_EQUALS(Property::STRING, array.GetElementAt(2).GetType(), TEST_LOCATION);