blob: c7a5c0611f5d9b5d2a60cdc161d85e7b32f45950 [file] [log] [blame]
Michiharu Ariza258b4562018-09-24 16:50:47 -07001/*
Michiharu Ariza0dfa5842018-11-12 08:47:07 -08002 * Copyright © 2018 Adobe Inc.
Michiharu Ariza258b4562018-09-24 16:50:47 -07003 *
4 * This is part of HarfBuzz, a text shaping library.
5 *
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
11 *
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16 * DAMAGE.
17 *
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23 *
24 * Adobe Author(s): Michiharu Ariza
25 */
26
27#include "hb-test.h"
Michiharu Arizaba055a82018-10-22 16:20:04 -070028#include "hb-subset-test.h"
Michiharu Ariza258b4562018-09-24 16:50:47 -070029
30/* Unit tests for CFF2 subsetting */
31
32static void
33test_subset_cff2_noop (void)
34{
Michiharu Ariza3d3df552018-10-22 15:23:39 -070035 hb_face_t *face_abc = hb_test_open_font_file("fonts/AdobeVFPrototype.abc.otf");
Michiharu Ariza258b4562018-09-24 16:50:47 -070036
37 hb_set_t *codepoints = hb_set_create ();
38 hb_face_t *face_abc_subset;
39 hb_set_add (codepoints, 'a');
40 hb_set_add (codepoints, 'b');
41 hb_set_add (codepoints, 'c');
42 face_abc_subset = hb_subset_test_create_subset (face_abc, hb_subset_test_create_input (codepoints));
43 hb_set_destroy (codepoints);
44
45 hb_subset_test_check (face_abc, face_abc_subset, HB_TAG ('C','F','F','2'));
46
47 hb_face_destroy (face_abc_subset);
48 hb_face_destroy (face_abc);
49}
50
51static void
52test_subset_cff2 (void)
53{
Michiharu Ariza3d3df552018-10-22 15:23:39 -070054 hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf");
55 hb_face_t *face_ac = hb_test_open_font_file ("fonts/AdobeVFPrototype.ac.otf");
Michiharu Ariza258b4562018-09-24 16:50:47 -070056
57 hb_set_t *codepoints = hb_set_create ();
58 hb_face_t *face_abc_subset;
59 hb_set_add (codepoints, 'a');
60 hb_set_add (codepoints, 'c');
61 face_abc_subset = hb_subset_test_create_subset (face_abc, hb_subset_test_create_input (codepoints));
62 hb_set_destroy (codepoints);
63
64 hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('C','F','F','2'));
65
66 hb_face_destroy (face_abc_subset);
67 hb_face_destroy (face_abc);
68 hb_face_destroy (face_ac);
69}
70
71static void
72test_subset_cff2_strip_hints (void)
73{
Michiharu Ariza3d3df552018-10-22 15:23:39 -070074 hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf");
75 hb_face_t *face_ac = hb_test_open_font_file ("fonts/AdobeVFPrototype.ac.nohints.otf");
Michiharu Ariza258b4562018-09-24 16:50:47 -070076
77 hb_set_t *codepoints = hb_set_create ();
78 hb_subset_input_t *input;
79 hb_face_t *face_abc_subset;
80 hb_set_add (codepoints, 'a');
81 hb_set_add (codepoints, 'c');
82 input = hb_subset_test_create_input (codepoints);
Garret Riegerf9d8e4a2021-07-29 15:25:41 -070083 hb_subset_input_set_flags (input, HB_SUBSET_FLAGS_NO_HINTING);
Michiharu Ariza258b4562018-09-24 16:50:47 -070084 face_abc_subset = hb_subset_test_create_subset (face_abc, input);
85 hb_set_destroy (codepoints);
86
Michiharu Ariza0996c0f2018-11-07 14:48:37 -080087 hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('C', 'F', 'F', '2'));
88
89 hb_face_destroy (face_abc_subset);
90 hb_face_destroy (face_abc);
91 hb_face_destroy (face_ac);
92}
93
94static void
95test_subset_cff2_desubr (void)
96{
97 hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf");
98 hb_face_t *face_ac = hb_test_open_font_file ("fonts/AdobeVFPrototype.ac.nosubrs.otf");
99
100 hb_set_t *codepoints = hb_set_create ();
101 hb_subset_input_t *input;
102 hb_face_t *face_abc_subset;
103 hb_set_add (codepoints, 'a');
104 hb_set_add (codepoints, 'c');
105 input = hb_subset_test_create_input (codepoints);
Garret Riegerf9d8e4a2021-07-29 15:25:41 -0700106 hb_subset_input_set_flags (input, HB_SUBSET_FLAGS_DESUBROUTINIZE);
Michiharu Ariza0996c0f2018-11-07 14:48:37 -0800107 face_abc_subset = hb_subset_test_create_subset (face_abc, input);
108 hb_set_destroy (codepoints);
109
110 hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('C', 'F', 'F', '2'));
111
112 hb_face_destroy (face_abc_subset);
113 hb_face_destroy (face_abc);
114 hb_face_destroy (face_ac);
115}
116
117static void
118test_subset_cff2_desubr_strip_hints (void)
119{
120 hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf");
121 hb_face_t *face_ac = hb_test_open_font_file ("fonts/AdobeVFPrototype.ac.nosubrs.nohints.otf");
122
123 hb_set_t *codepoints = hb_set_create ();
124 hb_subset_input_t *input;
125 hb_face_t *face_abc_subset;
126 hb_set_add (codepoints, 'a');
127 hb_set_add (codepoints, 'c');
128 input = hb_subset_test_create_input (codepoints);
Garret Rieger3d534b12021-07-29 11:52:14 -0700129 hb_subset_input_set_flags (input,
Garret Riegerf9d8e4a2021-07-29 15:25:41 -0700130 HB_SUBSET_FLAGS_DESUBROUTINIZE | HB_SUBSET_FLAGS_NO_HINTING);
Michiharu Ariza0996c0f2018-11-07 14:48:37 -0800131 face_abc_subset = hb_subset_test_create_subset (face_abc, input);
132 hb_set_destroy (codepoints);
133
134 hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('C', 'F', 'F', '2'));
Michiharu Ariza258b4562018-09-24 16:50:47 -0700135
136 hb_face_destroy (face_abc_subset);
137 hb_face_destroy (face_abc);
138 hb_face_destroy (face_ac);
139}
140
Michiharu Arizaf2908b42019-01-31 14:16:37 -0800141static void
142test_subset_cff2_retaingids (void)
143{
144 hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf");
145 hb_face_t *face_ac = hb_test_open_font_file ("fonts/AdobeVFPrototype.ac.retaingids.otf");
146
147 hb_set_t *codepoints = hb_set_create ();
148 hb_subset_input_t *input;
149 hb_face_t *face_abc_subset;
150 hb_set_add (codepoints, 'a');
151 hb_set_add (codepoints, 'c');
152 input = hb_subset_test_create_input (codepoints);
Garret Riegerf9d8e4a2021-07-29 15:25:41 -0700153 hb_subset_input_set_flags (input, HB_SUBSET_FLAGS_RETAIN_GIDS);
Michiharu Arizaf2908b42019-01-31 14:16:37 -0800154 face_abc_subset = hb_subset_test_create_subset (face_abc, input);
155 hb_set_destroy (codepoints);
156
157 hb_subset_test_check (face_ac, face_abc_subset, HB_TAG ('C', 'F', 'F', '2'));
158
159 hb_face_destroy (face_abc_subset);
160 hb_face_destroy (face_abc);
161 hb_face_destroy (face_ac);
162}
163
Garret Riegerc6884372023-11-06 20:21:46 +0000164#ifdef HB_EXPERIMENTAL_API
165static void
166test_subset_cff2_iftb_requirements (void)
167{
168 hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf");
169 hb_face_t *face_long_off = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.long_off.otf");
170
171 hb_set_t *codepoints = hb_set_create();
172 hb_face_t *face_abc_subset;
173 hb_set_add (codepoints, 97);
174 hb_set_add (codepoints, 98);
175 hb_set_add (codepoints, 99);
176
177 hb_subset_input_t *input = hb_subset_test_create_input (codepoints);
178 hb_subset_input_set_flags (input, HB_SUBSET_FLAGS_IFTB_REQUIREMENTS);
179 face_abc_subset = hb_subset_test_create_subset (face_abc, input);
180 hb_set_destroy (codepoints);
181
182 hb_subset_test_check (face_long_off, face_abc_subset, HB_TAG ('C','F','F', '2'));
183
184 hb_face_destroy (face_abc_subset);
185 hb_face_destroy (face_abc);
186 hb_face_destroy (face_long_off);
187
188}
189#endif
190
Michiharu Ariza258b4562018-09-24 16:50:47 -0700191int
192main (int argc, char **argv)
193{
194 hb_test_init (&argc, &argv);
195
196 hb_test_add (test_subset_cff2_noop);
197 hb_test_add (test_subset_cff2);
198 hb_test_add (test_subset_cff2_strip_hints);
Michiharu Ariza0996c0f2018-11-07 14:48:37 -0800199 hb_test_add (test_subset_cff2_desubr);
200 hb_test_add (test_subset_cff2_desubr_strip_hints);
Michiharu Arizaf2908b42019-01-31 14:16:37 -0800201 hb_test_add (test_subset_cff2_retaingids);
Michiharu Ariza258b4562018-09-24 16:50:47 -0700202
Garret Riegerc6884372023-11-06 20:21:46 +0000203#ifdef HB_EXPERIMENTAL_API
204 hb_test_add (test_subset_cff2_iftb_requirements);
205#endif
206
Michiharu Ariza258b4562018-09-24 16:50:47 -0700207 return hb_test_run ();
208}