mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			650 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			650 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#define GLIB_DISABLE_DEPRECATION_WARNINGS
 | 
						|
 | 
						|
#include <glib-object.h>
 | 
						|
 | 
						|
typedef struct _MyBoxed MyBoxed;
 | 
						|
 | 
						|
struct _MyBoxed
 | 
						|
{
 | 
						|
  gint ivalue;
 | 
						|
  gchar *bla;
 | 
						|
};
 | 
						|
 | 
						|
static gpointer
 | 
						|
my_boxed_copy (gpointer orig)
 | 
						|
{
 | 
						|
  MyBoxed *a = orig;
 | 
						|
  MyBoxed *b;
 | 
						|
 | 
						|
  b = g_slice_new (MyBoxed);
 | 
						|
  b->ivalue = a->ivalue;
 | 
						|
  b->bla = g_strdup (a->bla);
 | 
						|
 | 
						|
  return b;
 | 
						|
}
 | 
						|
 | 
						|
static gint my_boxed_free_count;
 | 
						|
 | 
						|
static void
 | 
						|
my_boxed_free (gpointer orig)
 | 
						|
{
 | 
						|
  MyBoxed *a = orig;
 | 
						|
 | 
						|
  g_free (a->bla);
 | 
						|
  g_slice_free (MyBoxed, a);
 | 
						|
 | 
						|
  my_boxed_free_count++;
 | 
						|
}
 | 
						|
 | 
						|
static GType my_boxed_get_type (void);
 | 
						|
#define MY_TYPE_BOXED (my_boxed_get_type ())
 | 
						|
 | 
						|
G_DEFINE_BOXED_TYPE (MyBoxed, my_boxed, my_boxed_copy, my_boxed_free)
 | 
						|
 | 
						|
static void
 | 
						|
test_define_boxed (void)
 | 
						|
{
 | 
						|
  MyBoxed a;
 | 
						|
  MyBoxed *b;
 | 
						|
 | 
						|
  a.ivalue = 20;
 | 
						|
  a.bla = g_strdup ("bla");
 | 
						|
 | 
						|
  b = g_boxed_copy (MY_TYPE_BOXED, &a);
 | 
						|
 | 
						|
  g_assert_cmpint (b->ivalue, ==, 20);
 | 
						|
  g_assert_cmpstr (b->bla, ==, "bla");
 | 
						|
 | 
						|
  g_boxed_free (MY_TYPE_BOXED, b);
 | 
						|
 | 
						|
  g_free (a.bla);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_ownership (void)
 | 
						|
{
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
  static MyBoxed boxed = { 10, "bla" };
 | 
						|
 | 
						|
  g_value_init (&value, MY_TYPE_BOXED);
 | 
						|
 | 
						|
  my_boxed_free_count = 0;
 | 
						|
 | 
						|
  g_value_set_static_boxed (&value, &boxed);
 | 
						|
  g_value_reset (&value);
 | 
						|
 | 
						|
  g_assert_cmpint (my_boxed_free_count, ==, 0);
 | 
						|
 | 
						|
  g_value_set_boxed_take_ownership (&value, g_boxed_copy (MY_TYPE_BOXED, &boxed));
 | 
						|
  g_value_reset (&value);
 | 
						|
  g_assert_cmpint (my_boxed_free_count, ==, 1);
 | 
						|
 | 
						|
  g_value_take_boxed (&value, g_boxed_copy (MY_TYPE_BOXED, &boxed));
 | 
						|
  g_value_reset (&value);
 | 
						|
  g_assert_cmpint (my_boxed_free_count, ==, 2);
 | 
						|
 | 
						|
  g_value_set_boxed (&value, &boxed);
 | 
						|
  g_value_reset (&value);
 | 
						|
  g_assert_cmpint (my_boxed_free_count, ==, 3);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
my_callback (gpointer user_data)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
static gint destroy_count;
 | 
						|
 | 
						|
static void
 | 
						|
my_closure_notify (gpointer user_data, GClosure *closure)
 | 
						|
{
 | 
						|
  destroy_count++;
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_closure (void)
 | 
						|
{
 | 
						|
  GClosure *closure;
 | 
						|
  GClosure *closure2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_CLOSURE);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  closure = g_cclosure_new (G_CALLBACK (my_callback), "bla", my_closure_notify);
 | 
						|
  g_value_take_boxed (&value, closure);
 | 
						|
 | 
						|
  closure2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (closure2 == closure);
 | 
						|
 | 
						|
  closure2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (closure2 == closure); /* closures use ref/unref for copy/free */
 | 
						|
  g_closure_unref (closure2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
  g_assert_cmpint (destroy_count, ==, 1);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_date (void)
 | 
						|
{
 | 
						|
  GDate *date;
 | 
						|
  GDate *date2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_DATE);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  date = g_date_new_dmy (1, 3, 1970);
 | 
						|
  g_value_take_boxed (&value, date);
 | 
						|
 | 
						|
  date2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (date2 == date);
 | 
						|
 | 
						|
  date2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (date2 != date);
 | 
						|
  g_assert (g_date_compare (date, date2) == 0);
 | 
						|
  g_date_free (date2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_value (void)
 | 
						|
{
 | 
						|
  GValue value1 = G_VALUE_INIT;
 | 
						|
  GValue *value2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_VALUE);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  g_value_init (&value1, G_TYPE_INT);
 | 
						|
  g_value_set_int (&value1, 26);
 | 
						|
 | 
						|
  g_value_set_static_boxed (&value, &value1);
 | 
						|
 | 
						|
  value2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (value2 == &value1);
 | 
						|
 | 
						|
  value2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (value2 != &value1);
 | 
						|
  g_assert (G_VALUE_HOLDS_INT (value2));
 | 
						|
  g_assert_cmpint (g_value_get_int (value2), ==, 26);
 | 
						|
  g_boxed_free (G_TYPE_VALUE, value2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_string (void)
 | 
						|
{
 | 
						|
  GString *v;
 | 
						|
  GString *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_GSTRING);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_string_new ("bla");
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v2 == v);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v2 != v);
 | 
						|
  g_assert (g_string_equal (v, v2));
 | 
						|
  g_string_free (v2, TRUE);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_hashtable (void)
 | 
						|
{
 | 
						|
  GHashTable *v;
 | 
						|
  GHashTable *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_HASH_TABLE);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_hash_table_new (g_str_hash, g_str_equal);
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v2 == v);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v2 == v);  /* hash tables use ref/unref for copy/free */
 | 
						|
  g_hash_table_unref (v2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_array (void)
 | 
						|
{
 | 
						|
  GArray *v;
 | 
						|
  GArray *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_ARRAY);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_array_new (TRUE, FALSE, 1);
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v2 == v);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v2 == v);  /* arrays use ref/unref for copy/free */
 | 
						|
  g_array_unref (v2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_ptrarray (void)
 | 
						|
{
 | 
						|
  GPtrArray *v;
 | 
						|
  GPtrArray *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_PTR_ARRAY);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_ptr_array_new ();
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v2 == v);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v2 == v);  /* ptr arrays use ref/unref for copy/free */
 | 
						|
  g_ptr_array_unref (v2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_regex (void)
 | 
						|
{
 | 
						|
  GRegex *v;
 | 
						|
  GRegex *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_REGEX);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_regex_new ("a+b+", 0, 0, NULL);
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v2 == v);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v2 == v);  /* regexes use ref/unref for copy/free */
 | 
						|
  g_regex_unref (v2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_matchinfo (void)
 | 
						|
{
 | 
						|
  GRegex *r;
 | 
						|
  GMatchInfo *info, *info2;
 | 
						|
  gboolean ret;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_MATCH_INFO);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  r = g_regex_new ("ab", 0, 0, NULL);
 | 
						|
  ret = g_regex_match (r, "blabla abab bla", 0, &info);
 | 
						|
  g_assert (ret);
 | 
						|
  g_value_take_boxed (&value, info);
 | 
						|
 | 
						|
  info2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (info == info2);
 | 
						|
 | 
						|
  info2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (info == info2);  /* matchinfo uses ref/unref for copy/free */
 | 
						|
  g_match_info_unref (info2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
  g_regex_unref (r);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_varianttype (void)
 | 
						|
{
 | 
						|
  GVariantType *v;
 | 
						|
  GVariantType *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_VARIANT_TYPE);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_variant_type_new ("mas");
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v2 == v);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v2 != v);
 | 
						|
  g_assert_cmpstr (g_variant_type_peek_string (v), ==, g_variant_type_peek_string (v2));
 | 
						|
  g_variant_type_free (v2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_datetime (void)
 | 
						|
{
 | 
						|
  GDateTime *v;
 | 
						|
  GDateTime *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_DATE_TIME);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_date_time_new_now_local ();
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v2 == v);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v2 == v); /* datetime uses ref/unref for copy/free */
 | 
						|
  g_date_time_unref (v2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_error (void)
 | 
						|
{
 | 
						|
  GError *v;
 | 
						|
  GError *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_ERROR);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_error_new_literal (G_VARIANT_PARSE_ERROR,
 | 
						|
                           G_VARIANT_PARSE_ERROR_NUMBER_TOO_BIG,
 | 
						|
                           "Too damn big");
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v2 == v);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v2 != v);
 | 
						|
  g_assert_cmpint (v->domain, ==, v2->domain);
 | 
						|
  g_assert_cmpint (v->code, ==, v2->code);
 | 
						|
  g_assert_cmpstr (v->message, ==, v2->message);
 | 
						|
  g_error_free (v2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_keyfile (void)
 | 
						|
{
 | 
						|
  GKeyFile *k, *k2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_KEY_FILE);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  k = g_key_file_new ();
 | 
						|
  g_value_take_boxed (&value, k);
 | 
						|
 | 
						|
  k2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (k == k2);
 | 
						|
 | 
						|
  k2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (k == k2);  /* keyfile uses ref/unref for copy/free */
 | 
						|
  g_key_file_unref (k2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_mainloop (void)
 | 
						|
{
 | 
						|
  GMainLoop *l, *l2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_MAIN_LOOP);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  l = g_main_loop_new (NULL, FALSE);
 | 
						|
  g_value_take_boxed (&value, l);
 | 
						|
 | 
						|
  l2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (l == l2);
 | 
						|
 | 
						|
  l2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (l == l2);  /* mainloop uses ref/unref for copy/free */
 | 
						|
  g_main_loop_unref (l2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_maincontext (void)
 | 
						|
{
 | 
						|
  GMainContext *c, *c2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_MAIN_CONTEXT);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  c = g_main_context_new ();
 | 
						|
  g_value_take_boxed (&value, c);
 | 
						|
 | 
						|
  c2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (c == c2);
 | 
						|
 | 
						|
  c2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (c == c2);  /* maincontext uses ref/unref for copy/free */
 | 
						|
  g_main_context_unref (c2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_source (void)
 | 
						|
{
 | 
						|
  GSource *s, *s2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_SOURCE);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  s = g_idle_source_new ();
 | 
						|
  g_value_take_boxed (&value, s);
 | 
						|
 | 
						|
  s2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (s == s2);
 | 
						|
 | 
						|
  s2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (s == s2);  /* source uses ref/unref for copy/free */
 | 
						|
  g_source_unref (s2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_variantbuilder (void)
 | 
						|
{
 | 
						|
  GVariantBuilder *v, *v2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_VARIANT_BUILDER);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  v = g_variant_builder_new (G_VARIANT_TYPE_OBJECT_PATH_ARRAY);
 | 
						|
  g_value_take_boxed (&value, v);
 | 
						|
 | 
						|
  v2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (v == v2);
 | 
						|
 | 
						|
  v2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (v == v2);  /* variantbuilder uses ref/unref for copy/free */
 | 
						|
  g_variant_builder_unref (v2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_timezone (void)
 | 
						|
{
 | 
						|
  GTimeZone *z, *z2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_TIME_ZONE);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  z = g_time_zone_new_utc ();
 | 
						|
  g_value_take_boxed (&value, z);
 | 
						|
 | 
						|
  z2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (z == z2);
 | 
						|
 | 
						|
  z2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (z == z2);  /* timezone uses ref/unref for copy/free */
 | 
						|
  g_time_zone_unref (z2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_pollfd (void)
 | 
						|
{
 | 
						|
  GPollFD *p, *p2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_POLLFD);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  p = g_new (GPollFD, 1);
 | 
						|
  g_value_take_boxed (&value, p);
 | 
						|
 | 
						|
  p2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (p == p2);
 | 
						|
 | 
						|
  p2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (p != p2);
 | 
						|
  g_free (p2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_markup (void)
 | 
						|
{
 | 
						|
  GMarkupParseContext *c, *c2;
 | 
						|
  const GMarkupParser parser = { 0 };
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_MARKUP_PARSE_CONTEXT);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  c = g_markup_parse_context_new (&parser, 0, NULL, NULL);
 | 
						|
  g_value_take_boxed (&value, c);
 | 
						|
 | 
						|
  c2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (c == c2);
 | 
						|
 | 
						|
  c2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (c == c2);
 | 
						|
  g_markup_parse_context_unref (c2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_thread (void)
 | 
						|
{
 | 
						|
  GThread *t, *t2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_THREAD);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  t = g_thread_self ();
 | 
						|
  g_value_set_boxed (&value, t);
 | 
						|
 | 
						|
  t2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (t == t2);
 | 
						|
 | 
						|
  t2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (t == t2);
 | 
						|
  g_thread_unref (t2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
test_boxed_checksum (void)
 | 
						|
{
 | 
						|
  GChecksum *c, *c2;
 | 
						|
  GValue value = G_VALUE_INIT;
 | 
						|
 | 
						|
  g_value_init (&value, G_TYPE_CHECKSUM);
 | 
						|
  g_assert (G_VALUE_HOLDS_BOXED (&value));
 | 
						|
 | 
						|
  c = g_checksum_new (G_CHECKSUM_SHA512);
 | 
						|
  g_value_take_boxed (&value, c);
 | 
						|
 | 
						|
  c2 = g_value_get_boxed (&value);
 | 
						|
  g_assert (c == c2);
 | 
						|
 | 
						|
  c2 = g_value_dup_boxed (&value);
 | 
						|
  g_assert (c != c2);
 | 
						|
  g_checksum_free (c2);
 | 
						|
 | 
						|
  g_value_unset (&value);
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
main (int argc, char *argv[])
 | 
						|
{
 | 
						|
  g_test_init (&argc, &argv, NULL);
 | 
						|
 | 
						|
  g_test_add_func ("/boxed/define", test_define_boxed);
 | 
						|
  g_test_add_func ("/boxed/ownership", test_boxed_ownership);
 | 
						|
  g_test_add_func ("/boxed/closure", test_boxed_closure);
 | 
						|
  g_test_add_func ("/boxed/date", test_boxed_date);
 | 
						|
  g_test_add_func ("/boxed/value", test_boxed_value);
 | 
						|
  g_test_add_func ("/boxed/string", test_boxed_string);
 | 
						|
  g_test_add_func ("/boxed/hashtable", test_boxed_hashtable);
 | 
						|
  g_test_add_func ("/boxed/array", test_boxed_array);
 | 
						|
  g_test_add_func ("/boxed/ptrarray", test_boxed_ptrarray);
 | 
						|
  g_test_add_func ("/boxed/regex", test_boxed_regex);
 | 
						|
  g_test_add_func ("/boxed/varianttype", test_boxed_varianttype);
 | 
						|
  g_test_add_func ("/boxed/error", test_boxed_error);
 | 
						|
  g_test_add_func ("/boxed/datetime", test_boxed_datetime);
 | 
						|
  g_test_add_func ("/boxed/matchinfo", test_boxed_matchinfo);
 | 
						|
  g_test_add_func ("/boxed/keyfile", test_boxed_keyfile);
 | 
						|
  g_test_add_func ("/boxed/mainloop", test_boxed_mainloop);
 | 
						|
  g_test_add_func ("/boxed/maincontext", test_boxed_maincontext);
 | 
						|
  g_test_add_func ("/boxed/source", test_boxed_source);
 | 
						|
  g_test_add_func ("/boxed/variantbuilder", test_boxed_variantbuilder);
 | 
						|
  g_test_add_func ("/boxed/timezone", test_boxed_timezone);
 | 
						|
  g_test_add_func ("/boxed/pollfd", test_boxed_pollfd);
 | 
						|
  g_test_add_func ("/boxed/markup", test_boxed_markup);
 | 
						|
  g_test_add_func ("/boxed/thread", test_boxed_thread);
 | 
						|
  g_test_add_func ("/boxed/checksum", test_boxed_checksum);
 | 
						|
 | 
						|
  return g_test_run ();
 | 
						|
}
 |