summaryrefslogtreecommitdiff
path: root/tests/glibmm_object_move/main.cc
diff options
context:
space:
mode:
authorMurray Cumming <murrayc@murrayc.com>2015-08-22 19:57:08 +0200
committerMurray Cumming <murrayc@murrayc.com>2015-08-22 21:34:00 +0200
commit28ccc28e940eefb89c3be4ea32a1350021fb69b0 (patch)
treedc5591c47d9fd5630ece07ef55471562b8cb760a /tests/glibmm_object_move/main.cc
parenta5991b76b29979dcc68d16ef711270bb4fba12e8 (diff)
downloadglibmm-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.cc66
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;
}