static void test_subset_cff1_noop (void) { hb_face_t *face_abc = hb_test_open_font_file("fonts/SourceSansPro-Regular.abc.otf"); hb_set_t *codepoints = hb_set_create (); hb_face_t *face_abc_subset; hb_set_add (codepoints, 'a'); hb_set_add (codepoints, 'b'); hb_set_add (codepoints, 'c'); face_abc_subset = hb_subset_test_create_subset (face_abc, hb_subset_test_create_input (codepoints)); hb_set_destroy (codepoints); hb_subset_test_check (face_abc, face_abc_subset, HB_TAG ('C','F','F',' ')); hb_face_destroy (face_abc_subset); hb_face_destroy (face_abc); }
static void test_subset_hdmx_noop (void) { hb_face_t *face_abc = hb_test_open_font_file ("fonts/Roboto-Regular.abc.ttf"); hb_set_t *codepoints = hb_set_create(); hb_face_t *face_abc_subset; hb_set_add (codepoints, 'a'); hb_set_add (codepoints, 'b'); hb_set_add (codepoints, 'c'); face_abc_subset = hb_subset_test_create_subset (face_abc, hb_subset_test_create_input (codepoints)); hb_set_destroy (codepoints); hb_subset_test_check (face_abc, face_abc_subset, HB_TAG ('h','d','m','x')); hb_face_destroy (face_abc_subset); hb_face_destroy (face_abc); }
static void test_subset_cff1_j (void) { hb_face_t *face_41_3041_4c2e = hb_test_open_font_file ("fonts/SourceHanSans-Regular.41,3041,4C2E.otf"); hb_face_t *face_41_4c2e = hb_test_open_font_file ("fonts/SourceHanSans-Regular.41,4C2E.otf"); hb_set_t *codepoints = hb_set_create (); hb_face_t *face_41_3041_4c2e_subset; hb_set_add (codepoints, 0x41); hb_set_add (codepoints, 0x4C2E); face_41_3041_4c2e_subset = hb_subset_test_create_subset (face_41_3041_4c2e, hb_subset_test_create_input (codepoints)); hb_set_destroy (codepoints); hb_subset_test_check (face_41_4c2e, face_41_3041_4c2e_subset, HB_TAG ('C','F','F',' ')); hb_face_destroy (face_41_3041_4c2e_subset); hb_face_destroy (face_41_3041_4c2e); hb_face_destroy (face_41_4c2e); }
static void test_subset_cff1_expert (void) { hb_face_t *face = hb_test_open_font_file ("fonts/cff1_expert.otf"); hb_face_t *face_subset = hb_test_open_font_file ("fonts/cff1_expert.2D,F6E9,FB00.otf"); hb_set_t *codepoints = hb_set_create (); hb_face_t *face_test; hb_set_add (codepoints, 0x2D); hb_set_add (codepoints, 0xF6E9); hb_set_add (codepoints, 0xFB00); face_test = hb_subset_test_create_subset (face, hb_subset_test_create_input (codepoints)); hb_set_destroy (codepoints); hb_subset_test_check (face_subset, face_test, HB_TAG ('C','F','F',' ')); hb_face_destroy (face_test); hb_face_destroy (face_subset); hb_face_destroy (face); }
static void test_subset_hdmx_fails_sanitize (void) { hb_face_t *face = hb_test_open_font_file ("../fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5609911946838016"); hb_subset_input_t *input = hb_subset_input_create_or_fail (); hb_set_t *codepoints = hb_subset_input_unicode_set (input); hb_face_t *subset; hb_set_add (codepoints, 'a'); hb_set_add (codepoints, 'b'); hb_set_add (codepoints, 'c'); subset = hb_subset (face, input); g_assert (subset); g_assert (subset == hb_face_get_empty ()); hb_subset_input_destroy (input); hb_face_destroy (subset); hb_face_destroy (face); }
static void test_subset_hdmx_invalid (void) { hb_face_t *face = hb_test_open_font_file ("../fuzzing/fonts/crash-ccc61c92d589f895174cdef6ff2e3b20e9999a1a"); hb_subset_input_t *input = hb_subset_input_create_or_fail (); hb_set_t *codepoints = hb_subset_input_unicode_set (input); hb_face_t *subset; hb_set_add (codepoints, 'a'); hb_set_add (codepoints, 'b'); hb_set_add (codepoints, 'c'); subset = hb_subset (face, input); g_assert (subset); g_assert (subset == hb_face_get_empty ()); hb_subset_input_destroy (input); hb_face_destroy (subset); hb_face_destroy (face); }
static void test_subset_cff1_desubr (void) { hb_face_t *face_abc = hb_test_open_font_file ("fonts/SourceSansPro-Regular.abc.otf"); hb_face_t *face_ac = hb_test_open_font_file ("fonts/SourceSansPro-Regular.ac.nosubrs.otf"); hb_set_t *codepoints = hb_set_create (); hb_subset_input_t *input; hb_face_t *face_abc_subset; hb_set_add (codepoints, 'a'); hb_set_add (codepoints, 'c'); input = hb_subset_test_create_input (codepoints); hb_subset_input_set_desubroutinize (input, true); face_abc_subset = hb_subset_test_create_subset (face_abc, input); hb_set_destroy (codepoints); hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('C','F','F',' ')); hb_face_destroy (face_abc_subset); hb_face_destroy (face_abc); hb_face_destroy (face_ac); }
static void test_subset_cff1_j_desubr_strip_hints (void) { hb_face_t *face_41_3041_4c2e = hb_test_open_font_file ("fonts/SourceHanSans-Regular.41,3041,4C2E.otf"); hb_face_t *face_41_4c2e = hb_test_open_font_file ("fonts/SourceHanSans-Regular.41,4C2E.nosubrs.nohints.otf"); hb_set_t *codepoints = hb_set_create (); hb_face_t *face_41_3041_4c2e_subset; hb_subset_input_t *input; hb_set_add (codepoints, 0x41); hb_set_add (codepoints, 0x4C2E); input = hb_subset_test_create_input (codepoints); hb_subset_input_set_drop_hints (input, true); hb_subset_input_set_desubroutinize (input, true); face_41_3041_4c2e_subset = hb_subset_test_create_subset (face_41_3041_4c2e, input); hb_set_destroy (codepoints); hb_subset_test_check (face_41_4c2e, face_41_3041_4c2e_subset, HB_TAG ('C','F','F',' ')); hb_face_destroy (face_41_3041_4c2e_subset); hb_face_destroy (face_41_3041_4c2e); hb_face_destroy (face_41_4c2e); }
static void test_subset_cff1_seac (void) { hb_face_t *face = hb_test_open_font_file ("fonts/cff1_seac.otf"); hb_face_t *face_subset = hb_test_open_font_file ("fonts/cff1_seac.C0.otf"); hb_face_t *face_test; hb_set_t *codepoints = hb_set_create (); hb_set_add (codepoints, 0xC0); /* Agrave */ face_test = hb_subset_test_create_subset (face, hb_subset_test_create_input (codepoints)); hb_set_destroy (codepoints); hb_subset_test_check (face_subset, face_test, HB_TAG ('C','F','F',' ')); hb_face_destroy (face_test); hb_face_destroy (face_subset); hb_face_destroy (face); }
static void test_post_drops_glyph_names (void) { hb_face_t *face_full = hb_subset_test_open_font ("fonts/Mplus1p-Regular.660E,6975,73E0,5EA6,8F38,6E05.ttf"); hb_face_t *face_subset = hb_subset_test_open_font ("fonts/Mplus1p-Regular.660E.ttf"); hb_face_t *face_full_subset; hb_set_t *codepoints = hb_set_create (); hb_set_add (codepoints, 0x660E); face_full_subset = hb_subset_test_create_subset (face_full, hb_subset_test_create_input (codepoints)); hb_set_destroy (codepoints); hb_subset_test_check (face_subset, face_full_subset, HB_TAG ('p','o','s','t')); hb_face_destroy (face_full_subset); hb_face_destroy (face_full); hb_face_destroy (face_subset); }
static void test_subset_cff1_dotsection (void) { hb_face_t *face = hb_test_open_font_file ("fonts/cff1_dotsect.otf"); hb_face_t *face_subset = hb_test_open_font_file ("fonts/cff1_dotsect.nohints.otf"); hb_set_t *codepoints = hb_set_create (); hb_subset_input_t *input; hb_face_t *face_test; hb_set_add (codepoints, 0x69); /* i */ input = hb_subset_test_create_input (codepoints); hb_subset_input_set_drop_hints (input, true); face_test = hb_subset_test_create_subset (face, input); hb_set_destroy (codepoints); hb_subset_test_check (face_subset, face_test, HB_TAG ('C','F','F',' ')); hb_face_destroy (face_test); hb_face_destroy (face_subset); hb_face_destroy (face); }