+ DALI_TEST_EQUALS(oss.str().compare("Array(3) = [Array(3) = [0, 1, 2], 1, 2]"), 0, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPropertyArrayCopyConstructor(void)
+{
+ Property::Array array1;
+ array1.PushBack(0);
+ array1.PushBack(1);
+ array1.PushBack(2);
+ DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
+
+ Property::Array array2(array1);
+ DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
+ DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPropertyArrayAssignmentOperator(void)
+{
+ Property::Array array1;
+ array1.PushBack(0);
+ array1.PushBack(1);
+ array1.PushBack(2);
+ DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
+
+ Property::Array array2;
+ array2.PushBack(4);
+ DALI_TEST_EQUALS(1u, array2.Size(), TEST_LOCATION);
+
+ array2 = array1;
+ DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
+ DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPropertyArrayMoveConstructor(void)
+{
+ Property::Array array1;
+ array1.PushBack(0);
+ array1.PushBack(1);
+ array1.PushBack(2);
+ DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
+
+ Property::Array array2(std::move(array1));
+ DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION);
+
+ // Calling any methods on array1 will debug assert
+ const char* exceptionMessage = "Cannot use an object previously used as an r-value";
+ DALI_TEST_ASSERTION(array1.Count(), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.PushBack(Property::Value()), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Count(), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Clear(), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Reserve(1), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Resize(1), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Capacity(), exceptionMessage);
+ DALI_TEST_ASSERTION(array1[0], exceptionMessage);
+ DALI_TEST_ASSERTION(const_cast<const Property::Array&>(array1)[0], exceptionMessage);
+ DALI_TEST_ASSERTION(Property::Array temp; array1 = temp, exceptionMessage);
+
+ END_TEST;
+}
+
+int UtcDaliPropertyArrayMoveAssignmentOperator(void)
+{
+ Property::Array array1;
+ array1.PushBack(0);
+ array1.PushBack(1);
+ array1.PushBack(2);
+ DALI_TEST_EQUALS(3u, array1.Size(), TEST_LOCATION);
+
+ Property::Array array2;
+ array2.PushBack(4);
+ DALI_TEST_EQUALS(1u, array2.Size(), TEST_LOCATION);
+
+ array2 = std::move(array1);
+ DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION);
+
+ // Calling any methods on array1 will debug assert
+ const char* exceptionMessage = "Cannot use an object previously used as an r-value";
+ DALI_TEST_ASSERTION(array1.Count(), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.PushBack(Property::Value()), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Count(), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Clear(), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Reserve(1), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Resize(1), exceptionMessage);
+ DALI_TEST_ASSERTION(array1.Capacity(), exceptionMessage);
+ DALI_TEST_ASSERTION(array1[0], exceptionMessage);
+ DALI_TEST_ASSERTION(const_cast<const Property::Array&>(array1)[0], exceptionMessage);
+ DALI_TEST_ASSERTION(Property::Array temp; array1 = temp, exceptionMessage);
+
+ // Self assignemnt
+ array2 = std::move(array2);
+ DALI_TEST_EQUALS(3u, array2.Size(), TEST_LOCATION); // still works, no debug assert
+
+ END_TEST;
+}
+
+int UtcDaliPropertyArrayInitializerListConstructor(void)
+{
+ Property::Array array{1, 2, "hello"};
+ DALI_TEST_EQUALS(3u, array.Size(), TEST_LOCATION);
+ DALI_TEST_EQUALS(Property::INTEGER, array.GetElementAt(0).GetType(), TEST_LOCATION);
+ DALI_TEST_EQUALS(Property::INTEGER, array.GetElementAt(1).GetType(), TEST_LOCATION);
+ DALI_TEST_EQUALS(Property::STRING, array.GetElementAt(2).GetType(), TEST_LOCATION);