From 31f9249528ca7aa130b7a5b1d66f7f5a8dc859fa Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Mon, 29 Jul 2019 13:45:21 +0100 Subject: [PATCH] tests: Add a test for g_assert_finalize_object() A simple test just to double-check it works. See #488. Signed-off-by: Philip Withnall Helps: #488 --- gobject/tests/meson.build | 1 + gobject/tests/testing.c | 71 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 gobject/tests/testing.c diff --git a/gobject/tests/meson.build b/gobject/tests/meson.build index 9c6a6e034..1d0ef4a53 100644 --- a/gobject/tests/meson.build +++ b/gobject/tests/meson.build @@ -50,6 +50,7 @@ gobject_tests = { 'signals' : { 'source' : ['signals.c', marshalers_h, marshalers_c], }, + 'testing' : {}, } if cc.get_id() != 'msvc' diff --git a/gobject/tests/testing.c b/gobject/tests/testing.c new file mode 100644 index 000000000..5c7e663bf --- /dev/null +++ b/gobject/tests/testing.c @@ -0,0 +1,71 @@ +/* GLib testing framework examples and tests + * + * Copyright © 2019 Endless Mobile, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see . + * + * Author: Philip Withnall + */ + +#include "config.h" + +/* We want to distinguish between messages originating from libglib + * and messages originating from this program. + */ +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "testing" + +#include +#include +#include +#include + +static void +test_assert_finalize_object_subprocess_bad (void) +{ + GObject *obj = g_object_new (G_TYPE_OBJECT, NULL); + g_object_ref (obj); + + /* This should emit an assertion failure. */ + g_assert_finalize_object (obj); + + g_object_unref (obj); + + exit (0); +} + +static void +test_assert_finalize_object (void) +{ + GObject *obj = g_object_new (G_TYPE_OBJECT, NULL); + + g_assert_finalize_object (obj); + + g_test_trap_subprocess ("/assert/finalize_object/subprocess/bad", 0, 0); + g_test_trap_assert_failed (); + g_test_trap_assert_stderr ("*g_assert_finalize_object:*'weak_pointer' should be NULL*"); +} + +int +main (int argc, + char *argv[]) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/assert/finalize_object", test_assert_finalize_object); + g_test_add_func ("/assert/finalize_object/subprocess/bad", + test_assert_finalize_object_subprocess_bad); + + return g_test_run (); +}