aboutsummaryrefslogtreecommitdiffstats
path: root/tests/utility/smartPtrTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/utility/smartPtrTest.cpp')
-rw-r--r--tests/utility/smartPtrTest.cpp345
1 files changed, 164 insertions, 181 deletions
diff --git a/tests/utility/smartPtrTest.cpp b/tests/utility/smartPtrTest.cpp
index 9a7eb539..35824f42 100644
--- a/tests/utility/smartPtrTest.cpp
+++ b/tests/utility/smartPtrTest.cpp
@@ -17,242 +17,225 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
-#include "../lib/unit++/unit++.h"
-
-#include <iostream>
-#include <ostream>
-#include <vector>
-
-#include "vmime/vmime.hpp"
-#include "vmime/platforms/posix/posixHandler.hpp"
+#include "tests/testUtils.hpp"
#include "vmime/utility/smartPtr.hpp"
-using namespace unitpp;
+#define VMIME_TEST_SUITE smartPtrTest
+#define VMIME_TEST_SUITE_MODULE "Utility"
-namespace
-{
- class smartPtrTest : public suite
- {
- struct A : public vmime::object
- {
- const int strongCount() const { return getStrongRefCount(); }
- const int weakCount() const { return getWeakRefCount(); }
- };
- struct B : public virtual A { };
- struct C : public virtual A { };
- struct D : public B, public C { };
+VMIME_TEST_SUITE_BEGIN
- class R : public A
- {
- public:
+ VMIME_TEST_LIST_BEGIN
+ VMIME_TEST(testNull)
+ VMIME_TEST(testRefCounting)
+ VMIME_TEST(testWeakRef)
+ VMIME_TEST(testCast)
+ VMIME_TEST(testContainer)
+ VMIME_TEST(testCompare)
+ VMIME_TEST_LIST_END
- R(bool* aliveFlag) : m_aliveFlag(aliveFlag) { *m_aliveFlag = true; }
- ~R() { *m_aliveFlag = false; }
- private:
-
- bool* m_aliveFlag;
- };
+ struct A : public vmime::object
+ {
+ const int strongCount() const { return getStrongRefCount(); }
+ const int weakCount() const { return getWeakRefCount(); }
+ };
+ struct B : public virtual A { };
+ struct C : public virtual A { };
+ struct D : public B, public C { };
- void testNull()
- {
- vmime::ref <A> r1;
-
- assert_true("1", r1 == NULL);
- assert_true("2", r1 == 0);
- assert_true("3", NULL == r1);
- assert_true("4", 0 == r1);
- assert_true("5", !r1);
- assert_true("6", r1 == vmime::null);
- assert_true("7", vmime::null == r1);
- assert_eq("8", static_cast <A*>(0), r1.get());
- }
+ class R : public A
+ {
+ public:
- void testRefCounting()
- {
- bool o1_alive;
- vmime::ref <R> r1 = vmime::create <R>(&o1_alive);
+ R(bool* aliveFlag) : m_aliveFlag(aliveFlag) { *m_aliveFlag = true; }
+ ~R() { *m_aliveFlag = false; }
- assert_true("1", r1.get() != 0);
- assert_true("2", o1_alive);
- assert_eq("3", 1, r1->strongCount());
- assert_eq("4", 0, r1->weakCount());
+ private:
- vmime::ref <R> r2 = r1;
+ bool* m_aliveFlag;
+ };
- assert_true("5", o1_alive);
- assert_eq("6", 2, r1->strongCount());
- assert_eq("7", 0, r1->weakCount());
- bool o2_alive;
- vmime::ref <R> r3 = vmime::create <R>(&o2_alive);
+ void testNull()
+ {
+ vmime::ref <A> r1;
+
+ VASSERT("1", r1 == NULL);
+ VASSERT("2", r1 == 0);
+ VASSERT("3", NULL == r1);
+ VASSERT("4", 0 == r1);
+ VASSERT("5", !r1);
+ VASSERT("6", r1 == vmime::null);
+ VASSERT("7", vmime::null == r1);
+ VASSERT_EQ("8", static_cast <A*>(0), r1.get());
+ }
+
+ void testRefCounting()
+ {
+ bool o1_alive;
+ vmime::ref <R> r1 = vmime::create <R>(&o1_alive);
- r2 = r3;
+ VASSERT("1", r1.get() != 0);
+ VASSERT("2", o1_alive);
+ VASSERT_EQ("3", 1, r1->strongCount());
+ VASSERT_EQ("4", 0, r1->weakCount());
- assert_true("8", o1_alive);
- assert_true("9", o2_alive);
- assert_eq("10", 1, r1->strongCount());
- assert_eq("11", 2, r2->strongCount());
- assert_eq("12", 2, r3->strongCount());
+ vmime::ref <R> r2 = r1;
- {
- vmime::ref <R> r4;
+ VASSERT("5", o1_alive);
+ VASSERT_EQ("6", 2, r1->strongCount());
+ VASSERT_EQ("7", 0, r1->weakCount());
- r4 = r1;
+ bool o2_alive;
+ vmime::ref <R> r3 = vmime::create <R>(&o2_alive);
- assert_true("13", o1_alive);
- assert_true("14", o2_alive);
- assert_eq("15", 2, r4->strongCount());
- assert_eq("16", 2, r1->strongCount());
+ r2 = r3;
- r1 = NULL;
+ VASSERT("8", o1_alive);
+ VASSERT("9", o2_alive);
+ VASSERT_EQ("10", 1, r1->strongCount());
+ VASSERT_EQ("11", 2, r2->strongCount());
+ VASSERT_EQ("12", 2, r3->strongCount());
- assert_true("17", o1_alive);
- assert_true("18", o2_alive);
- assert_eq("19", 1, r4->strongCount());
+ {
+ vmime::ref <R> r4;
- // Here, object1 will be deleted
- }
+ r4 = r1;
- assert_true("20", !o1_alive);
- assert_true("21", o2_alive);
+ VASSERT("13", o1_alive);
+ VASSERT("14", o2_alive);
+ VASSERT_EQ("15", 2, r4->strongCount());
+ VASSERT_EQ("16", 2, r1->strongCount());
- {
- vmime::weak_ref <R> w1 = r3;
+ r1 = NULL;
- assert_eq("22", 1, r3->weakCount());
- }
+ VASSERT("17", o1_alive);
+ VASSERT("18", o2_alive);
+ VASSERT_EQ("19", 1, r4->strongCount());
- assert_true("23", o2_alive);
- assert_eq("24", 2, r3->strongCount());
- assert_eq("25", 0, r3->weakCount());
+ // Here, object1 will be deleted
}
- void testWeakRef()
- {
- vmime::ref <A> r1 = vmime::create <A>();
- vmime::weak_ref <A> w1 = r1;
+ VASSERT("20", !o1_alive);
+ VASSERT("21", o2_alive);
- assert_true("1", r1.get() != 0);
- assert_true("2", r1.get() == w1.get());
-
- {
- vmime::ref <A> r2 = r1;
+ {
+ vmime::weak_ref <R> w1 = r3;
- assert_true("3", r1.get() == r2.get());
- assert_true("4", r1.get() == w1.get());
- }
+ VASSERT_EQ("22", 1, r3->weakCount());
+ }
- assert_true("5", r1.get() != 0);
- assert_true("6", r1.get() == w1.get());
+ VASSERT("23", o2_alive);
+ VASSERT_EQ("24", 2, r3->strongCount());
+ VASSERT_EQ("25", 0, r3->weakCount());
+ }
- r1 = 0;
+ void testWeakRef()
+ {
+ vmime::ref <A> r1 = vmime::create <A>();
+ vmime::weak_ref <A> w1 = r1;
- assert_true("7", w1.get() == 0);
- }
+ VASSERT("1", r1.get() != 0);
+ VASSERT("2", r1.get() == w1.get());
- void testCast()
{
- // Explicit upcast
- vmime::ref <A> r1 = vmime::create <C>();
- vmime::ref <C> r2 = r1.dynamicCast <C>();
+ vmime::ref <A> r2 = r1;
- assert_true("1", r2.get() == dynamic_cast <C*>(r1.get()));
- assert_true("2", 0 == r1.dynamicCast <B>().get());
-
- // Implicit downcast
- vmime::ref <D> r3 = vmime::create <D>();
- vmime::ref <A> r4 = r3;
-
- assert_true("3", r4.get() == dynamic_cast <A*>(r3.get()));
+ VASSERT("3", r1.get() == r2.get());
+ VASSERT("4", r1.get() == w1.get());
}
- void testContainer()
- {
- bool o1_alive;
- vmime::ref <R> r1 = vmime::create <R>(&o1_alive);
+ VASSERT("5", r1.get() != 0);
+ VASSERT("6", r1.get() == w1.get());
- bool o2_alive;
- vmime::ref <R> r2 = vmime::create <R>(&o2_alive);
+ r1 = 0;
- std::vector <vmime::ref <R> > v1;
- v1.push_back(r1);
- v1.push_back(r2);
+ VASSERT("7", w1.get() == 0);
+ }
- assert_true("1", o1_alive);
- assert_eq("2", 2, r1->strongCount());
- assert_true("3", o2_alive);
- assert_eq("4", 2, r2->strongCount());
+ void testCast()
+ {
+ // Explicit upcast
+ vmime::ref <A> r1 = vmime::create <C>();
+ vmime::ref <C> r2 = r1.dynamicCast <C>();
- {
- std::vector <vmime::ref <R> > v2 = v1;
+ VASSERT("1", r2.get() == dynamic_cast <C*>(r1.get()));
+ VASSERT("2", 0 == r1.dynamicCast <B>().get());
- assert_true("5", o1_alive);
- assert_eq("6", 3, r1->strongCount());
- assert_true("7", o2_alive);
- assert_eq("8", 3, r2->strongCount());
+ // Implicit downcast
+ vmime::ref <D> r3 = vmime::create <D>();
+ vmime::ref <A> r4 = r3;
- v2[1] = NULL;
+ VASSERT("3", r4.get() == dynamic_cast <A*>(r3.get()));
+ }
- assert_true("9", o1_alive);
- assert_eq("10", 3, r1->strongCount());
- assert_true("11", o2_alive);
- assert_eq("12", 2, r2->strongCount());
- }
+ void testContainer()
+ {
+ bool o1_alive;
+ vmime::ref <R> r1 = vmime::create <R>(&o1_alive);
- assert_true("13", o1_alive);
- assert_eq("14", 2, r1->strongCount());
- assert_true("15", o2_alive);
- assert_eq("16", 2, r2->strongCount());
- }
+ bool o2_alive;
+ vmime::ref <R> r2 = vmime::create <R>(&o2_alive);
- void testCompare()
- {
- vmime::ref <A> r1 = vmime::create <A>();
- vmime::ref <A> r2 = vmime::create <B>();
- vmime::ref <A> r3 = vmime::create <C>();
- vmime::ref <A> r4 = r1;
-
- assert_true("1", r1 != r2);
- assert_true("2", r1.get() == r1);
- assert_true("3", r1 == r1.get());
- assert_true("4", r2 != r1.get());
- assert_true("5", r1.get() != r2);
- assert_true("6", r1 == r4);
- assert_true("7", r1.get() == r4);
-
- std::vector <vmime::ref <A> > v;
- v.push_back(r1);
- v.push_back(r2);
-
- assert_true("8", std::find(v.begin(), v.end(), r1) == v.begin());
- assert_true("9", std::find(v.begin(), v.end(), r2) == v.begin() + 1);
- assert_true("10", std::find(v.begin(), v.end(), r3) == v.end());
- }
+ std::vector <vmime::ref <R> > v1;
+ v1.push_back(r1);
+ v1.push_back(r2);
- public:
+ VASSERT("1", o1_alive);
+ VASSERT_EQ("2", 2, r1->strongCount());
+ VASSERT("3", o2_alive);
+ VASSERT_EQ("4", 2, r2->strongCount());
- smartPtrTest() : suite("vmime::utility::url")
{
- // VMime initialization
- vmime::platformDependant::setHandler<vmime::platforms::posix::posixHandler>();
+ std::vector <vmime::ref <R> > v2 = v1;
+
+ VASSERT("5", o1_alive);
+ VASSERT_EQ("6", 3, r1->strongCount());
+ VASSERT("7", o2_alive);
+ VASSERT_EQ("8", 3, r2->strongCount());
- add("Null", testcase(this, "TestNull", &smartPtrTest::testNull));
- add("RefCounting", testcase(this, "TestRefCounting", &smartPtrTest::testRefCounting));
- add("WeakRef", testcase(this, "TestWeakRef", &smartPtrTest::testWeakRef));
- add("Cast", testcase(this, "TestCast", &smartPtrTest::testCast));
- add("Container", testcase(this, "TestContainer", &smartPtrTest::testContainer));
- add("Compare", testcase(this, "TestCompare", &smartPtrTest::testCompare));
+ v2[1] = NULL;
- suite::main().add("vmime::utility::smartPtr", this);
+ VASSERT("9", o1_alive);
+ VASSERT_EQ("10", 3, r1->strongCount());
+ VASSERT("11", o2_alive);
+ VASSERT_EQ("12", 2, r2->strongCount());
}
- };
+ VASSERT("13", o1_alive);
+ VASSERT_EQ("14", 2, r1->strongCount());
+ VASSERT("15", o2_alive);
+ VASSERT_EQ("16", 2, r2->strongCount());
+ }
- smartPtrTest* theTest = new smartPtrTest();
-}
+ void testCompare()
+ {
+ vmime::ref <A> r1 = vmime::create <A>();
+ vmime::ref <A> r2 = vmime::create <B>();
+ vmime::ref <A> r3 = vmime::create <C>();
+ vmime::ref <A> r4 = r1;
+
+ VASSERT("1", r1 != r2);
+ VASSERT("2", r1.get() == r1);
+ VASSERT("3", r1 == r1.get());
+ VASSERT("4", r2 != r1.get());
+ VASSERT("5", r1.get() != r2);
+ VASSERT("6", r1 == r4);
+ VASSERT("7", r1.get() == r4);
+
+ std::vector <vmime::ref <A> > v;
+ v.push_back(r1);
+ v.push_back(r2);
+
+ VASSERT("8", std::find(v.begin(), v.end(), r1) == v.begin());
+ VASSERT("9", std::find(v.begin(), v.end(), r2) == v.begin() + 1);
+ VASSERT("10", std::find(v.begin(), v.end(), r3) == v.end());
+ }
+
+VMIME_TEST_SUITE_END