Merge branch 'devel/tizen' into tizen
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-IntrusivePtr.cpp
index af67735..ff22fb7 100644 (file)
@@ -73,7 +73,33 @@ public:
     ++g_destructionCountUnrelated;
   }
 };
-}
+
+class TestObject : public RefObject
+{
+public:
+  TestObject()
+  : data(201)
+  {
+  }
+
+  TestObject(const TestObject& testObject)
+  : RefObject(testObject),
+    data(testObject.data)
+  {
+  }
+
+  TestObject& Assign(const TestObject& testObject)
+  {
+    RefObject::operator=(testObject);
+    data = testObject.data;
+    return *this;
+  }
+
+  int data;
+};
+
+
+} // Anonymous namespace
 
 /**
  * Test that a default constructed pointer is null and harmless.
@@ -340,6 +366,8 @@ int UtcDaliIntrusivePtrResetTN(void)
   END_TEST;
 }
 
+
+
 int UtcDaliIntrusivePtrOperatorBooleanTypeP(void)
 {
   tet_infoline( "Positive Test for Dali::IntrusivePtr::operator Booleantype()" );
@@ -347,6 +375,11 @@ int UtcDaliIntrusivePtrOperatorBooleanTypeP(void)
   IntrusivePtr<Counted> counted( new Counted );
   DALI_TEST_CHECK( counted.operator BooleanType() != 0 );
   DALI_TEST_CHECK( counted );
+
+  typedef void (IntrusivePtr<Counted>::*BoolIdiomFunc)() const;
+  BoolIdiomFunc func = static_cast<BoolIdiomFunc>( counted.operator BooleanType() );
+  ((counted).*func)(); // purely for test coverage
+
   counted.Reset();
   DALI_TEST_CHECK( counted.operator BooleanType() == 0 );
 
@@ -453,28 +486,48 @@ int UtcDaliIntrusivePtrOperatorNotEqualLeftPointerTU(void)
   END_TEST;
 }
 
+int UtcDaliRefObjectCopyConstructor(void)
+{
+  tet_infoline("Test for Dali::RefObject(const RefObject&)");
 
+  {
+    IntrusivePtr<TestObject> testPtr( new TestObject );
+    DALI_TEST_EQUALS( testPtr->ReferenceCount(), 1, TEST_LOCATION );
+
+    const TestObject& testObject=*testPtr.Get();
+    {
+      IntrusivePtr<TestObject> testPtr2( new TestObject(testObject) );
+      DALI_TEST_EQUALS( testPtr2->ReferenceCount(), 1, TEST_LOCATION );
+    }
+    DALI_TEST_EQUALS( testPtr->ReferenceCount(), 1, TEST_LOCATION );
+  }
+  END_TEST;
+}
 
 
+int UtcDaliRefObjectAssignmentOperator(void)
+{
+  tet_infoline("Test for Dali::RefObject::operator=(const RefObject&)");
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+  {
+    IntrusivePtr<TestObject> testPtr( new TestObject );
+    DALI_TEST_EQUALS( testPtr->ReferenceCount(), 1, TEST_LOCATION );
+
+    const TestObject& testObject=*testPtr.Get();
+    {
+      IntrusivePtr<TestObject> testPtr2( new TestObject() );
+      testPtr->data = 33;
+      IntrusivePtr<TestObject> testPtr3 = testPtr2;
+      DALI_TEST_EQUALS( testPtr2->ReferenceCount(), 2, TEST_LOCATION );
+      DALI_TEST_EQUALS( testPtr2->data, 201, TEST_LOCATION );
+
+      TestObject& testObject2 = *testPtr2.Get();
+      testObject2 = testObject;
+
+      DALI_TEST_EQUALS( testPtr->ReferenceCount(), 1, TEST_LOCATION );
+      DALI_TEST_EQUALS( testPtr2->ReferenceCount(), 2, TEST_LOCATION );
+    }
+    DALI_TEST_EQUALS( testPtr->ReferenceCount(), 1, TEST_LOCATION );
+  }
+  END_TEST;
+}