/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <iostream>
#include <stdlib.h>
+#include <string>
#include <dali/public-api/dali-core.h>
#include <dali-test-suite-utils.h>
END_TEST;
}
+int UtcDaliPropertyArrayAddP(void)
+{
+ Property::Array array;
+
+ DALI_TEST_CHECK( 0 == array.Size() );
+
+ array.Add( 1 );
+
+ DALI_TEST_CHECK( 1 == array.Size() );
+ DALI_TEST_CHECK( array[0].Get<int>() == 1 );
+
+ array.Add( 2 )
+ .Add( 3 )
+ .Add( 4.f );
+
+ DALI_TEST_EQUALS( 4u, array.Size(), TEST_LOCATION );
+ DALI_TEST_EQUALS( array[1].Get<int>(), 2, TEST_LOCATION );
+ DALI_TEST_EQUALS( array[2].Get<int>(), 3, TEST_LOCATION );
+ DALI_TEST_EQUALS( array[3].Get<float>(), 4.f, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+
+ END_TEST;
+}
+
int UtcDaliPropertyArrayCapacityP(void)
{
Property::Array array;
END_TEST;
}
+
+int UtcDaliPropertyArrayResize(void)
+{
+ Property::Array array;
+
+ array.Resize(3);
+ DALI_TEST_CHECK( array.Count() == 3 );
+
+ array.Resize(5);
+ DALI_TEST_CHECK( array.Count() == 5 );
+
+ END_TEST;
+}
+
+int UtcDaliPropertyArrayOstream01(void)
+{
+ std::ostringstream oss;
+
+ Property::Array array;
+ array.PushBack( 0 );
+ array.PushBack( 1 );
+ array.PushBack( 2 );
+
+ oss << array;
+ DALI_TEST_EQUALS( oss.str().compare("Array(3) = [0, 1, 2]"), 0, TEST_LOCATION );
+
+ END_TEST;
+}
+
+int UtcDaliPropertyArrayOstream02(void)
+{
+ std::ostringstream oss;
+
+ Property::Array array1;
+ array1.PushBack( 0 );
+ array1.PushBack( 1 );
+ array1.PushBack( 2 );
+
+ Property::Array array2;
+ array2.PushBack(array1);
+ array2.PushBack( 1 );
+ array2.PushBack( 2 );
+
+ oss << array2;
+ 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 );
+
+ END_TEST;
+}