[pango/font-serialize-test: 7/7] Add a test for pango_font_serialize




commit d17fe76358878f1877c015b626b5582e3634fe02
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Nov 27 09:22:01 2021 -0500

    Add a test for pango_font_serialize
    
    Now that we have fonts in git, we can
    reliably test this.

 tests/meson.build     |  2 +-
 tests/testserialize.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+), 1 deletion(-)
---
diff --git a/tests/meson.build b/tests/meson.build
index 1984ed03..af56433e 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -51,12 +51,12 @@ if cairo_dep.found()
     [ 'cxx-test', [ 'cxx-test.cpp' ], [ libpangocairo_dep, gobject_dep, harfbuzz_dep ] ],
     [ 'test-harfbuzz', [ 'test-harfbuzz.c' ], [ libpangocairo_dep, gobject_dep, harfbuzz_dep ] ],
     [ 'test-break', [ 'test-break.c', 'test-common.c', 'validate-log-attrs.c' ], [libpangocairo_dep, 
glib_dep, harfbuzz_dep ] ],
-    [ 'testserialize', [ 'testserialize.c' ], [ libpangocairo_dep ] ],
   ]
 
   if build_pangoft2
     tests += [
       [ 'testmisc', [ 'testmisc.c' ], [ libpangocairo_dep, libpangoft2_dep, glib_dep, harfbuzz_dep ] ],
+      [ 'testserialize', [ 'testserialize.c' ], [ libpangocairo_dep, libpangoft2_dep ] ],
     ]
 
     if host_system != 'darwin'
diff --git a/tests/testserialize.c b/tests/testserialize.c
index bd962a56..4ea7425e 100644
--- a/tests/testserialize.c
+++ b/tests/testserialize.c
@@ -22,6 +22,7 @@
 
 #include <glib.h>
 #include <pango/pangocairo.h>
+#include <pango/pangocairo-fc.h>
 #include <gio/gio.h>
 
 static void
@@ -124,6 +125,43 @@ test_serialize_tab_array (void)
     }
 }
 
+static void
+test_serialize_font (void)
+{
+  PangoContext *context;
+  PangoFontDescription *desc;
+  PangoFont *font;
+  GBytes *bytes;
+  const char *expected =
+    "{\n"
+    "  \"description\" : \"Cantarell 20 @wght=600\",\n"
+    "  \"checksum\" : \"5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2\",\n"
+    "  \"variations\" : {\n"
+    "    \"wght\" : 5583\n"
+    "  },\n"
+    "  \"matrix\" : [\n"
+    "    1.0,\n"
+    "    -0.0,\n"
+    "    -0.0,\n"
+    "    1.0,\n"
+    "    0.0,\n"
+    "    0.0\n"
+    "  ]\n"
+    "}";
+
+  context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
+  desc = pango_font_description_from_string ("Cantarell Italic 20 @wght=600");
+  font = pango_context_load_font (context, desc);
+
+  bytes = pango_font_serialize (font);
+  g_assert_cmpstr (g_bytes_get_data (bytes, NULL), ==, expected);
+  g_bytes_unref (bytes);
+
+  g_object_unref (font);
+  pango_font_description_free (desc);
+  g_object_unref (context);
+}
+
 static void
 test_serialize_layout_minimal (void)
 {
@@ -351,13 +389,53 @@ test_serialize_layout_invalid (void)
 
   g_object_unref (context);
 }
+
+static void
+install_fonts (void)
+{
+  char *dir;
+  FcConfig *config;
+  PangoFontMap *map;
+  char *path;
+  gsize len;
+  char *conf;
+
+  dir = g_test_build_filename (G_TEST_DIST, "fonts", NULL);
+
+  map = g_object_new (PANGO_TYPE_CAIRO_FC_FONT_MAP, NULL);
+
+  config = FcConfigCreate ();
+
+  path = g_test_build_filename (G_TEST_DIST, "fonts/fonts.conf", NULL);
+  g_file_get_contents (path, &conf, &len, NULL);
+
+  if (!FcConfigParseAndLoadFromMemory (config, (const FcChar8 *) conf, TRUE))
+    g_error ("Failed to parse fontconfig configuration");
+
+  g_free (conf);
+  g_free (path);
+
+  FcConfigAppFontAddDir (config, (const FcChar8 *) dir);
+  pango_fc_font_map_set_config (PANGO_FC_FONT_MAP (map), config);
+  FcConfigDestroy (config);
+
+  pango_cairo_font_map_set_default (PANGO_CAIRO_FONT_MAP (map));
+
+  g_object_unref (map);
+
+  g_free (dir);
+}
+
 int
 main (int argc, char *argv[])
 {
   g_test_init (&argc, &argv, NULL);
 
+  install_fonts ();
+
   g_test_add_func ("/serialize/attr-list", test_serialize_attr_list);
   g_test_add_func ("/serialize/tab-array", test_serialize_tab_array);
+  g_test_add_func ("/serialize/font", test_serialize_font);
   g_test_add_func ("/serialize/layout/minimal", test_serialize_layout_minimal);
   g_test_add_func ("/serialize/layout/valid", test_serialize_layout_valid);
   g_test_add_func ("/serialize/layout/context", test_serialize_layout_context);


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