1da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod/* 2da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * Copyright © 2011 Google, Inc. 3da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * 4da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * This is part of HarfBuzz, a text shaping library. 5da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * 6da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * Permission is hereby granted, without written agreement and without 7da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this 8da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * software and its documentation for any purpose, provided that the 9da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * above copyright notice and the following two paragraphs appear in 10da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * all copies of this software. 11da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * 12da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 13da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 14da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 15da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 16da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * DAMAGE. 17da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * 18da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 19da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 21da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 22da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 23da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * 24da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod * Google Author(s): Behdad Esfahbod 25da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod */ 26da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 27da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod#include "hb-test.h" 28da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 29da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod/* Unit tests for hb-font.h */ 30da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 31da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 322ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbodstatic const char test_data[] = "test\0data"; 332ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 342ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 35da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbodstatic void 36da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbodtest_face_empty (void) 37da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod{ 38da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_face_get_empty ()); 39da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_face_get_empty () == hb_face_create (hb_blob_get_empty (), 0)); 40da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_face_get_empty () == hb_face_create (NULL, 0)); 4174d9fa3d9ac226ed72702884e721ef94ecc48e22Behdad Esfahbod 422ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert (hb_face_reference_table (hb_face_get_empty (), HB_TAG ('h','e','a','d')) == hb_blob_get_empty ()); 432ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 442ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert_cmpint (hb_face_get_upem (hb_face_get_empty ()), ==, 1000); 45da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod} 46da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 47da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbodstatic void 482ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbodtest_face_create (void) 492ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod{ 502ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod hb_face_t *face; 512ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod hb_blob_t *blob; 522ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 532ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod blob = hb_blob_create (test_data, sizeof (test_data), HB_MEMORY_MODE_READONLY, NULL, NULL); 542ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod face = hb_face_create (blob, 0); 552ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod hb_blob_destroy (blob); 562ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 572ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert (hb_face_reference_table (face, HB_TAG ('h','e','a','d')) == hb_blob_get_empty ()); 582ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 592ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert_cmpint (hb_face_get_upem (face), ==, 1000); 602ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 612ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod hb_face_destroy (face); 622ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod} 632ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 642ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 652ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbodstatic void 66ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbodfree_up (void *user_data) 67ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod{ 68ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod int *freed = (int *) user_data; 69ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod 70ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod g_assert (!*freed); 71ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod 72ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod (*freed)++; 73ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod} 74ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod 75ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbodstatic hb_blob_t * 767033518f756490e9cf00b96387fee6f2f7fae785Behdad Esfahbodget_table (hb_face_t *face, hb_tag_t tag, void *user_data) 77ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod{ 782ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod if (tag == HB_TAG ('a','b','c','d')) 792ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod return hb_blob_create (test_data, sizeof (test_data), HB_MEMORY_MODE_READONLY, NULL, NULL); 802ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 81ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod return hb_blob_get_empty (); 82ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod} 83ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod 84ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbodstatic void 852ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbodtest_face_createfortables (void) 86ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod{ 87ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod hb_face_t *face; 882ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod hb_blob_t *blob; 892ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod const char *data; 902ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod unsigned int len; 91ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod int freed = 0; 92ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod 93ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod face = hb_face_create_for_tables (get_table, &freed, free_up); 94ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod g_assert (!freed); 95ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod 962ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert (hb_face_reference_table (face, HB_TAG ('h','e','a','d')) == hb_blob_get_empty ()); 972ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 982ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod blob = hb_face_reference_table (face, HB_TAG ('a','b','c','d')); 992ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert (blob != hb_blob_get_empty ()); 1002ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 1012ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod data = hb_blob_get_data (blob, &len); 1022ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert_cmpint (len, ==, sizeof (test_data)); 1032ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert (0 == memcmp (data, test_data, sizeof (test_data))); 1042ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod hb_blob_destroy (blob); 1052ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 1062ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod g_assert_cmpint (hb_face_get_upem (face), ==, 1000); 1072ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 108ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod hb_face_destroy (face); 109ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod g_assert (freed); 110ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod} 111ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod 11214f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbodstatic void 11314f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod_test_font_nil_funcs (hb_font_t *font) 11414f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod{ 1150fd8c2f1be693616f19f2f1526369874763d6cf6Behdad Esfahbod hb_codepoint_t glyph; 11614f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_position_t x, y; 11714f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_glyph_extents_t extents; 11814f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 11914f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod x = y = 13; 120d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (!hb_font_get_glyph_contour_point (font, 17, 2, &x, &y)); 12114f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (x, ==, 0); 12214f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (y, ==, 0); 12314f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 1242d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod x = hb_font_get_glyph_h_advance (font, 17); 12514f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (x, ==, 0); 12614f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 12714f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod extents.x_bearing = extents.y_bearing = 13; 12814f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod extents.width = extents.height = 15; 129d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod hb_font_get_glyph_extents (font, 17, &extents); 13014f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (extents.x_bearing, ==, 0); 13114f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (extents.y_bearing, ==, 0); 13214f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (extents.width, ==, 0); 13314f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (extents.height, ==, 0); 13414f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 1350fd8c2f1be693616f19f2f1526369874763d6cf6Behdad Esfahbod glyph = 3; 1360fd8c2f1be693616f19f2f1526369874763d6cf6Behdad Esfahbod g_assert (!hb_font_get_glyph (font, 17, 2, &glyph)); 1370fd8c2f1be693616f19f2f1526369874763d6cf6Behdad Esfahbod g_assert_cmpint (glyph, ==, 0); 13814f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 1392d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod x = hb_font_get_glyph_h_kerning (font, 17, 19); 14014f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (x, ==, 0); 14114f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod} 14214f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 14314f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbodstatic void 14414f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod_test_fontfuncs_nil (hb_font_funcs_t *ffuncs) 14514f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod{ 14614f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_blob_t *blob; 14714f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_face_t *face; 14814f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_font_t *font; 14914f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_font_t *subfont; 15014f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod int freed = 0; 15114f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 15214f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod blob = hb_blob_create (test_data, sizeof (test_data), HB_MEMORY_MODE_READONLY, NULL, NULL); 15314f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod face = hb_face_create (blob, 0); 15414f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_blob_destroy (blob); 1557fc5a30cb4fbe9a4633ab842b0a8cbbcc6f6bd1bBehdad Esfahbod g_assert (!hb_face_is_immutable (face)); 15614f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod font = hb_font_create (face); 157744970af4d884cc87ffa645804578fec8df674a9Behdad Esfahbod g_assert (font); 1587fc5a30cb4fbe9a4633ab842b0a8cbbcc6f6bd1bBehdad Esfahbod g_assert (hb_face_is_immutable (face)); 15914f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_face_destroy (face); 16014f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 16114f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 16214f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_font_set_funcs (font, ffuncs, &freed, free_up); 16314f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (freed, ==, 0); 16414f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 16514f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod _test_font_nil_funcs (font); 16614f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 16714f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod subfont = hb_font_create_sub_font (font); 168744970af4d884cc87ffa645804578fec8df674a9Behdad Esfahbod g_assert (subfont); 16914f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 17014f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (freed, ==, 0); 17114f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_font_destroy (font); 17214f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (freed, ==, 0); 17314f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 17414f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod _test_font_nil_funcs (subfont); 17514f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 17614f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_font_destroy (subfont); 17714f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert_cmpint (freed, ==, 1); 17814f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod} 179ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod 180ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbodstatic void 181ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbodtest_fontfuncs_empty (void) 182da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod{ 183da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_font_funcs_get_empty ()); 184da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_font_funcs_is_immutable (hb_font_funcs_get_empty ())); 18514f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod _test_fontfuncs_nil (hb_font_funcs_get_empty ()); 186da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod} 187da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 188da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbodstatic void 189f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbodtest_fontfuncs_nil (void) 1902ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod{ 19114f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_font_funcs_t *ffuncs; 19214f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 19314f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod ffuncs = hb_font_funcs_create (); 19414f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 19514f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod g_assert (!hb_font_funcs_is_immutable (ffuncs)); 19614f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod _test_fontfuncs_nil (hb_font_funcs_get_empty ()); 19714f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod 19814f1e81b77971204e9325e2a8b6f8b690fac20a7Behdad Esfahbod hb_font_funcs_destroy (ffuncs); 1992ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod} 2002ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 201f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbodstatic hb_bool_t 202f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbodcontour_point_func1 (hb_font_t *font, void *font_data, 203f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_codepoint_t glyph, unsigned int point_index, 204f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_position_t *x, hb_position_t *y, 205f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod void *user_data) 206f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod{ 207f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod if (glyph == 1) { 208f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod *x = 2; 209f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod *y = 3; 210f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod return TRUE; 211f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod } 212f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod if (glyph == 2) { 213f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod *x = 4; 214f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod *y = 5; 215f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod return TRUE; 216f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod } 217f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 218f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod return FALSE; 219f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod} 220f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 221f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbodstatic hb_bool_t 222f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbodcontour_point_func2 (hb_font_t *font, void *font_data, 223f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_codepoint_t glyph, unsigned int point_index, 224f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_position_t *x, hb_position_t *y, 225f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod void *user_data) 226f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod{ 227f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod if (glyph == 1) { 228f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod *x = 6; 229f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod *y = 7; 230f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod return TRUE; 231f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod } 232f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 233d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod return hb_font_get_glyph_contour_point (hb_font_get_parent (font), 234d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod glyph, point_index, x, y); 235f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod} 236f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 2372d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbodstatic hb_position_t 238744970af4d884cc87ffa645804578fec8df674a9Behdad Esfahbodglyph_h_advance_func1 (hb_font_t *font, void *font_data, 239744970af4d884cc87ffa645804578fec8df674a9Behdad Esfahbod hb_codepoint_t glyph, 240744970af4d884cc87ffa645804578fec8df674a9Behdad Esfahbod void *user_data) 241f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod{ 2422d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod if (glyph == 1) 2432d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod return 8; 2442d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod 2452d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod return 0; 246f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod} 247f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 248f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbodstatic void 249f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbodtest_fontfuncs_subclassing (void) 250f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod{ 251f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_blob_t *blob; 252f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_face_t *face; 253f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 254f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_funcs_t *ffuncs1; 255f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_funcs_t *ffuncs2; 256f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 257f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_t *font1; 258f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_t *font2; 259f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_t *font3; 260f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 261f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_position_t x; 262f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_position_t y; 263f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 264f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod blob = hb_blob_create (test_data, sizeof (test_data), HB_MEMORY_MODE_READONLY, NULL, NULL); 265f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod face = hb_face_create (blob, 0); 266f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_blob_destroy (blob); 267f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod font1 = hb_font_create (face); 268f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_face_destroy (face); 269f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_set_scale (font1, 10, 10); 270f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 271f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod /* setup font1 */ 272f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod ffuncs1 = hb_font_funcs_create (); 273d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod hb_font_funcs_set_glyph_contour_point_func (ffuncs1, contour_point_func1, NULL, NULL); 274744970af4d884cc87ffa645804578fec8df674a9Behdad Esfahbod hb_font_funcs_set_glyph_h_advance_func (ffuncs1, glyph_h_advance_func1, NULL, NULL); 275f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_set_funcs (font1, ffuncs1, NULL, NULL); 276f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_funcs_destroy (ffuncs1); 277f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 278f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod x = y = 1; 279d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (hb_font_get_glyph_contour_point_for_origin (font1, 1, 2, HB_DIRECTION_LTR, &x, &y)); 280f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 2); 281f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 3); 282d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (hb_font_get_glyph_contour_point_for_origin (font1, 2, 5, HB_DIRECTION_LTR, &x, &y)); 283f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 4); 284f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 5); 285d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (!hb_font_get_glyph_contour_point_for_origin (font1, 3, 7, HB_DIRECTION_RTL, &x, &y)); 286f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 0); 287f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 0); 2882d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod x = hb_font_get_glyph_h_advance (font1, 1); 289f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 8); 2902d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod x = hb_font_get_glyph_h_advance (font1, 2); 291f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 0); 292f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 293f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 294f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod font2 = hb_font_create_sub_font (font1); 295f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert (hb_font_is_immutable (font1)); 296f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_destroy (font1); 297f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 298f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod /* setup font2 to override some funcs */ 299f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod ffuncs2 = hb_font_funcs_create (); 300d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod hb_font_funcs_set_glyph_contour_point_func (ffuncs2, contour_point_func2, NULL, NULL); 301f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_set_funcs (font2, ffuncs2, NULL, NULL); 302f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_funcs_destroy (ffuncs2); 303f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 304f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod x = y = 1; 305d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (hb_font_get_glyph_contour_point_for_origin (font2, 1, 2, HB_DIRECTION_LTR, &x, &y)); 306f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 6); 307f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 7); 308d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (hb_font_get_glyph_contour_point_for_origin (font2, 2, 5, HB_DIRECTION_RTL, &x, &y)); 309f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 4); 310f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 5); 311d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (!hb_font_get_glyph_contour_point_for_origin (font2, 3, 7, HB_DIRECTION_LTR, &x, &y)); 312f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 0); 313f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 0); 3142d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod x = hb_font_get_glyph_h_advance (font2, 1); 315f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 8); 3162d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod x = hb_font_get_glyph_h_advance (font2, 2); 317f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 0); 318f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 319f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 320f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod font3 = hb_font_create_sub_font (font2); 321f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert (hb_font_is_immutable (font2)); 322f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_destroy (font2); 323f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 324f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod /* setup font3 to override scale */ 325f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_set_scale (font3, 20, 30); 326f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 327f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod x = y = 1; 328d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (hb_font_get_glyph_contour_point_for_origin (font3, 1, 2, HB_DIRECTION_RTL, &x, &y)); 329f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 6*2); 330f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 7*3); 331d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (hb_font_get_glyph_contour_point_for_origin (font3, 2, 5, HB_DIRECTION_LTR, &x, &y)); 332f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 4*2); 333f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 5*3); 334d31691296f7d3051fcd345bf1325d17835484b50Behdad Esfahbod g_assert (!hb_font_get_glyph_contour_point_for_origin (font3, 3, 7, HB_DIRECTION_LTR, &x, &y)); 335f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 0*2); 336f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (y, ==, 0*3); 3372d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod x = hb_font_get_glyph_h_advance (font3, 1); 338f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 8*2); 3392d8ebcb9d089c2cfbefac71ca6350e2703ab13e3Behdad Esfahbod x = hb_font_get_glyph_h_advance (font3, 2); 340f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod g_assert_cmpint (x, ==, 0*2); 341f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 342f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 343f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_font_destroy (font3); 344f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod} 345f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod 3462ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod 3472ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbodstatic void 348da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbodtest_font_empty (void) 349da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod{ 350da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_font_get_empty ()); 351da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_font_get_empty () == hb_font_create (hb_face_get_empty ())); 352da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_font_get_empty () == hb_font_create (NULL)); 353da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_font_get_empty () == hb_font_create_sub_font (NULL)); 354da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod g_assert (hb_font_is_immutable (hb_font_get_empty ())); 35574d9fa3d9ac226ed72702884e721ef94ecc48e22Behdad Esfahbod 35674d9fa3d9ac226ed72702884e721ef94ecc48e22Behdad Esfahbod g_assert (hb_font_get_face (hb_font_get_empty ()) == hb_face_get_empty ()); 35774d9fa3d9ac226ed72702884e721ef94ecc48e22Behdad Esfahbod g_assert (hb_font_get_parent (hb_font_get_empty ()) == NULL); 358da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod} 359da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 360606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbodstatic void 361606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbodtest_font_properties (void) 362606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod{ 363606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_blob_t *blob; 364606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_face_t *face; 365606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_t *font; 366cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_t *subfont; 367606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod int x_scale, y_scale; 368606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod unsigned int x_ppem, y_ppem; 369606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 370606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod blob = hb_blob_create (test_data, sizeof (test_data), HB_MEMORY_MODE_READONLY, NULL, NULL); 371606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod face = hb_face_create (blob, 0); 372606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_blob_destroy (blob); 373606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod font = hb_font_create (face); 374606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_face_destroy (face); 375606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 376606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 377db9f4eb4e004fadae9d540522d1d21c3bbe659b0Behdad Esfahbod g_assert (hb_font_get_face (font) == face); 378db9f4eb4e004fadae9d540522d1d21c3bbe659b0Behdad Esfahbod g_assert (hb_font_get_parent (font) == NULL); 379db9f4eb4e004fadae9d540522d1d21c3bbe659b0Behdad Esfahbod 380db9f4eb4e004fadae9d540522d1d21c3bbe659b0Behdad Esfahbod 381606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod /* Check scale */ 382606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 383606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_scale (font, NULL, NULL); 384606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_scale = y_scale = 13; 385606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_scale (font, &x_scale, NULL); 386606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (x_scale, ==, 0); 387606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_scale = y_scale = 13; 388606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_scale (font, NULL, &y_scale); 389606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (y_scale, ==, 0); 390606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_scale = y_scale = 13; 391606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_scale (font, &x_scale, &y_scale); 392606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (x_scale, ==, 0); 393606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (y_scale, ==, 0); 394606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 395606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_set_scale (font, 17, 19); 396606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 397606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_scale = y_scale = 13; 398606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_scale (font, &x_scale, &y_scale); 399606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (x_scale, ==, 17); 400606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (y_scale, ==, 19); 401606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 402606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 403606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod /* Check ppem */ 404606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 405606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_ppem (font, NULL, NULL); 406606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_ppem = y_ppem = 13; 407606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_ppem (font, &x_ppem, NULL); 408606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (x_ppem, ==, 0); 409606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_ppem = y_ppem = 13; 410606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_ppem (font, NULL, &y_ppem); 411606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (y_ppem, ==, 0); 412606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_ppem = y_ppem = 13; 413606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_ppem (font, &x_ppem, &y_ppem); 414606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (x_ppem, ==, 0); 415606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (y_ppem, ==, 0); 416606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 417606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_set_ppem (font, 17, 19); 418606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 419606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_ppem = y_ppem = 13; 420606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_ppem (font, &x_ppem, &y_ppem); 421606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (x_ppem, ==, 17); 422606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (y_ppem, ==, 19); 423606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 424606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 425606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod /* Check immutable */ 426606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 427606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert (!hb_font_is_immutable (font)); 428606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_make_immutable (font); 429606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert (hb_font_is_immutable (font)); 430606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 431606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_set_scale (font, 10, 12); 432606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_scale = y_scale = 13; 433606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_scale (font, &x_scale, &y_scale); 434606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (x_scale, ==, 17); 435606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (y_scale, ==, 19); 436606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 437606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_set_ppem (font, 10, 12); 438606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod x_ppem = y_ppem = 13; 439606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_get_ppem (font, &x_ppem, &y_ppem); 440606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (x_ppem, ==, 17); 441606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod g_assert_cmpint (y_ppem, ==, 19); 442606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 443606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 444cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod /* sub_font now */ 445cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod subfont = hb_font_create_sub_font (font); 446606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_font_destroy (font); 447cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod 448cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert (hb_font_get_parent (subfont) == font); 449cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert (hb_font_get_face (subfont) == face); 450cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod 451cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod /* scale */ 452cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod x_scale = y_scale = 13; 453cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_get_scale (subfont, &x_scale, &y_scale); 454cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (x_scale, ==, 17); 455cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (y_scale, ==, 19); 456cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_set_scale (subfont, 10, 12); 457cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod x_scale = y_scale = 13; 458cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_get_scale (subfont, &x_scale, &y_scale); 459cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (x_scale, ==, 10); 460cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (y_scale, ==, 12); 461cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod x_scale = y_scale = 13; 462cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_get_scale (font, &x_scale, &y_scale); 463cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (x_scale, ==, 17); 464cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (y_scale, ==, 19); 465cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod 466cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod /* ppem */ 467cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod x_ppem = y_ppem = 13; 468cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_get_ppem (subfont, &x_ppem, &y_ppem); 469cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (x_ppem, ==, 17); 470cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (y_ppem, ==, 19); 471cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_set_ppem (subfont, 10, 12); 472cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod x_ppem = y_ppem = 13; 473cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_get_ppem (subfont, &x_ppem, &y_ppem); 474cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (x_ppem, ==, 10); 475cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (y_ppem, ==, 12); 476cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod x_ppem = y_ppem = 13; 477cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_get_ppem (font, &x_ppem, &y_ppem); 478cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (x_ppem, ==, 17); 479cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod g_assert_cmpint (y_ppem, ==, 19); 480cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod 481cdb153175f8a1521cde112c65b173f548ca6ee5cBehdad Esfahbod hb_font_destroy (subfont); 482606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod} 483606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod 484da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbodint 485da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbodmain (int argc, char **argv) 486da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod{ 487da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod hb_test_init (&argc, &argv); 488da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 489da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod hb_test_add (test_face_empty); 4902ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod hb_test_add (test_face_create); 4912ca0b5ae1e65d3f43df3a4a2144a1451d8b485c4Behdad Esfahbod hb_test_add (test_face_createfortables); 492da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 493ea93e7b27ca04a1655d62bd1d18a32805994af44Behdad Esfahbod hb_test_add (test_fontfuncs_empty); 494f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_test_add (test_fontfuncs_nil); 495f2c1dd4f746c36a44cf33d0257a3cd800107c286Behdad Esfahbod hb_test_add (test_fontfuncs_subclassing); 496da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 497da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod hb_test_add (test_font_empty); 498606923bb4304d5b9cf164745d657cba58949a80aBehdad Esfahbod hb_test_add (test_font_properties); 499da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod 500da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod return hb_test_run(); 501da603e80386b41b360acb070a862b6ed87da57b8Behdad Esfahbod} 502