186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod/*
286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * Copyright © 2016  Igalia S.L.
386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod *
486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod *  This is part of HarfBuzz, a text shaping library.
586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod *
686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * Permission is hereby granted, without written agreement and without
786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * software and its documentation for any purpose, provided that the
986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * above copyright notice and the following two paragraphs appear in
1086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * all copies of this software.
1186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod *
1286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
1386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
1486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
1586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
1686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * DAMAGE.
1786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod *
1886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
1986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
2086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
2186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
2286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod *
2486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod * Igalia Author(s): Frédéric Wang
2586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod */
2686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
2786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
2886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod#include "hb-test.h"
2986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
3086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod#include "hb-ft.h"
3186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod#include "hb-ot.h"
3286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
3386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod/* Unit tests for hb-ot-math.h - OpenType MATH table  */
3486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
3586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic FT_Library ft_library;
3686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic FT_Face ft_face;
3786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic hb_font_t *hb_font;
3886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic hb_face_t *hb_face;
3986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
4086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic inline void
4186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad EsfahbodinitFreeType (void)
4286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
4386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  FT_Error ft_error;
4486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  if ((ft_error = FT_Init_FreeType (&ft_library)))
4586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod    abort();
4686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
4786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
4886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic inline void
4986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad EsfahbodcleanupFreeType (void)
5086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
5186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  FT_Done_FreeType (ft_library);
5286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
5386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
5486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void
5586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad EsfahbodopenFont(const char* fontFile)
5686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
571c98ff87c76536553e53c131e75aba33033ee3a0Mike Hommey#if GLIB_CHECK_VERSION(2,37,2)
5886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  gchar* path = g_test_build_filename(G_TEST_DIST, fontFile, NULL);
591c98ff87c76536553e53c131e75aba33033ee3a0Mike Hommey#else
601c98ff87c76536553e53c131e75aba33033ee3a0Mike Hommey  gchar* path = g_strdup(fontFile);
611c98ff87c76536553e53c131e75aba33033ee3a0Mike Hommey#endif
6286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
6386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  FT_Error ft_error;
6486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  if ((ft_error = FT_New_Face (ft_library, path, 0, &ft_face))) {
6586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod    g_free(path);
6686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod    abort();
6786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  }
6886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_free(path);
6986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
70edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  if ((ft_error = FT_Set_Char_Size (ft_face, 2000, 1000, 0, 0)))
7186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod    abort();
7286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_font = hb_ft_font_create (ft_face, NULL);
732f2ceee1853649d1b2ad4315a38cd9c07659932aBehdad Esfahbod  hb_face = hb_face_reference (hb_font_get_face (hb_font));
7486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
7586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
7686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic inline void
7786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad EsfahbodcloseFont (void)
7886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
792f2ceee1853649d1b2ad4315a38cd9c07659932aBehdad Esfahbod  hb_face_destroy (hb_face);
8086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_font_destroy (hb_font);
8186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  FT_Done_Face (ft_face);
82331d07bd40a3d9ff30db5cdf85fdc4f10f0fcb99Behdad Esfahbod  hb_face = NULL;
83331d07bd40a3d9ff30db5cdf85fdc4f10f0fcb99Behdad Esfahbod  hb_font = NULL;
84331d07bd40a3d9ff30db5cdf85fdc4f10f0fcb99Behdad Esfahbod  ft_face = NULL;
8586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
8686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
8786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void
8886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_has_data (void)
8986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
9086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  initFreeType();
9186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
9286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontNone.otf");
9386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(!hb_ot_math_has_data (hb_face)); // MATH table not available
9486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
9586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
9686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontEmpty.otf");
9786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_ot_math_has_data (hb_face)); // MATH table available
9886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
9986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
100a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod  hb_face = hb_face_get_empty ();
101a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod  hb_font = hb_font_create (hb_face);
102a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod  g_assert(!hb_ot_math_has_data (hb_face)); // MATH table not available
103a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod
104a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod  hb_font = hb_font_get_empty ();
105a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod  hb_face = hb_font_get_face (hb_font);
106a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod  g_assert(!hb_ot_math_has_data (hb_face)); // MATH table not available
107a8a5e81a52f56f5f8bf975dc4d9f79bede5d895bBehdad Esfahbod
10886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  cleanupFreeType();
10986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
11086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
11186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void
11286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_get_constant (void)
11386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
11486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  initFreeType();
11586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
11686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontEmpty.otf");
11786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT), ==, 0); // MathConstants not available
11886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
11986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
12086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontFull.otf");
12186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT)), ==, 100);
12286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT)), ==, 200);
12386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_MATH_LEADING)), ==, 300);
12486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_AXIS_HEIGHT)), ==, 400);
12586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT)), ==, 500);
12686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT)), ==, 600);
12786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN)), ==, 700);
12886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX)), ==, 800);
12986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN)), ==, 900);
13086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP)), ==, 1100);
13186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED)), ==, 1200);
13286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN)), ==, 1300);
13386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX)), ==, 1400);
13486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN)), ==, 1500);
13586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT)), ==, 1600);
136edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT)), ==, 3400);
13786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN)), ==, 1800);
13886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN)), ==, 1900);
13986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN)), ==, 2200);
14086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN)), ==, 2300);
14186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP)), ==, 2400);
14286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP)), ==, 2500);
14386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN)), ==, 2600);
14486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN)), ==, 2700);
14586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_GAP_MIN)), ==, 2800);
14686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN)), ==, 2900);
14786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP)), ==, 3000);
14886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN)), ==, 3100);
14986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN)), ==, 3200);
15086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN)), ==, 3300);
15186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP)), ==, 3400);
15286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP)), ==, 3500);
15386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN)), ==, 3600);
15486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN)), ==, 3700);
15586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN)), ==, 3800);
15686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN)), ==, 3900);
15786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS)), ==, 4000);
15886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN)), ==, 4100);
15986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN)), ==, 4200);
160edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP)), ==, 8600);
16186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP)), ==, 4400);
16286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP)), ==, 4500);
16386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS)), ==, 4600);
16486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER)), ==, 4700);
16586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP)), ==, 4800);
16686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS)), ==, 4900);
16786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER)), ==, 5000);
16886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP)), ==, 5100);
16986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP)), ==, 5200);
17086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS)), ==, 5300);
17186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER)), ==, 5400);
172edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE)), ==, 11000);
173edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE)), ==, 11200);
17486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN)), ==, 87);
17586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN)), ==, 76);
17686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint((hb_ot_math_get_constant (hb_font, HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT)), ==, 65);
17786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
17886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
17986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  cleanupFreeType();
18086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
18186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
18286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void
18386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_get_glyph_italics_correction (void)
18486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
18586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_codepoint_t glyph;
18686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  initFreeType();
18786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
18886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontEmpty.otf");
18986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
19086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 0); // MathGlyphInfo not available
19186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
19286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
19386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial1.otf");
19486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
19586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 0); // MathGlyphInfo empty
19686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
19786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
19886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial2.otf");
19986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
20086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 0); // MathItalicsCorrectionInfo empty
20186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
20286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
20386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontFull.otf");
20486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
20586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 0); // Glyph without italic correction.
20686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "A", -1, &glyph));
207edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 394);
20886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "B", -1, &glyph));
209edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 300);
21086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "C", -1, &glyph));
211edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_italics_correction (hb_font, glyph), ==, 904);
21286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
21386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
21486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  cleanupFreeType();
21586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
21686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
21786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void
21886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_get_glyph_top_accent_attachment (void)
21986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
22086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_codepoint_t glyph;
22186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  initFreeType();
22286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
22386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontEmpty.otf");
22486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
225edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 1000); // MathGlyphInfo not available
22686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
22786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
22886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial1.otf");
22986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
230edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 1000); // MathGlyphInfo empty
23186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
23286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
23386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial2.otf");
23486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
235edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 1000); // MathTopAccentAttachment empty
23686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
23786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
23886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontFull.otf");
23986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
240edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 1000); // Glyph without top accent attachment.
24186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "D", -1, &glyph));
242edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 748);
24386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "E", -1, &glyph));
244edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 692);
24586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "F", -1, &glyph));
246edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_top_accent_attachment (hb_font, glyph), ==, 636);
24786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
24886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
24986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  cleanupFreeType();
25086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
25186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
25286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void
25386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_is_glyph_extended_shape (void)
25486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
25586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_codepoint_t glyph;
25686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  initFreeType();
25786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
25886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontEmpty.otf");
25986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
26086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(!hb_ot_math_is_glyph_extended_shape (hb_face, glyph)); // MathGlyphInfo not available
26186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
26286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
26386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial1.otf");
26486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
26586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(!hb_ot_math_is_glyph_extended_shape (hb_face, glyph)); // MathGlyphInfo empty
26686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
26786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
26886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontFull.otf");
26986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "G", -1, &glyph));
27086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(!hb_ot_math_is_glyph_extended_shape (hb_face, glyph));
27186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "H", -1, &glyph));
27286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_ot_math_is_glyph_extended_shape (hb_face, glyph));
27386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
27486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
27586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  cleanupFreeType();
27686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
27786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
27886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodstatic void
27986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodtest_get_glyph_kerning (void)
28086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
28186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_codepoint_t glyph;
28286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  initFreeType();
28386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
28486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontEmpty.otf");
28586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
28686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 0), ==, 0); // MathGlyphInfo not available
28786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_LEFT, 0), ==, 0); // MathGlyphInfo not available
28886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0), ==, 0); // MathGlyphInfo not available
28986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_LEFT, 0), ==, 0); // MathGlyphInfo not available
29086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
29186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
29286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial2.otf");
29386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
29486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 0), ==, 0); // MathKernInfo empty
29586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_LEFT, 0), ==, 0); // MathKernInfo empty
29686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0), ==, 0); // MathKernInfo empty
29786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_LEFT, 0), ==, 0); // MathKernInfo empty
29886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
29986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
30086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial3.otf");
30186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
30286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 0), ==, 0); // MathKernInfoRecords empty
30386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_LEFT, 0), ==, 0); // MathKernInfoRecords empty
30486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0), ==, 0); // MathKernInfoRecords empty
30586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_LEFT, 0), ==, 0); // MathKernInfoRecords empty
30686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
30786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
30886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontFull.otf");
30986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "I", -1, &glyph));
31086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
311edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 7), ==, 62); // lower than min heigth
312edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 14), ==, 62); // equal to min height
313edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 20), ==, 104);
314edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 23), ==, 104);
315edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 31), ==, 146);
316edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 32), ==, 146);
317edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 86), ==, 398); // equal to max height
318edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 91), ==, 440); // larger than max height
319edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 96), ==, 440); // larger than max height
320edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang
321edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_RIGHT, 39), ==, 188); // top right
322edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_TOP_LEFT, 39), ==, 110); // top left
323edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_RIGHT, 39), ==, 44); // bottom right
324edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_kerning (hb_font, glyph, HB_OT_MATH_KERN_BOTTOM_LEFT, 39), ==, 100); // bottom left
32586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
32686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
32786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
32886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  cleanupFreeType();
32986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
33086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
33186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
332cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbodstatic hb_position_t
333cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbodget_glyph_assembly_italics_correction (hb_font_t *font,
334cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod				       hb_codepoint_t glyph,
335cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod				       hb_bool_t horizontal)
336cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod{
337cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  hb_position_t corr;
338cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  hb_ot_math_get_glyph_assembly (font, glyph,
339cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod				 horizontal ? HB_DIRECTION_LTR : HB_DIRECTION_TTB,
340a5629a2ed9c2e69f2b4ebb74d85fbe0b5ba2be67Behdad Esfahbod				 0, NULL, NULL,
341cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod				 &corr);
342cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  return corr;
343cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod}
344cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod
345485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wangstatic void
346cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbodtest_get_glyph_assembly_italics_correction (void)
34786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
34886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_codepoint_t glyph;
34986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  initFreeType();
35086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
35186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontEmpty.otf");
35286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
353cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); // MathVariants not available
354cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); // MathVariants not available
35586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
35686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
35786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial1.otf");
35886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
359cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); // VertGlyphCoverage and HorizGlyphCoverage absent
360cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); // VertGlyphCoverage and HorizGlyphCoverage absent
36186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
36286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
36386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial2.otf");
36486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
365cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); // VertGlyphCoverage and HorizGlyphCoverage empty
366cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0); // VertGlyphCoverage and HorizGlyphCoverage empty
36786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
36886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
36986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial3.otf");
37086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
371cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0); // HorizGlyphConstruction and VertGlyphConstruction empty
372cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0);  // HorizGlyphConstruction and VertGlyphConstruction empty
37386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
37486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
37586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontPartial4.otf");
37686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
377cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0);
378cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0);
37986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
38086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
38186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  openFont("fonts/MathTestFontFull.otf");
38286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowleft", -1, &glyph));
383edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 248);
384cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 0);
38586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowup", -1, &glyph));
386cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, TRUE), ==, 0);
387edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(get_glyph_assembly_italics_correction (hb_font, glyph, FALSE), ==, 662);
388edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  closeFont();
389edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang
390edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  cleanupFreeType();
391edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang}
392edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang
393485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wangstatic void
394edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wangtest_get_min_connector_overlap (void)
395edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang{
396edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  initFreeType();
397edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang
398edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  openFont("fonts/MathTestFontEmpty.otf");
399edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, FALSE), ==, 0); // MathVariants not available
400edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, TRUE), ==, 0); // MathVariants not available
401edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  closeFont();
402edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang
403edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  openFont("fonts/MathTestFontPartial1.otf");
404edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, HB_DIRECTION_LTR), ==, 108);
405edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, HB_DIRECTION_TTB), ==, 54);
40686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  closeFont();
40786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
40886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  cleanupFreeType();
40986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
41086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
411485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wangstatic void
412485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wangtest_get_glyph_variants (void)
413485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang{
414485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  hb_codepoint_t glyph;
415b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod  hb_ot_math_glyph_variant_t variants[20];
416b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod  unsigned variantsSize = sizeof (variants) / sizeof (variants[0]);
417b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod  unsigned int count;
418b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod  unsigned int offset = 0;
419b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod
420485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  initFreeType();
421485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
422485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  openFont("fonts/MathTestFontEmpty.otf");
423485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
424485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0);
425485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0);
426485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  closeFont();
427485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
428485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  openFont("fonts/MathTestFontPartial1.otf");
429485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
430485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0);
431485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0);
432485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  closeFont();
433485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
434485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  openFont("fonts/MathTestFontPartial2.otf");
435485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
436485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0);
437485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0);
438485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  closeFont();
439485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
440485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  openFont("fonts/MathTestFontPartial3.otf");
441485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
442485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0);
443485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0);
444485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  closeFont();
445485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
446485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  openFont("fonts/MathTestFontPartial4.otf");
447485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
448485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL), ==, 0);
449485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL), ==, 0);
450485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  closeFont();
451485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
452485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  openFont("fonts/MathTestFontFull.otf");
453485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
454485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowleft", -1, &glyph));
455485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font,
456485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 glyph,
457485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 HB_DIRECTION_BTT,
458485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 0,
459485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 NULL,
460485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 NULL), ==, 0);
461485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font,
462485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 glyph,
463485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 HB_DIRECTION_RTL,
464485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 0,
465485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 NULL,
466485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 NULL), ==, 3);
467485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
468485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowup", -1, &glyph));
469485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font,
470485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 glyph,
471485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 HB_DIRECTION_BTT,
472485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 0,
473485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 NULL,
474485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 NULL), ==, 4);
475485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_variants (hb_font,
476485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 glyph,
477485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 HB_DIRECTION_RTL,
478485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 0,
479485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 NULL,
480485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                                 NULL), ==, 0);
481485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
482485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowleft", -1, &glyph));
483485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  do {
484485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang    count = variantsSize;
485485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang    hb_ot_math_get_glyph_variants (hb_font,
486485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   glyph,
487485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   HB_DIRECTION_RTL,
488485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   offset,
489485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   &count,
490485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   variants);
491485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang    offset += count;
492485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  } while (count == variantsSize);
493485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(offset, ==, 3);
494485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "uni2190_size2", -1, &glyph));
495485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[0].glyph, ==, glyph);
496485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[0].advance, ==, 4302);
497485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "uni2190_size3", -1, &glyph));
498485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[1].glyph, ==, glyph);
499485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[1].advance, ==, 4802);
500485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "uni2190_size4", -1, &glyph));
501485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[2].glyph, ==, glyph);
502485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[2].advance, ==, 5802);
503485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
504485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowup", -1, &glyph));
505485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  offset = 0;
506485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  do {
507485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang    count = variantsSize;
508485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang    hb_ot_math_get_glyph_variants (hb_font,
509485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   glyph,
510485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   HB_DIRECTION_BTT,
511485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   offset,
512485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   &count,
513485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang                                   variants);
514485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang    offset += count;
515485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  } while (count == variantsSize);
516485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(offset, ==, 4);
517485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "uni2191_size2", -1, &glyph));
518485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[0].glyph, ==, glyph);
519485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[0].advance, ==, 2251);
520485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "uni2191_size3", -1, &glyph));
521485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[1].glyph, ==, glyph);
522485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[1].advance, ==, 2501);
523485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "uni2191_size4", -1, &glyph));
524485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[2].glyph, ==, glyph);
525485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[2].advance, ==, 3001);
526485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "uni2191_size5", -1, &glyph));
527485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[3].glyph, ==, glyph);
528485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  g_assert_cmpint(variants[3].advance, ==, 3751);
529485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
530485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  closeFont();
531485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
532485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  cleanupFreeType();
533485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang}
534485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang
5358d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wangstatic void
5368d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wangtest_get_glyph_assembly (void)
5378d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang{
5388d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  hb_codepoint_t glyph;
539b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod  hb_ot_math_glyph_part_t parts[20];
540b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod  unsigned partsSize = sizeof (parts) / sizeof (parts[0]);
541b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod  unsigned int count;
542b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod  unsigned int offset = 0;
543b5ecf1bfa459a755e36bc4c7f545c7f803b7d016Behdad Esfahbod
5448d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  initFreeType();
5458d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
5468d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  openFont("fonts/MathTestFontEmpty.otf");
5478d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
5488d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0);
5498d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0);
5508d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  closeFont();
5518d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
5528d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  openFont("fonts/MathTestFontPartial1.otf");
5538d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
5548d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0);
5558d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0);
5568d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  closeFont();
5578d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
5588d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  openFont("fonts/MathTestFontPartial2.otf");
5598d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
5608d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0);
5618d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0);
5628d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  closeFont();
5638d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
5648d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  openFont("fonts/MathTestFontPartial3.otf");
5658d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
5668d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0);
5678d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0);
5688d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  closeFont();
5698d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
5708d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  openFont("fonts/MathTestFontPartial4.otf");
5718d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "space", -1, &glyph));
5728d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_RTL, 0, NULL, NULL, NULL), ==, 0);
5738d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font, glyph, HB_DIRECTION_BTT, 0, NULL, NULL, NULL), ==, 0);
5748d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  closeFont();
5758d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
5768d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  openFont("fonts/MathTestFontFull.otf");
5778d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
5788d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowright", -1, &glyph));
5798d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font,
5808d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 glyph,
5818d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 HB_DIRECTION_BTT,
5828d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 0,
5838d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL,
5848d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL,
5858d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL), ==, 0);
5868d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font,
5878d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 glyph,
5888d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 HB_DIRECTION_RTL,
5898d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 0,
5908d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL,
5918d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL,
5928d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL), ==, 3);
5938d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
5948d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowdown", -1, &glyph));
5958d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font,
5968d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 glyph,
5978d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 HB_DIRECTION_BTT,
5988d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 0,
5998d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL,
6008d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL,
6018d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL), ==, 5);
6028d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(hb_ot_math_get_glyph_assembly (hb_font,
6038d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 glyph,
6048d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 HB_DIRECTION_RTL,
6058d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 0,
6068d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL,
6078d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL,
6088d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                                 NULL), ==, 0);
6098d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
6108d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowright", -1, &glyph));
6118d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  do {
6128d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang    count = partsSize;
6138d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang    hb_ot_math_get_glyph_assembly (hb_font,
6148d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   glyph,
6158d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   HB_DIRECTION_RTL,
6168d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   offset,
6178d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   &count,
6188d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   parts,
6198d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   NULL);
6208d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang    offset += count;
6218d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  } while (count == partsSize);
6228d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(offset, ==, 3);
6238d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "left", -1, &glyph));
6248d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[0].glyph, ==, glyph);
6258d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[0].start_connector_length, ==, 800);
6268d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[0].end_connector_length, ==, 384);
6278d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[0].full_advance, ==, 2000);
6288d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(!(parts[0].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER));
6298d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "horizontal", -1, &glyph));
6308d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].glyph, ==, glyph);
6318d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].start_connector_length, ==, 524);
6328d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].end_connector_length, ==, 800);
6338d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].full_advance, ==, 2000);
6348d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(parts[1].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER);
6358d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "right", -1, &glyph));
6368d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[2].glyph, ==, glyph);
6378d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[2].start_connector_length, ==, 316);
6388d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[2].end_connector_length, ==, 454);
6398d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[2].full_advance, ==, 2000);
6408d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(!(parts[2].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER));
6418d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
6428d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "arrowdown", -1, &glyph));
6438d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  offset = 0;
6448d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  do {
6458d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang    count = partsSize;
6468d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang    hb_ot_math_get_glyph_assembly (hb_font,
6478d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   glyph,
6488d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   HB_DIRECTION_BTT,
6498d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   offset,
6508d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   &count,
6518d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   parts,
6528d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang                                   NULL);
6538d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang    offset += count;
6548d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  } while (count == partsSize);
6558d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(offset, ==, 5);
6568d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "bottom", -1, &glyph));
6578d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[0].glyph, ==, glyph);
6588d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[0].start_connector_length, ==, 365);
6598d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[0].end_connector_length, ==, 158);
6608d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[0].full_advance, ==, 1000);
6618d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(!(parts[0].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER));
6628d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "vertical", -1, &glyph));
6638d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].glyph, ==, glyph);
6648d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].glyph, ==, glyph);
6658d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].start_connector_length, ==, 227);
6668d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].end_connector_length, ==, 365);
6678d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[1].full_advance, ==, 1000);
6688d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(parts[1].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER);
6698d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "center", -1, &glyph));
6708d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[2].glyph, ==, glyph);
6718d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[2].start_connector_length, ==, 54);
6728d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[2].end_connector_length, ==, 158);
6738d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[2].full_advance, ==, 1000);
6748d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(!(parts[2].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER));
6758d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "vertical", -1, &glyph));
6768d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[3].glyph, ==, glyph);
6778d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[3].glyph, ==, glyph);
6788d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[3].glyph, ==, glyph);
6798d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[3].start_connector_length, ==, 400);
6808d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[3].end_connector_length, ==, 296);
6818d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[3].full_advance, ==, 1000);
6828d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(parts[1].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER);
6838d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(hb_font_get_glyph_from_name (hb_font, "top", -1, &glyph));
6848d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[4].glyph, ==, glyph);
6858d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[4].start_connector_length, ==, 123);
6868d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[4].end_connector_length, ==, 192);
6878d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert_cmpint(parts[4].full_advance, ==, 1000);
6888d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  g_assert(!(parts[4].flags & HB_MATH_GLYPH_PART_FLAG_EXTENDER));
6898d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
6908d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  closeFont();
6918d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
6928d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  cleanupFreeType();
6938d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang}
6948d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang
69586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodint
69686106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbodmain (int argc, char **argv)
69786106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod{
69886106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_test_init (&argc, &argv);
69986106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
70086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_test_add (test_has_data);
70186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_test_add (test_get_constant);
70286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_test_add (test_get_glyph_italics_correction);
70386106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_test_add (test_get_glyph_top_accent_attachment);
70486106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_test_add (test_is_glyph_extended_shape);
70586106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  hb_test_add (test_get_glyph_kerning);
706cdc9eef7da934ae71578694f29665e439686c3bdBehdad Esfahbod  hb_test_add (test_get_glyph_assembly_italics_correction);
707edcfa789bf92c18f5badad31c0ad04a6a77d7226Frédéric Wang  hb_test_add (test_get_min_connector_overlap);
708485e4873fb7cacfa9d853272c2275bbc5826023eFrédéric Wang  hb_test_add (test_get_glyph_variants);
7098d622f1114d6a0eca1786b94c7fc1a0bcd87f74bFrédéric Wang  hb_test_add (test_get_glyph_assembly);
71086106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod
71186106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod  return hb_test_run();
71286106c7528d9bff8de6bc3e1487be780c31ea4fdBehdad Esfahbod}
713