diff --git a/test/api/test-ot-layout.c b/test/api/test-ot-layout.c index c19765f6e..5c6ccce4d 100644 --- a/test/api/test-ot-layout.c +++ b/test/api/test-ot-layout.c @@ -171,6 +171,50 @@ test_ot_layout_script_get_language_tags (void) hb_face_destroy (face); } +static void +test_ot_layout_language_get_feature_tags (void) +{ + hb_face_t *face = hb_test_open_font_file ("fonts/Estedad-VF.ttf"); + + unsigned int total = 0; + unsigned int count = STATIC_ARRAY_SIZE; + unsigned int offset = 0; + hb_tag_t tags[STATIC_ARRAY_SIZE]; + while (count == STATIC_ARRAY_SIZE) + { + total = hb_ot_layout_language_get_feature_tags (face, HB_OT_TAG_GSUB, 0, 0, offset, &count, tags); + g_assert_cmpuint (6, ==, total); + offset += count; + if (count) + { + g_assert_cmpuint (6, ==, count); + g_assert_cmpuint (HB_TAG ('c','a','l','t'), ==, tags[0]); + g_assert_cmpuint (HB_TAG ('f','i','n','a'), ==, tags[1]); + g_assert_cmpuint (HB_TAG ('i','n','i','t'), ==, tags[2]); + g_assert_cmpuint (HB_TAG ('l','i','g','a'), ==, tags[3]); + g_assert_cmpuint (HB_TAG ('m','e','d','i'), ==, tags[4]); + g_assert_cmpuint (HB_TAG ('r','l','i','g'), ==, tags[5]); + } + } + count = STATIC_ARRAY_SIZE; + offset = 0; + while (count == STATIC_ARRAY_SIZE) + { + total = hb_ot_layout_language_get_feature_tags (face, HB_OT_TAG_GPOS, 1, 0, offset, &count, tags); + g_assert_cmpuint (3, ==, total); + offset += count; + if (count) + { + g_assert_cmpuint (3, ==, count); + g_assert_cmpuint (HB_TAG ('k','e','r','n'), ==, tags[0]); + g_assert_cmpuint (HB_TAG ('m','a','r','k'), ==, tags[1]); + g_assert_cmpuint (HB_TAG ('m','k','m','k'), ==, tags[2]); + } + } + + hb_face_destroy (face); +} + int main (int argc, char **argv) { @@ -179,5 +223,6 @@ main (int argc, char **argv) hb_test_add (test_ot_layout_table_find_script); hb_test_add (test_ot_layout_script_get_language_tags); hb_test_add (test_ot_layout_table_get_feature_tags); + hb_test_add (test_ot_layout_language_get_feature_tags); return hb_test_run (); }