mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-23 18:52:09 +01:00
Add tests for GEncoder and GSerializable
This commit is contained in:
parent
bb3e3d01c3
commit
a2ac1d0fd1
2
gio/tests/.gitignore
vendored
2
gio/tests/.gitignore
vendored
@ -16,6 +16,7 @@ data-output-stream
|
|||||||
de/
|
de/
|
||||||
desktop-app-info
|
desktop-app-info
|
||||||
echo-server
|
echo-server
|
||||||
|
encoder
|
||||||
file
|
file
|
||||||
fileattributematcher
|
fileattributematcher
|
||||||
filter-cat
|
filter-cat
|
||||||
@ -94,6 +95,7 @@ readwrite
|
|||||||
resolver
|
resolver
|
||||||
resources
|
resources
|
||||||
send-data
|
send-data
|
||||||
|
serializable
|
||||||
services/org.gtk.GDBus.Examples.ObjectManager.service
|
services/org.gtk.GDBus.Examples.ObjectManager.service
|
||||||
simple-async-result
|
simple-async-result
|
||||||
simple-proxy
|
simple-proxy
|
||||||
|
@ -70,6 +70,8 @@ test_progs = \
|
|||||||
permission \
|
permission \
|
||||||
task \
|
task \
|
||||||
credentials \
|
credentials \
|
||||||
|
encoder \
|
||||||
|
serializable \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
if HAVE_DBUS_DAEMON
|
if HAVE_DBUS_DAEMON
|
||||||
|
93
gio/tests/encoder.c
Normal file
93
gio/tests/encoder.c
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#include <gio/gio.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
encoder_binary (void)
|
||||||
|
{
|
||||||
|
GEncoder *encoder = g_binary_encoder_new ();
|
||||||
|
GError *error = NULL;
|
||||||
|
GBytes *buffer;
|
||||||
|
gboolean bool_value;
|
||||||
|
char *str_value;
|
||||||
|
|
||||||
|
g_object_add_weak_pointer (G_OBJECT (encoder), (gpointer *) &encoder);
|
||||||
|
|
||||||
|
g_encoder_add_key_bool (encoder, "BoolValue", TRUE);
|
||||||
|
g_encoder_add_key_string (encoder, "StringValue", "Hello");
|
||||||
|
|
||||||
|
buffer = g_encoder_write_to_bytes (encoder, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert (buffer != NULL);
|
||||||
|
|
||||||
|
g_object_unref (encoder);
|
||||||
|
g_assert (encoder == NULL);
|
||||||
|
|
||||||
|
if (g_test_verbose ())
|
||||||
|
g_print ("*** buffer (len: %d) = ***\n%s\n",
|
||||||
|
(int) g_bytes_get_size (buffer),
|
||||||
|
(const char *) g_bytes_get_data (buffer, NULL));
|
||||||
|
|
||||||
|
encoder = g_binary_encoder_new ();
|
||||||
|
|
||||||
|
g_object_add_weak_pointer (G_OBJECT (encoder), (gpointer *) &encoder);
|
||||||
|
|
||||||
|
g_encoder_read_from_bytes (encoder, buffer, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
g_encoder_get_key_bool (encoder, "BoolValue", &bool_value);
|
||||||
|
g_assert (bool_value);
|
||||||
|
|
||||||
|
g_encoder_get_key_string (encoder, "StringValue", &str_value);
|
||||||
|
g_assert_cmpstr (str_value, ==, "Hello");
|
||||||
|
g_free (str_value);
|
||||||
|
|
||||||
|
g_bytes_unref (buffer);
|
||||||
|
|
||||||
|
g_object_unref (encoder);
|
||||||
|
g_assert (encoder == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
encoder_keyfile (void)
|
||||||
|
{
|
||||||
|
GEncoder *encoder = g_keyfile_encoder_new ();
|
||||||
|
GError *error = NULL;
|
||||||
|
GBytes *buffer;
|
||||||
|
gboolean res;
|
||||||
|
|
||||||
|
g_keyfile_encoder_set_section_name (G_KEYFILE_ENCODER (encoder), "Test");
|
||||||
|
g_encoder_add_key_bool (encoder, "BoolValue", TRUE);
|
||||||
|
|
||||||
|
buffer = g_encoder_write_to_bytes (encoder, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert (buffer != NULL);
|
||||||
|
|
||||||
|
g_object_unref (encoder);
|
||||||
|
|
||||||
|
if (g_test_verbose ())
|
||||||
|
g_print ("*** buffer (len: %d) = ***\n%s",
|
||||||
|
(int) g_bytes_get_size (buffer),
|
||||||
|
(const char *) g_bytes_get_data (buffer, NULL));
|
||||||
|
|
||||||
|
encoder = g_keyfile_encoder_new ();
|
||||||
|
g_keyfile_encoder_set_section_name (G_KEYFILE_ENCODER (encoder), "Test");
|
||||||
|
|
||||||
|
g_encoder_read_from_bytes (encoder, buffer, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
g_encoder_get_key_bool (encoder, "BoolValue", &res);
|
||||||
|
g_assert (res);
|
||||||
|
|
||||||
|
g_bytes_unref (buffer);
|
||||||
|
g_object_unref (encoder);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
g_test_init (&argc, &argv, NULL);
|
||||||
|
|
||||||
|
g_test_add_func ("/encoder/binary", encoder_binary);
|
||||||
|
g_test_add_func ("/encoder/key-file", encoder_keyfile);
|
||||||
|
|
||||||
|
return g_test_run ();
|
||||||
|
}
|
177
gio/tests/serializable.c
Normal file
177
gio/tests/serializable.c
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
#include <gio/gio.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GObject parent_instance;
|
||||||
|
|
||||||
|
gboolean bool_value;
|
||||||
|
char *str_value;
|
||||||
|
gdouble double_value;
|
||||||
|
} TestObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GObjectClass parent_class;
|
||||||
|
} TestObjectClass;
|
||||||
|
|
||||||
|
GType test_object_get_type (void);
|
||||||
|
|
||||||
|
static void test_object_serializable_init (GSerializableInterface *iface);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (TestObject, test_object, G_TYPE_OBJECT,
|
||||||
|
G_IMPLEMENT_INTERFACE (G_TYPE_SERIALIZABLE, test_object_serializable_init))
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_object_serialize (GSerializable *serializable,
|
||||||
|
GEncoder *encoder)
|
||||||
|
{
|
||||||
|
TestObject *self = (TestObject *) serializable;
|
||||||
|
|
||||||
|
g_encoder_add_key_bool (encoder, "bool-value", self->bool_value);
|
||||||
|
g_encoder_add_key_string (encoder, "str-value", self->str_value);
|
||||||
|
g_encoder_add_key_double (encoder, "double-value", self->double_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
test_object_deserialize (GSerializable *serializable,
|
||||||
|
GEncoder *encoder,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
TestObject *self = (TestObject *) serializable;
|
||||||
|
|
||||||
|
g_encoder_get_key_bool (encoder, "bool-value", &self->bool_value);
|
||||||
|
g_encoder_get_key_string (encoder, "str-value", &self->str_value);
|
||||||
|
g_encoder_get_key_double (encoder, "double-value", &self->double_value);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_object_serializable_init (GSerializableInterface *iface)
|
||||||
|
{
|
||||||
|
iface->serialize = test_object_serialize;
|
||||||
|
iface->deserialize = test_object_deserialize;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_object_finalize (GObject *gobject)
|
||||||
|
{
|
||||||
|
TestObject *self = (TestObject *) gobject;
|
||||||
|
|
||||||
|
g_free (self->str_value);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (test_object_parent_class)->finalize (gobject);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_object_class_init (TestObjectClass *klass)
|
||||||
|
{
|
||||||
|
G_OBJECT_CLASS (klass)->finalize = test_object_finalize;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_object_init (TestObject *self)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static TestObject *
|
||||||
|
test_object_new (void)
|
||||||
|
{
|
||||||
|
return g_object_new (test_object_get_type (), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_object_set_bool_value (TestObject *obj,
|
||||||
|
gboolean value)
|
||||||
|
{
|
||||||
|
value = !!value;
|
||||||
|
|
||||||
|
obj->bool_value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
test_object_get_bool_value (TestObject *obj)
|
||||||
|
{
|
||||||
|
return obj->bool_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_object_set_str_value (TestObject *obj,
|
||||||
|
const char *value)
|
||||||
|
{
|
||||||
|
char *str_value = g_strdup (value);
|
||||||
|
|
||||||
|
g_free (obj->str_value);
|
||||||
|
obj->str_value = str_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
test_object_get_str_value (TestObject *obj)
|
||||||
|
{
|
||||||
|
return obj->str_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_object_set_double_value (TestObject *obj,
|
||||||
|
double value)
|
||||||
|
{
|
||||||
|
obj->double_value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gdouble
|
||||||
|
test_object_get_double_value (TestObject *obj)
|
||||||
|
{
|
||||||
|
return obj->double_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tests */
|
||||||
|
static void
|
||||||
|
serializable_roundtrip (void)
|
||||||
|
{
|
||||||
|
GEncoder *encoder;
|
||||||
|
TestObject *obj;
|
||||||
|
GError *error;
|
||||||
|
GBytes *buffer;
|
||||||
|
|
||||||
|
obj = test_object_new ();
|
||||||
|
test_object_set_bool_value (obj, TRUE);
|
||||||
|
test_object_set_str_value (obj, "Hello, World");
|
||||||
|
test_object_set_double_value (obj, 3.14159);
|
||||||
|
|
||||||
|
encoder = g_binary_encoder_new ();
|
||||||
|
g_serializable_serialize (G_SERIALIZABLE (obj), encoder);
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
buffer = g_encoder_write_to_bytes (encoder, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_object_unref (encoder);
|
||||||
|
g_object_unref (obj);
|
||||||
|
|
||||||
|
if (g_test_verbose ())
|
||||||
|
g_print ("*** buffer: '%s' ***\n",
|
||||||
|
(const char *) g_bytes_get_data (buffer, NULL));
|
||||||
|
|
||||||
|
encoder = g_binary_encoder_new ();
|
||||||
|
g_encoder_read_from_bytes (encoder, buffer, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
obj = test_object_new ();
|
||||||
|
g_serializable_deserialize (G_SERIALIZABLE (obj), encoder, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
g_assert (test_object_get_bool_value (obj));
|
||||||
|
g_assert_cmpstr (test_object_get_str_value (obj), ==, "Hello, World");
|
||||||
|
g_assert_cmpfloat ((float) test_object_get_double_value (obj), ==, 3.14159f);
|
||||||
|
|
||||||
|
g_bytes_unref (buffer);
|
||||||
|
g_object_unref (encoder);
|
||||||
|
g_object_unref (obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
g_test_init (&argc, &argv, NULL);
|
||||||
|
|
||||||
|
g_test_add_func ("/serializable/roundtrip", serializable_roundtrip);
|
||||||
|
|
||||||
|
return g_test_run ();
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user