summaryrefslogtreecommitdiff
path: root/tests/gobject
diff options
context:
space:
mode:
authorMichael Natterer <mitch@imendio.com>2007-04-24 13:36:58 +0000
committerMichael Natterer <mitch@src.gnome.org>2007-04-24 13:36:58 +0000
commit325bd373d4d730d96aee740daed4bc2b70b8ea07 (patch)
tree2ed138ad4cd5b0908cfd4ae89a2d69a7d553b0b3 /tests/gobject
parentfc161a705845f274c5f03aa628020865e6666c12 (diff)
downloadglib-325bd373d4d730d96aee740daed4bc2b70b8ea07.tar.gz
don't free or modify static strings, dup them when needed and clear the
2007-04-24 Michael Natterer <mitch@imendio.com> * gobject/gparamspecs.c (param_string_validate): don't free or modify static strings, dup them when needed and clear the G_VALUE_NOCOPY_CONTENTS flag. Fixes bug #432895. * tests/gobject/paramspec-test.c: test all GParamSpecString validations with static and allocated strings. svn path=/trunk/; revision=5454
Diffstat (limited to 'tests/gobject')
-rw-r--r--tests/gobject/paramspec-test.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/gobject/paramspec-test.c b/tests/gobject/paramspec-test.c
index 4f3c5b410..16ee3b19b 100644
--- a/tests/gobject/paramspec-test.c
+++ b/tests/gobject/paramspec-test.c
@@ -71,6 +71,78 @@ test_param_spec_char (void)
}
static void
+test_param_spec_string (void)
+{
+ GParamSpec *pspec;
+ GValue value = { 0, };
+ gboolean modified;
+
+ pspec = g_param_spec_string ("string", "nick", "blurb",
+ NULL, G_PARAM_READWRITE);
+ g_value_init (&value, G_TYPE_STRING);
+
+ g_value_set_string (&value, "foobar");
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (!modified);
+
+ g_value_set_string (&value, "");
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (!modified && g_value_get_string (&value) != NULL);
+
+ /* test ensure_non_null */
+
+ G_PARAM_SPEC_STRING (pspec)->ensure_non_null = TRUE;
+
+ g_value_set_string (&value, NULL);
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_string (&value) != NULL);
+
+ G_PARAM_SPEC_STRING (pspec)->ensure_non_null = FALSE;
+
+ /* test null_fold_if_empty */
+
+ G_PARAM_SPEC_STRING (pspec)->null_fold_if_empty = TRUE;
+
+ g_value_set_string (&value, "");
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_string (&value) == NULL);
+
+ g_value_set_static_string (&value, "");
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_string (&value) == NULL);
+
+ G_PARAM_SPEC_STRING (pspec)->null_fold_if_empty = FALSE;
+
+ /* test cset_first */
+
+ G_PARAM_SPEC_STRING (pspec)->cset_first = g_strdup ("abc");
+ G_PARAM_SPEC_STRING (pspec)->substitutor = '-';
+
+ g_value_set_string (&value, "ABC");
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_string (&value)[0] == '-');
+
+ g_value_set_static_string (&value, "ABC");
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_string (&value)[0] == '-');
+
+ /* test cset_nth */
+
+ G_PARAM_SPEC_STRING (pspec)->cset_nth = g_strdup ("abc");
+
+ g_value_set_string (&value, "aBC");
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_string (&value)[1] == '-');
+
+ g_value_set_static_string (&value, "aBC");
+ modified = g_param_value_validate (pspec, &value);
+ g_assert (modified && g_value_get_string (&value)[1] == '-');
+
+ g_value_unset (&value);
+ g_param_spec_unref (pspec);
+}
+
+static void
test_param_spec_override (void)
{
GParamSpec *ospec, *pspec;
@@ -140,6 +212,7 @@ main (int argc, char *argv[])
g_type_init ();
test_param_spec_char ();
+ test_param_spec_string ();
test_param_spec_override ();
test_param_spec_gtype ();