[pango/serialization-improvements: 18/19] Make test-layout use included fonts




commit 1bd9c458a6cfc74a654f3b15776e5e2f95c9c99d
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Nov 24 17:46:55 2021 -0500

    Make test-layout use included fonts
    
    Add Cantarell, DejaVu Sans and a subset of Noto Color Emoji
     to git, and make test-layout use just those fonts. This
    should help with keeping the ci from breaking due to different
    system fonts.
    
    Update tests.

 tests/fonts/Cantarell-VF.otf    | Bin 0 -> 170588 bytes
 tests/fonts/DejaVuSans.ttf      | Bin 0 -> 757076 bytes
 tests/fonts/emoji-subset.ttf    | Bin 0 -> 35236 bytes
 tests/layouts/bratwurst.layout  |  33 +++++++-
 tests/layouts/bratwurst2.layout |  17 +++-
 tests/layouts/bratwurst3.layout |  65 +++++++++++++-
 tests/layouts/bratwurst4.layout |  33 +++++++-
 tests/layouts/effigy.layout     |  35 ++++++--
 tests/layouts/kebab.layout      |  33 +++++++-
 tests/layouts/valid-1.layout    |  49 ++++++++++-
 tests/layouts/valid-10.layout   |  86 +++++++++++++++++--
 tests/layouts/valid-11.layout   |  81 ++++++++++++++++--
 tests/layouts/valid-12.layout   |  51 ++++++++++-
 tests/layouts/valid-13.layout   |  51 ++++++++++-
 tests/layouts/valid-14.layout   | 126 +++++++++++++++++++++------
 tests/layouts/valid-15.layout   |  49 ++++++++++-
 tests/layouts/valid-16.layout   |  49 ++++++++++-
 tests/layouts/valid-17.layout   |  33 +++++++-
 tests/layouts/valid-18.layout   |  51 ++++++++++-
 tests/layouts/valid-19.layout   | 183 ++++++++++++++++++++++++++++++++++++----
 tests/layouts/valid-2.layout    |  81 ++++++++++++++++--
 tests/layouts/valid-20.layout   |  33 +++++++-
 tests/layouts/valid-22.layout   | 129 ++++++++++++++++++++++++++--
 tests/layouts/valid-3.layout    |  50 +++++++++--
 tests/layouts/valid-4.layout    |  81 ++++++++++++++++--
 tests/layouts/valid-5.layout    |  97 +++++++++++++++++++--
 tests/layouts/valid-6.layout    |  52 ++++++++++--
 tests/layouts/valid-7.layout    |  65 +++++++++++++-
 tests/layouts/valid-8.layout    |  70 +++++++++++++--
 tests/layouts/valid-9.layout    |  84 ++++++++++++++++--
 tests/meson.build               |   9 +-
 tests/test-layout.c             | 110 +++++++++++++-----------
 32 files changed, 1681 insertions(+), 205 deletions(-)
---
diff --git a/tests/fonts/Cantarell-VF.otf b/tests/fonts/Cantarell-VF.otf
new file mode 100644
index 00000000..cd2ccf42
Binary files /dev/null and b/tests/fonts/Cantarell-VF.otf differ
diff --git a/tests/fonts/DejaVuSans.ttf b/tests/fonts/DejaVuSans.ttf
new file mode 100644
index 00000000..46bb331e
Binary files /dev/null and b/tests/fonts/DejaVuSans.ttf differ
diff --git a/tests/fonts/emoji-subset.ttf b/tests/fonts/emoji-subset.ttf
new file mode 100644
index 00000000..2addf727
Binary files /dev/null and b/tests/fonts/emoji-subset.ttf differ
diff --git a/tests/layouts/bratwurst.layout b/tests/layouts/bratwurst.layout
index 8102e2da..ddfe44c2 100644
--- a/tests/layouts/bratwurst.layout
+++ b/tests/layouts/bratwurst.layout
@@ -32,6 +32,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 202752,
     "height" : 53248,
     "log-attrs" : [
@@ -111,7 +112,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -151,7 +166,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold Oblique 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/bratwurst2.layout b/tests/layouts/bratwurst2.layout
index 701a0b37..0fb44a24 100644
--- a/tests/layouts/bratwurst2.layout
+++ b/tests/layouts/bratwurst2.layout
@@ -25,6 +25,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 202752,
     "height" : 53248,
     "log-attrs" : [
@@ -104,7 +105,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/bratwurst3.layout b/tests/layouts/bratwurst3.layout
index fe5107d9..7d58668b 100644
--- a/tests/layouts/bratwurst3.layout
+++ b/tests/layouts/bratwurst3.layout
@@ -26,6 +26,7 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 78848,
     "height" : 212992,
     "log-attrs" : [
@@ -105,7 +106,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 4,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -146,7 +161,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 4,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -187,7 +216,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 4,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -228,7 +271,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/bratwurst4.layout b/tests/layouts/bratwurst4.layout
index 311a1984..66c76828 100644
--- a/tests/layouts/bratwurst4.layout
+++ b/tests/layouts/bratwurst4.layout
@@ -27,6 +27,7 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 115712,
     "height" : 106496,
     "log-attrs" : [
@@ -112,7 +113,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 4,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -171,7 +186,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/effigy.layout b/tests/layouts/effigy.layout
index 62fa596f..a2275d45 100644
--- a/tests/layouts/effigy.layout
+++ b/tests/layouts/effigy.layout
@@ -27,7 +27,8 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
-    "width" : 71680,
+    "unknown-glyphs" : 0,
+    "width" : 73728,
     "height" : 102400,
     "log-attrs" : [
       {
@@ -91,7 +92,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "DejaVu Sans 32",
+            "font" : {
+              "description" : "DejaVu Sans 32",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 4,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -105,13 +117,13 @@
               },
               {
                 "glyph" : 5041,
-                "width" : 29696,
+                "width" : 30720,
                 "is-cluster-start" : true,
                 "log-cluster" : 1
               },
               {
                 "glyph" : 2803,
-                "width" : 15360,
+                "width" : 16384,
                 "log-cluster" : 1
               }
             ]
@@ -132,7 +144,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "DejaVu Sans 32",
+            "font" : {
+              "description" : "DejaVu Sans 32",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -162,4 +185,4 @@
       }
     ]
   }
-}
+}
\ No newline at end of file
diff --git a/tests/layouts/kebab.layout b/tests/layouts/kebab.layout
index ce41c9b4..a62117ae 100644
--- a/tests/layouts/kebab.layout
+++ b/tests/layouts/kebab.layout
@@ -26,6 +26,7 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 126976,
     "height" : 106496,
     "log-attrs" : [
@@ -120,7 +121,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -180,7 +195,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Bold 32",
+            "font" : {
+              "description" : "Cantarell Bold 32",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 8374
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-1.layout b/tests/layouts/valid-1.layout
index 0a966d4f..8fc1429a 100644
--- a/tests/layouts/valid-1.layout
+++ b/tests/layouts/valid-1.layout
@@ -36,6 +36,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : true,
+    "unknown-glyphs" : 0,
     "width" : 225280,
     "height" : 37888,
     "log-attrs" : [
@@ -357,7 +358,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -505,7 +520,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -601,7 +630,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "common",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 2,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-10.layout b/tests/layouts/valid-10.layout
index 51dc9ad0..ef6298d5 100644
--- a/tests/layouts/valid-10.layout
+++ b/tests/layouts/valid-10.layout
@@ -23,6 +23,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : true,
+    "unknown-glyphs" : 0,
     "width" : 102400,
     "height" : 38912,
     "log-attrs" : [
@@ -178,7 +179,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -230,7 +245,18 @@
             "gravity" : "south",
             "language" : "he",
             "script" : "hebrew",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -250,13 +276,13 @@
               },
               {
                 "glyph" : 1331,
-                "width" : 8192,
+                "width" : 9216,
                 "is-cluster-start" : true,
                 "log-cluster" : 2
               },
               {
                 "glyph" : 1344,
-                "width" : 10240,
+                "width" : 11264,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               }
@@ -270,15 +296,29 @@
             "gravity" : "south",
             "language" : "he",
             "script" : "hebrew",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
             "end-x-offset" : 0,
             "glyphs" : [
               {
-                "glyph" : 3,
-                "width" : 5120,
+                "glyph" : 1109,
+                "width" : 3072,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               }
@@ -292,7 +332,21 @@
             "gravity" : "south",
             "language" : "el",
             "script" : "greek",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -314,7 +368,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "common",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 2,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-11.layout b/tests/layouts/valid-11.layout
index 683cf696..d743acea 100644
--- a/tests/layouts/valid-11.layout
+++ b/tests/layouts/valid-11.layout
@@ -58,6 +58,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 109568,
     "height" : 38912,
     "log-attrs" : [
@@ -189,7 +190,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -253,7 +268,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -275,7 +304,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -323,7 +366,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -345,7 +402,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-12.layout b/tests/layouts/valid-12.layout
index 96362eb3..b7ee6ddf 100644
--- a/tests/layouts/valid-12.layout
+++ b/tests/layouts/valid-12.layout
@@ -30,8 +30,9 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 1,
     "width" : 113664,
-    "height" : 59392,
+    "height" : 56320,
     "log-attrs" : [
       {
         "char-break" : true,
@@ -389,7 +390,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -555,7 +570,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -585,7 +614,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-13.layout b/tests/layouts/valid-13.layout
index 3bb98ce7..dadd40f0 100644
--- a/tests/layouts/valid-13.layout
+++ b/tests/layouts/valid-13.layout
@@ -31,8 +31,9 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 2,
     "width" : 219136,
-    "height" : 21504,
+    "height" : 18432,
     "log-attrs" : [
       {
         "char-break" : true,
@@ -390,7 +391,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -562,7 +577,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -590,7 +619,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-14.layout b/tests/layouts/valid-14.layout
index 255f51da..09894b52 100644
--- a/tests/layouts/valid-14.layout
+++ b/tests/layouts/valid-14.layout
@@ -23,8 +23,9 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : true,
+    "unknown-glyphs" : 0,
     "width" : 161792,
-    "height" : 48128,
+    "height" : 47104,
     "log-attrs" : [
       {
         "char-break" : true,
@@ -195,13 +196,27 @@
         "runs" : [
           {
             "offset" : 0,
-            "length" : 3,
-            "text" : "你",
+            "length" : 6,
+            "text" : "你好",
             "bidi-level" : 0,
             "gravity" : "south",
             "language" : "en-us",
             "script" : "common",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 2,
             "extra-attributes" : [
               {
@@ -227,36 +242,44 @@
               },
               {
                 "glyph" : 1058,
-                "width" : 4096,
+                "width" : 16384,
                 "log-cluster" : 0
               }
             ]
           },
           {
-            "offset" : 3,
-            "length" : 4,
-            "text" : "好 ",
+            "offset" : 6,
+            "length" : 1,
+            "text" : " ",
             "bidi-level" : 0,
             "gravity" : "south",
             "language" : "xx",
             "script" : "han",
-            "font" : "Droid Sans 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
             "end-x-offset" : 0,
             "glyphs" : [
               {
-                "glyph" : 1300,
-                "width" : 15360,
+                "glyph" : 1109,
+                "width" : 3072,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
-              },
-              {
-                "glyph" : 268435488,
-                "width" : 0,
-                "is-cluster-start" : true,
-                "log-cluster" : 3
               }
             ]
           },
@@ -268,7 +291,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -320,7 +357,18 @@
             "gravity" : "south",
             "language" : "he",
             "script" : "hebrew",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -340,13 +388,13 @@
               },
               {
                 "glyph" : 1331,
-                "width" : 8192,
+                "width" : 9216,
                 "is-cluster-start" : true,
                 "log-cluster" : 2
               },
               {
                 "glyph" : 1344,
-                "width" : 10240,
+                "width" : 11264,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               }
@@ -360,15 +408,29 @@
             "gravity" : "south",
             "language" : "he",
             "script" : "hebrew",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
             "end-x-offset" : 0,
             "glyphs" : [
               {
-                "glyph" : 3,
-                "width" : 5120,
+                "glyph" : 1109,
+                "width" : 3072,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               }
@@ -382,7 +444,21 @@
             "gravity" : "south",
             "language" : "el",
             "script" : "greek",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-15.layout b/tests/layouts/valid-15.layout
index ac7ab3e9..8bcec049 100644
--- a/tests/layouts/valid-15.layout
+++ b/tests/layouts/valid-15.layout
@@ -23,6 +23,7 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : true,
+    "unknown-glyphs" : 0,
     "width" : 153600,
     "height" : 36864,
     "log-attrs" : [
@@ -652,7 +653,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -826,7 +841,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -962,7 +991,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "common",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 2,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-16.layout b/tests/layouts/valid-16.layout
index 0f1b8698..8c80be6d 100644
--- a/tests/layouts/valid-16.layout
+++ b/tests/layouts/valid-16.layout
@@ -24,6 +24,7 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : true,
+    "unknown-glyphs" : 0,
     "width" : 153600,
     "height" : 56320,
     "log-attrs" : [
@@ -653,7 +654,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -827,7 +842,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -963,7 +992,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "common",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 2,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-17.layout b/tests/layouts/valid-17.layout
index 8d0ff072..f14c769c 100644
--- a/tests/layouts/valid-17.layout
+++ b/tests/layouts/valid-17.layout
@@ -22,6 +22,7 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 102400,
     "height" : 56320,
     "log-attrs" : [
@@ -152,7 +153,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -266,7 +281,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-18.layout b/tests/layouts/valid-18.layout
index e02c185a..9424a079 100644
--- a/tests/layouts/valid-18.layout
+++ b/tests/layouts/valid-18.layout
@@ -27,8 +27,9 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 9,
     "width" : 295936,
-    "height" : 62464,
+    "height" : 56320,
     "log-attrs" : [
       {
         "char-break" : true,
@@ -343,7 +344,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -462,7 +477,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -499,7 +528,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-19.layout b/tests/layouts/valid-19.layout
index 02b07bf4..aeec29a7 100644
--- a/tests/layouts/valid-19.layout
+++ b/tests/layouts/valid-19.layout
@@ -20,8 +20,9 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
-    "width" : 250880,
-    "height" : 43008,
+    "unknown-glyphs" : 7,
+    "width" : 252928,
+    "height" : 38912,
     "log-attrs" : [
       {
         "char-break" : true,
@@ -206,7 +207,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -246,7 +261,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -254,7 +280,7 @@
             "glyphs" : [
               {
                 "glyph" : 5867,
-                "width" : 15360,
+                "width" : 16384,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               },
@@ -280,7 +306,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -288,7 +325,7 @@
             "glyphs" : [
               {
                 "glyph" : 5867,
-                "width" : 15360,
+                "width" : 16384,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               },
@@ -308,7 +345,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -330,7 +381,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Raqq 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -358,7 +420,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -380,7 +456,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Raqq 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -402,7 +489,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -424,7 +525,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Raqq 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -452,7 +564,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -498,7 +624,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Raqq 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -550,7 +687,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-2.layout b/tests/layouts/valid-2.layout
index 30f062b0..a7e490eb 100644
--- a/tests/layouts/valid-2.layout
+++ b/tests/layouts/valid-2.layout
@@ -34,6 +34,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 200704,
     "height" : 37888,
     "log-attrs" : [
@@ -260,7 +261,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -330,7 +345,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Oblique 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -370,7 +399,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -428,7 +471,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -482,7 +539,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-20.layout b/tests/layouts/valid-20.layout
index 4f799fd9..e82eec6d 100644
--- a/tests/layouts/valid-20.layout
+++ b/tests/layouts/valid-20.layout
@@ -38,6 +38,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 76800,
     "height" : 44032,
     "log-attrs" : [
@@ -109,7 +110,21 @@
             "gravity" : "east",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Rotated-Left 11",
+            "font" : {
+              "description" : "Cantarell Rotated-Left 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -161,7 +176,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-22.layout b/tests/layouts/valid-22.layout
index e5e5970e..5596cb19 100644
--- a/tests/layouts/valid-22.layout
+++ b/tests/layouts/valid-22.layout
@@ -100,6 +100,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 49152,
     "height" : 41090,
     "log-attrs" : [
@@ -204,7 +205,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -226,7 +241,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell Oblique 7.1484375",
+            "font" : {
+              "description" : "Cantarell 7.1484375",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -262,7 +291,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -302,7 +345,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 7.1484375",
+            "font" : {
+              "description" : "Cantarell 7.1484375",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -338,7 +395,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 4.646484375",
+            "font" : {
+              "description" : "Cantarell 4.646484375",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -386,7 +457,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 3.0205078125",
+            "font" : {
+              "description" : "Cantarell 3.0205078125",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -446,7 +531,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 1.962890625",
+            "font" : {
+              "description" : "Cantarell 1.962890625",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -518,7 +617,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 1.2763671875",
+            "font" : {
+              "description" : "Cantarell 1.2763671875",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
diff --git a/tests/layouts/valid-3.layout b/tests/layouts/valid-3.layout
index a40e605e..b0310eaa 100644
--- a/tests/layouts/valid-3.layout
+++ b/tests/layouts/valid-3.layout
@@ -20,7 +20,8 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
-    "width" : 53248,
+    "unknown-glyphs" : 0,
+    "width" : 54272,
     "height" : 38912,
     "log-attrs" : [
       {
@@ -91,7 +92,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -125,7 +140,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -133,7 +159,7 @@
             "glyphs" : [
               {
                 "glyph" : 5857,
-                "width" : 15360,
+                "width" : 16384,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               },
@@ -153,7 +179,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-4.layout b/tests/layouts/valid-4.layout
index a57f6d63..5cdf02f4 100644
--- a/tests/layouts/valid-4.layout
+++ b/tests/layouts/valid-4.layout
@@ -21,6 +21,7 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 197632,
     "height" : 111616,
     "log-attrs" : [
@@ -897,7 +898,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 4,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -1106,7 +1121,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -1316,7 +1345,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 4,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -1519,7 +1562,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -1735,7 +1792,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-5.layout b/tests/layouts/valid-5.layout
index fa68f67c..66801d85 100644
--- a/tests/layouts/valid-5.layout
+++ b/tests/layouts/valid-5.layout
@@ -29,6 +29,7 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 194560,
     "height" : 130048,
     "log-attrs" : [
@@ -797,7 +798,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -955,7 +970,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -1125,7 +1154,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -1337,7 +1380,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -1465,7 +1522,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -1639,7 +1710,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-6.layout b/tests/layouts/valid-6.layout
index c0b31f13..7f103a8f 100644
--- a/tests/layouts/valid-6.layout
+++ b/tests/layouts/valid-6.layout
@@ -20,8 +20,9 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
-    "width" : 150528,
-    "height" : 40960,
+    "unknown-glyphs" : 1,
+    "width" : 151552,
+    "height" : 38912,
     "log-attrs" : [
       {
         "char-break" : true,
@@ -183,7 +184,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -205,7 +220,18 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -213,7 +239,7 @@
             "glyphs" : [
               {
                 "glyph" : 19,
-                "width" : 9216,
+                "width" : 10240,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               },
@@ -239,7 +265,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-7.layout b/tests/layouts/valid-7.layout
index 882e67c8..5a1fed32 100644
--- a/tests/layouts/valid-7.layout
+++ b/tests/layouts/valid-7.layout
@@ -37,6 +37,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : true,
+    "unknown-glyphs" : 0,
     "width" : 153600,
     "height" : 37888,
     "log-attrs" : [
@@ -358,7 +359,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -446,7 +461,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "common",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 2,
             "extra-attributes" : [
               {
@@ -475,7 +504,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -523,7 +566,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-8.layout b/tests/layouts/valid-8.layout
index ea42ae7a..d8fbee1b 100644
--- a/tests/layouts/valid-8.layout
+++ b/tests/layouts/valid-8.layout
@@ -23,6 +23,7 @@
   "output" : {
     "is-wrapped" : false,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 134144,
     "height" : 90112,
     "log-attrs" : [
@@ -178,7 +179,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -230,7 +245,18 @@
             "gravity" : "south",
             "language" : "he",
             "script" : "hebrew",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
@@ -250,13 +276,13 @@
               },
               {
                 "glyph" : 1331,
-                "width" : 8192,
+                "width" : 9216,
                 "is-cluster-start" : true,
                 "log-cluster" : 2
               },
               {
                 "glyph" : 1344,
-                "width" : 10240,
+                "width" : 11264,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               }
@@ -270,15 +296,29 @@
             "gravity" : "south",
             "language" : "he",
             "script" : "hebrew",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
             "end-x-offset" : 0,
             "glyphs" : [
               {
-                "glyph" : 3,
-                "width" : 5120,
+                "glyph" : 1109,
+                "width" : 3072,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
               }
@@ -292,7 +332,21 @@
             "gravity" : "south",
             "language" : "el",
             "script" : "greek",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "y-offset" : 0,
             "start-x-offset" : 0,
diff --git a/tests/layouts/valid-9.layout b/tests/layouts/valid-9.layout
index e833808e..29e2fad9 100644
--- a/tests/layouts/valid-9.layout
+++ b/tests/layouts/valid-9.layout
@@ -28,8 +28,9 @@
   "output" : {
     "is-wrapped" : true,
     "is-ellipsized" : false,
+    "unknown-glyphs" : 0,
     "width" : 71392,
-    "height" : 93184,
+    "height" : 94208,
     "log-attrs" : [
       {
         "char-break" : true,
@@ -183,7 +184,21 @@
             "gravity" : "south",
             "language" : "en-us",
             "script" : "latin",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -255,7 +270,18 @@
             "gravity" : "south",
             "language" : "he",
             "script" : "hebrew",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "DejaVu Sans 11",
+              "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01",
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -283,14 +309,14 @@
               },
               {
                 "glyph" : 1331,
-                "width" : 17080,
+                "width" : 18104,
                 "x-offset" : 4444,
                 "is-cluster-start" : true,
                 "log-cluster" : 2
               },
               {
                 "glyph" : 1344,
-                "width" : 19128,
+                "width" : 20152,
                 "x-offset" : 4444,
                 "is-cluster-start" : true,
                 "log-cluster" : 0
@@ -305,7 +331,21 @@
             "gravity" : "south",
             "language" : "he",
             "script" : "hebrew",
-            "font" : "DejaVu Sans 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -343,7 +383,21 @@
             "gravity" : "south",
             "language" : "el",
             "script" : "greek",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
@@ -408,7 +462,21 @@
             "gravity" : "south",
             "language" : "el",
             "script" : "greek",
-            "font" : "Cantarell 11",
+            "font" : {
+              "description" : "Cantarell 11",
+              "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
+              "variations" : {
+                "wght" : 0
+              },
+              "matrix" : [
+                1.0,
+                -0.0,
+                -0.0,
+                1.0,
+                0.0,
+                0.0
+              ]
+            },
             "flags" : 0,
             "extra-attributes" : [
               {
diff --git a/tests/meson.build b/tests/meson.build
index 00741a14..ca53d103 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -44,18 +44,23 @@ if cairo_dep.found()
     [ 'testiter', [ 'testiter.c' ], [ libpangocairo_dep ] ],
     [ 'test-ellipsize', [ 'test-ellipsize.c' ], [ libpangocairo_dep ] ],
     [ 'markup-parse', [ 'markup-parse.c' , 'test-common.c' ], [ libpangocairo_dep ] ],
-    [ 'test-layout', [ 'test-layout.c', 'test-common.c' ], [ libpangocairo_dep ] ],
     [ 'test-itemize', [ 'test-itemize.c', 'test-common.c' ], [ libpangocairo_dep ] ],
     [ 'test-shape', [ 'test-shape.c', 'test-common.c' ], [ libpangocairo_dep ] ],
     [ 'test-font', [ 'test-font.c' ], [ libpangocairo_dep ] ],
     [ 'testattributes', [ 'testattributes.c', 'test-common.c' ], [ libpangocairo_dep ] ],
-    [ 'testmisc', [ 'testmisc.c' ], [ libpangocairo_dep, libpangoft2_dep, glib_dep, harfbuzz_dep ] ],
     [ '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 ] ],
+      [ 'test-layout', [ 'test-layout.c', 'test-common.c' ], [ libpangocairo_dep, libpangoft2_dep ] ],
+    ]
+  endif
+
   if host_system != 'darwin'
     tests += [
       [ 'testrandom', [ 'testrandom.c' ], [ libpangocairo_dep, gio_dep ] ],
diff --git a/tests/test-layout.c b/tests/test-layout.c
index 0a4c8d3a..93a6118f 100644
--- a/tests/test-layout.c
+++ b/tests/test-layout.c
@@ -29,44 +29,22 @@
 
 #include "config.h"
 #include <pango/pangocairo.h>
+#include <pango/pangofc-fontmap.h>
 #include "test-common.h"
 
 
-static PangoContext *context;
-
-static GBytes *
-test_bytes (GBytes *orig)
-{
-  GBytes *bytes;
-  GError *error = NULL;
-  PangoLayout *layout;
-
-  if (context == NULL)
-    context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
-
-  layout = pango_layout_deserialize (context, orig, PANGO_LAYOUT_DESERIALIZE_CONTEXT, &error);
-  g_assert_no_error (error);
-
-  bytes = pango_layout_serialize (layout, PANGO_LAYOUT_SERIALIZE_CONTEXT | PANGO_LAYOUT_SERIALIZE_OUTPUT);
-
-  g_object_unref (layout);
-
-  return bytes;
-}
-
 static void
 test_layout (gconstpointer d)
 {
   const char *filename = d;
   GError *error = NULL;
   char *diff;
-  PangoFontFamily **families;
-  int n_families;
-  gboolean found_cantarell;
   GBytes *bytes;
   char *contents;
   gsize length;
   GBytes *orig;
+  PangoContext *context;
+  PangoLayout *layout;
 
   char *old_locale = g_strdup (setlocale (LC_ALL, NULL));
   setlocale (LC_ALL, "en_US.UTF-8");
@@ -79,35 +57,18 @@ test_layout (gconstpointer d)
       return;
     }
 
-  if (context == NULL)
-    context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
-
-  found_cantarell = FALSE;
-  pango_context_list_families (context, &families, &n_families);
-  for (int i = 0; i < n_families; i++)
-    {
-      if (strcmp (pango_font_family_get_name (families[i]), "Cantarell") == 0)
-        {
-          found_cantarell = TRUE;
-          break;
-        }
-    }
-  g_free (families);
-
-  if (!found_cantarell)
-    {
-      char *msg = g_strdup_printf ("Cantarell font not available, skipping layout %s", filename);
-      g_test_skip (msg);
-      g_free (msg);
-      g_free (old_locale);
-      return;
-    }
-
   g_file_get_contents (filename, &contents, &length, &error);
   g_assert_no_error (error);
   orig = g_bytes_new_take (contents, length);
 
-  bytes = test_bytes (orig);
+  context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
+  layout = pango_layout_deserialize (context, orig, PANGO_LAYOUT_DESERIALIZE_CONTEXT, &error);
+  g_assert_no_error (error);
+
+  bytes = pango_layout_serialize (layout, PANGO_LAYOUT_SERIALIZE_CONTEXT | PANGO_LAYOUT_SERIALIZE_OUTPUT);
+
+  g_object_unref (layout);
+  g_object_unref (context);
 
   diff = diff_bytes (bytes, orig, &error);
   g_assert_no_error (error);
@@ -136,15 +97,43 @@ test_layout (gconstpointer d)
   g_free (diff);
 }
 
+static void
+install_fonts (const char *dir)
+{
+  FcConfig *config;
+  PangoFontMap *map;
+  char *conf;
+
+  config = FcConfigCreate ();
+
+  conf = g_strdup_printf ("<?xml version=\"1.0\"?>\n"
+                          "<!DOCTYPE fontconfig SYSTEM \"urn:fontconfig:fonts.dtd\">\n"
+                          "<fontconfig>\n"
+                          "  <cachedir>%s/cache</cachedir>\n"
+                          "</fontconfig>", dir);
+
+  if (!FcConfigParseAndLoadFromMemory (config, (const FcChar8 *) conf, TRUE))
+    g_error ("Failed to parse fontconfig configuration");
+
+  g_free (conf);
+
+  FcConfigAppFontAddDir (config, (const FcChar8 *) dir);
+  map = pango_cairo_font_map_get_default ();
+  pango_fc_font_map_set_config (PANGO_FC_FONT_MAP (map), config);
+  FcConfigDestroy (config);
+}
+
 int
 main (int argc, char *argv[])
 {
   GDir *dir;
   GError *error = NULL;
+  char *opt_fonts = NULL;
   const gchar *name;
   char *path;
   GOptionContext *option_context;
   GOptionEntry entries[] = {
+    { "fonts", 0, 0, G_OPTION_ARG_FILENAME, &opt_fonts, "Fonts to use", "DIR" },
     { NULL, 0 },
   };
 
@@ -160,6 +149,9 @@ main (int argc, char *argv[])
     }
   g_option_context_free (option_context);
 
+  if (opt_fonts)
+    install_fonts (opt_fonts);
+
   /* allow to easily generate expected output for new test cases */
   if (argc > 1 && argv[1][0] != '-')
     {
@@ -168,11 +160,20 @@ main (int argc, char *argv[])
       GError *error = NULL;
       GBytes *orig;
       GBytes *bytes;
+      PangoContext *context;
+      PangoLayout *layout;
 
       g_file_get_contents (argv[1], &contents, &length, &error);
       g_assert_no_error (error);
       orig = g_bytes_new_take (contents, length);
-      bytes = test_bytes (orig);
+      context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
+      layout = pango_layout_deserialize (context, orig, PANGO_LAYOUT_DESERIALIZE_CONTEXT, &error);
+      g_assert_no_error (error);
+
+      bytes = pango_layout_serialize (layout, PANGO_LAYOUT_SERIALIZE_CONTEXT | 
PANGO_LAYOUT_SERIALIZE_OUTPUT);
+
+      g_object_unref (layout);
+      g_object_unref (context);
 
       g_print ("%s", (const char *)g_bytes_get_data (bytes, NULL));
 
@@ -184,6 +185,13 @@ main (int argc, char *argv[])
 
   g_test_init (&argc, &argv, NULL);
 
+  if (!opt_fonts)
+    {
+      path = g_test_build_filename (G_TEST_DIST, "fonts", NULL);
+      install_fonts (path);
+      g_free (path);
+    }
+
   path = g_test_build_filename (G_TEST_DIST, "layouts", NULL);
   dir = g_dir_open (path, 0, &error);
   g_free (path);


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