[libshumate] tests: Make TestTileServer an object



commit b205a4609d0c60eb2e6f6420ca8d929284cd9652
Author: James Westman <james jwestman net>
Date:   Fri Mar 26 16:50:53 2021 -0500

    tests: Make TestTileServer an object
    
    This will help with more complicated network tile source tests in the
    future

 tests/network-tile-source.c |  3 ++-
 tests/test-tile-server.c    | 52 +++++++++++++++++++++++++++++++++++++++------
 tests/test-tile-server.h    | 18 +++++++++++++++-
 3 files changed, 65 insertions(+), 8 deletions(-)
---
diff --git a/tests/network-tile-source.c b/tests/network-tile-source.c
index d2aa402..fce9eeb 100644
--- a/tests/network-tile-source.c
+++ b/tests/network-tile-source.c
@@ -37,7 +37,8 @@ on_tile_filled (GObject *object, GAsyncResult *res, gpointer user_data)
 static void
 test_network_tile_source_tile (void)
 {
-  g_autofree char *uri = testserver_start ();
+  g_autoptr(TestTileServer) server = test_tile_server_new ();
+  g_autofree char *uri = test_tile_server_start (server);
   g_autoptr(ShumateMapSource) source = create_tile_source (uri);
   g_autoptr(ShumateTile) tile = shumate_tile_new_full (0, 0, 256, 0);
   g_autoptr(GMainLoop) loop = NULL;
diff --git a/tests/test-tile-server.c b/tests/test-tile-server.c
index 412f447..719be56 100644
--- a/tests/test-tile-server.c
+++ b/tests/test-tile-server.c
@@ -4,6 +4,48 @@
 #include <libsoup/soup.h>
 #include <gdk/gdk.h>
 
+#include "test-tile-server.h"
+
+
+struct _TestTileServer
+{
+  GObject parent_instance;
+  SoupServer *server;
+};
+
+G_DEFINE_TYPE (TestTileServer, test_tile_server, G_TYPE_OBJECT)
+
+
+TestTileServer *
+test_tile_server_new (void)
+{
+  return g_object_new (TEST_TYPE_TILE_SERVER, NULL);
+}
+
+static void
+test_tile_server_finalize (GObject *object)
+{
+  TestTileServer *self = (TestTileServer *)object;
+
+  g_clear_object (&self->server);
+
+  G_OBJECT_CLASS (test_tile_server_parent_class)->finalize (object);
+}
+
+static void
+test_tile_server_class_init (TestTileServerClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = test_tile_server_finalize;
+}
+
+static void
+test_tile_server_init (TestTileServer *self)
+{
+  self->server = soup_server_new (NULL, NULL);
+}
+
 
 static cairo_status_t
 write_func (void *bytearray, const unsigned char *data, unsigned int length)
@@ -51,18 +93,16 @@ server_callback (SoupServer *server,
 
 
 char *
-testserver_start (void)
+test_tile_server_start (TestTileServer *self)
 {
-  SoupServer *server = soup_server_new (NULL, NULL);
   g_autoptr(GError) error = NULL;
   g_autoptr(GSList) uris = NULL;
+  soup_server_add_handler (self->server, NULL, server_callback, generate_image (), (GDestroyNotify) 
g_bytes_unref);
 
-  soup_server_add_handler (server, NULL, server_callback, generate_image (), (GDestroyNotify) g_bytes_unref);
-
-  soup_server_listen_local (server, 0, 0, &error);
+  soup_server_listen_local (self->server, 0, 0, &error);
   g_assert_no_error (error);
 
-  uris = soup_server_get_uris (server);
+  uris = soup_server_get_uris (self->server);
   g_assert_true (g_slist_length (uris) >= 1);
   return soup_uri_to_string (uris->data, FALSE);
 }
diff --git a/tests/test-tile-server.h b/tests/test-tile-server.h
index 5c75e32..fe2d802 100644
--- a/tests/test-tile-server.h
+++ b/tests/test-tile-server.h
@@ -1 +1,17 @@
-char *testserver_start (void);
+#pragma once
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+
+#define TEST_TYPE_TILE_SERVER (test_tile_server_get_type())
+G_DECLARE_FINAL_TYPE (TestTileServer, test_tile_server, TEST, TILE_SERVER, GObject)
+
+
+TestTileServer *test_tile_server_new (void);
+
+char *test_tile_server_start (TestTileServer *self);
+
+
+G_END_DECLS


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]