mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-04-25 08:36:52 +02:00
Test binding non-readable/writable properties
This commit is contained in:
parent
3bfd739154
commit
8a988e8e88
@ -643,7 +643,9 @@ enum
|
|||||||
PROP_INT64,
|
PROP_INT64,
|
||||||
PROP_UINT64,
|
PROP_UINT64,
|
||||||
PROP_DOUBLE,
|
PROP_DOUBLE,
|
||||||
PROP_STRING
|
PROP_STRING,
|
||||||
|
PROP_NO_READ,
|
||||||
|
PROP_NO_WRITE
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -656,6 +658,8 @@ typedef struct
|
|||||||
guint64 uint64_prop;
|
guint64 uint64_prop;
|
||||||
gdouble double_prop;
|
gdouble double_prop;
|
||||||
gchar *string_prop;
|
gchar *string_prop;
|
||||||
|
gchar *no_read_prop;
|
||||||
|
gchar *no_write_prop;
|
||||||
} TestObject;
|
} TestObject;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -668,6 +672,7 @@ G_DEFINE_TYPE (TestObject, test_object, G_TYPE_OBJECT)
|
|||||||
static void
|
static void
|
||||||
test_object_init (TestObject *object)
|
test_object_init (TestObject *object)
|
||||||
{
|
{
|
||||||
|
object->no_write_prop = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -706,6 +711,9 @@ test_object_get_property (GObject *object,
|
|||||||
case PROP_STRING:
|
case PROP_STRING:
|
||||||
g_value_set_string (value, test_object->string_prop);
|
g_value_set_string (value, test_object->string_prop);
|
||||||
break;
|
break;
|
||||||
|
case PROP_NO_WRITE:
|
||||||
|
g_value_set_string (value, test_object->no_write_prop);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -741,6 +749,10 @@ test_object_set_property (GObject *object,
|
|||||||
g_free (test_object->string_prop);
|
g_free (test_object->string_prop);
|
||||||
test_object->string_prop = g_value_dup_string (value);
|
test_object->string_prop = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_NO_READ:
|
||||||
|
g_free (test_object->no_read_prop);
|
||||||
|
test_object->no_read_prop = g_value_dup_string (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -768,6 +780,10 @@ test_object_class_init (TestObjectClass *class)
|
|||||||
g_param_spec_double ("double", "", "", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE));
|
g_param_spec_double ("double", "", "", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (gobject_class, PROP_STRING,
|
g_object_class_install_property (gobject_class, PROP_STRING,
|
||||||
g_param_spec_string ("string", "", "", NULL, G_PARAM_READWRITE));
|
g_param_spec_string ("string", "", "", NULL, G_PARAM_READWRITE));
|
||||||
|
g_object_class_install_property (gobject_class, PROP_NO_WRITE,
|
||||||
|
g_param_spec_string ("no-write", "", "", NULL, G_PARAM_READABLE));
|
||||||
|
g_object_class_install_property (gobject_class, PROP_NO_READ,
|
||||||
|
g_param_spec_string ("no-read", "", "", NULL, G_PARAM_WRITABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
static TestObject *
|
static TestObject *
|
||||||
@ -1028,6 +1044,74 @@ test_no_change_binding (void)
|
|||||||
g_object_unref (settings);
|
g_object_unref (settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test that binding a non-readable property only
|
||||||
|
* works in 'GET' mode.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
test_no_read_binding (void)
|
||||||
|
{
|
||||||
|
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
|
||||||
|
{
|
||||||
|
TestObject *obj;
|
||||||
|
GSettings *settings;
|
||||||
|
|
||||||
|
settings = g_settings_new ("org.gtk.test.binding");
|
||||||
|
obj = test_object_new ();
|
||||||
|
|
||||||
|
g_settings_bind (settings, "string", obj, "no-read", 0);
|
||||||
|
}
|
||||||
|
g_test_trap_assert_failed ();
|
||||||
|
g_test_trap_assert_stderr ("*property*is not readable*");
|
||||||
|
|
||||||
|
if (g_test_trap_fork (0, 0))
|
||||||
|
{
|
||||||
|
TestObject *obj;
|
||||||
|
GSettings *settings;
|
||||||
|
|
||||||
|
settings = g_settings_new ("org.gtk.test.binding");
|
||||||
|
obj = test_object_new ();
|
||||||
|
|
||||||
|
g_settings_bind (settings, "string", obj, "no-read", G_SETTINGS_BIND_GET);
|
||||||
|
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
g_test_trap_assert_passed ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test that binding a non-writable property only
|
||||||
|
* works in 'SET' mode.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
test_no_write_binding (void)
|
||||||
|
{
|
||||||
|
if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))
|
||||||
|
{
|
||||||
|
TestObject *obj;
|
||||||
|
GSettings *settings;
|
||||||
|
|
||||||
|
settings = g_settings_new ("org.gtk.test.binding");
|
||||||
|
obj = test_object_new ();
|
||||||
|
|
||||||
|
g_settings_bind (settings, "string", obj, "no-write", 0);
|
||||||
|
}
|
||||||
|
g_test_trap_assert_failed ();
|
||||||
|
g_test_trap_assert_stderr ("*property*is not writable*");
|
||||||
|
|
||||||
|
if (g_test_trap_fork (0, 0))
|
||||||
|
{
|
||||||
|
TestObject *obj;
|
||||||
|
GSettings *settings;
|
||||||
|
|
||||||
|
settings = g_settings_new ("org.gtk.test.binding");
|
||||||
|
obj = test_object_new ();
|
||||||
|
|
||||||
|
g_settings_bind (settings, "string", obj, "no-write", G_SETTINGS_BIND_SET);
|
||||||
|
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
g_test_trap_assert_passed ();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test that using a keyfile works
|
* Test that using a keyfile works
|
||||||
*/
|
*/
|
||||||
@ -1091,6 +1175,8 @@ main (int argc, char *argv[])
|
|||||||
g_test_add_func ("/gsettings/typesafe-binding", test_typesafe_binding);
|
g_test_add_func ("/gsettings/typesafe-binding", test_typesafe_binding);
|
||||||
g_test_add_func ("/gsettings/custom-binding", test_custom_binding);
|
g_test_add_func ("/gsettings/custom-binding", test_custom_binding);
|
||||||
g_test_add_func ("/gsettings/no-change-binding", test_no_change_binding);
|
g_test_add_func ("/gsettings/no-change-binding", test_no_change_binding);
|
||||||
|
g_test_add_func ("/gsettings/no-read-binding", test_no_read_binding);
|
||||||
|
g_test_add_func ("/gsettings/no-write-binding", test_no_write_binding);
|
||||||
g_test_add_func ("/gsettings/keyfile", test_keyfile);
|
g_test_add_func ("/gsettings/keyfile", test_keyfile);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user