diff options
author | Murray Cumming <murrayc@murrayc.com> | 2015-08-22 19:57:08 +0200 |
---|---|---|
committer | Murray Cumming <murrayc@murrayc.com> | 2015-08-22 21:34:00 +0200 |
commit | 28ccc28e940eefb89c3be4ea32a1350021fb69b0 (patch) | |
tree | dc5591c47d9fd5630ece07ef55471562b8cb760a /tests/glibmm_object_move/main.cc | |
parent | a5991b76b29979dcc68d16ef711270bb4fba12e8 (diff) | |
download | glibmm-28ccc28e940eefb89c3be4ea32a1350021fb69b0.tar.gz |
tests: Split glibmm_object_move into 2 files.
To test ObjectBase separately.
Diffstat (limited to 'tests/glibmm_object_move/main.cc')
-rw-r--r-- | tests/glibmm_object_move/main.cc | 66 |
1 files changed, 57 insertions, 9 deletions
diff --git a/tests/glibmm_object_move/main.cc b/tests/glibmm_object_move/main.cc index 3bf6ab3b..a62bcf9e 100644 --- a/tests/glibmm_object_move/main.cc +++ b/tests/glibmm_object_move/main.cc @@ -2,26 +2,47 @@ #include <iostream> #include <stdlib.h> -class Derived : Glib::Object +//A basic derived GObject, just to test Glib::ObjectBase. +typedef struct { + GObject parent; +} TestDerived; + +typedef struct { + GObjectClass parent; +} TestDerivedClass; + +#define TEST_TYPE_DERIVED (test_derived_get_type ()) +#define TEST_DERIVED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_DERIVED, TestDerived)) +#define TEST_DERIVED_CLASS(cls) (G_TYPE_CHECK_CLASS_CAST ((cls), TEST_TYPE_DERIVED, TestDerivedClass)) +#define TEST_DERIVED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_DERIVED, TestDerivedClass)) + +static void test_derived_class_init (TestDerivedClass *) +{} +static void test_derived_init (TestDerived *) +{} + +G_DEFINE_TYPE(TestDerived, test_derived, G_TYPE_OBJECT) + +class DerivedObject : public Glib::Object { public: //A real application would never make the constructor public. //It would instead have a protectd constructor and a public create() method. - Derived(int i) - : Glib::Object(), + DerivedObject(GObject* gobject, int i) + : Glib::Object(gobject), i_(i) { } - Derived(const Derived& src) = delete; - Derived& operator=(const Derived& src) = delete; + DerivedObject(const DerivedObject& src) = delete; + DerivedObject& operator=(const DerivedObject& src) = delete; - Derived(Derived&& src) + DerivedObject(DerivedObject&& src) noexcept : Glib::Object(std::move(src)), i_(std::move(src.i_)) {} - Derived& operator=(Derived&& src) + DerivedObject& operator=(DerivedObject&& src) noexcept { Glib::Object::operator=(std::move(src)); i_ = std::move(src.i_); @@ -35,14 +56,41 @@ public: static void test_object_move_constructor() { - Derived derived(5); - Derived derived2 = std::move(derived); + GObject *gobject = G_OBJECT(g_object_new(TEST_TYPE_DERIVED, nullptr)); + g_object_ref(gobject); + + DerivedObject derived(gobject, 5); + std::cout << "debug: gobj(): " << derived.gobj() << std::endl; + g_assert(derived.gobj() == gobject); + DerivedObject derived2(std::move(derived)); g_assert_cmpint(derived2.i_, ==, 5); + std::cout << "debug: gobj(): " << derived2.gobj() << std::endl; + g_assert(derived2.gobj() == gobject); } + +static +void test_object_move_assignment_operator() +{ + GObject *gobject = G_OBJECT(g_object_new(TEST_TYPE_DERIVED, nullptr)); + g_object_ref(gobject); + + DerivedObject derived(gobject, 5); + //std::cout << "debug: gobj(): " << derived.gobj() << std::endl; + g_assert(derived.gobj() == gobject); + DerivedObject derived2 = std::move(derived); + g_assert_cmpint(derived2.i_, ==, 5); + //std::cout << "debug: gobj(): " << derived2.gobj() << std::endl; + g_assert(derived2.gobj() == gobject); +} + + int main(int, char**) { + Glib::init(); + test_object_move_constructor(); + test_object_move_assignment_operator(); return EXIT_SUCCESS; } |