diff options
Diffstat (limited to 'test/api/test-subset.c')
-rw-r--r-- | test/api/test-subset.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/test/api/test-subset.c b/test/api/test-subset.c index 27bf73cc9..08c911076 100644 --- a/test/api/test-subset.c +++ b/test/api/test-subset.c @@ -155,6 +155,80 @@ test_subset_sets (void) hb_subset_input_destroy (input); } +static void +test_subset_plan (void) +{ + hb_face_t *face_abc = hb_test_open_font_file ("fonts/Roboto-Regular.abc.ttf"); + hb_face_t *face_ac = hb_test_open_font_file ("fonts/Roboto-Regular.ac.ttf"); + + hb_set_t *codepoints = hb_set_create(); + hb_set_add (codepoints, 97); + hb_set_add (codepoints, 99); + hb_subset_input_t* input = hb_subset_test_create_input (codepoints); + hb_set_destroy (codepoints); + + hb_subset_plan_t* plan = hb_subset_plan_create_or_fail (face_abc, input); + g_assert (plan); + + const hb_map_t* mapping = hb_subset_plan_old_to_new_glyph_mapping (plan); + g_assert (hb_map_get (mapping, 1) == 1); + g_assert (hb_map_get (mapping, 3) == 2); + + mapping = hb_subset_plan_new_to_old_glyph_mapping (plan); + g_assert (hb_map_get (mapping, 1) == 1); + g_assert (hb_map_get (mapping, 2) == 3); + + mapping = hb_subset_plan_unicode_to_old_glyph_mapping (plan); + g_assert (hb_map_get (mapping, 0x63) == 3); + + hb_face_t* face_abc_subset = hb_subset_plan_execute_or_fail (plan); + + hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('l','o','c', 'a')); + hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('g','l','y','f')); + + hb_subset_input_destroy (input); + hb_subset_plan_destroy (plan); + hb_face_destroy (face_abc_subset); + hb_face_destroy (face_abc); + hb_face_destroy (face_ac); +} + +static hb_blob_t* +_ref_table (hb_face_t *face, hb_tag_t tag, void *user_data) +{ + return hb_face_reference_table ((hb_face_t*) user_data, tag); +} + +static void +test_subset_create_for_tables_face (void) +{ + hb_face_t *face_abc = hb_test_open_font_file ("fonts/Roboto-Regular.abc.ttf"); + hb_face_t *face_ac = hb_test_open_font_file ("fonts/Roboto-Regular.ac.ttf"); + hb_face_t *face_create_for_tables = hb_face_create_for_tables ( + _ref_table, + face_abc, + NULL); + + hb_set_t *codepoints = hb_set_create(); + hb_set_add (codepoints, 97); + hb_set_add (codepoints, 99); + + hb_subset_input_t* input = hb_subset_test_create_input (codepoints); + hb_set_destroy (codepoints); + + hb_face_t* face_abc_subset = hb_subset_or_fail (face_create_for_tables, input); + + hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('l','o','c', 'a')); + hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('g','l','y','f')); + hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('g','a','s','p')); + + hb_subset_input_destroy (input); + hb_face_destroy (face_abc_subset); + hb_face_destroy (face_create_for_tables); + hb_face_destroy (face_abc); + hb_face_destroy (face_ac); +} + int main (int argc, char **argv) { @@ -165,6 +239,8 @@ main (int argc, char **argv) hb_test_add (test_subset_crash); hb_test_add (test_subset_set_flags); hb_test_add (test_subset_sets); + hb_test_add (test_subset_plan); + hb_test_add (test_subset_create_for_tables_face); return hb_test_run(); } |