diff options
author | Michael Natterer <mitch@imendio.com> | 2007-04-24 13:36:58 +0000 |
---|---|---|
committer | Michael Natterer <mitch@src.gnome.org> | 2007-04-24 13:36:58 +0000 |
commit | 325bd373d4d730d96aee740daed4bc2b70b8ea07 (patch) | |
tree | 2ed138ad4cd5b0908cfd4ae89a2d69a7d553b0b3 /tests/gobject | |
parent | fc161a705845f274c5f03aa628020865e6666c12 (diff) | |
download | glib-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.c | 73 |
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 (); |