/src/harfbuzz/test/api/test-ot-face.c
Line  | Count  | Source  | 
1  |  | /*  | 
2  |  |  * Copyright © 2011  Google, Inc.  | 
3  |  |  *  | 
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  |  |  * Google Author(s): Behdad Esfahbod  | 
25  |  |  */  | 
26  |  |  | 
27  |  | #ifndef TEST_OT_FACE_NO_MAIN  | 
28  |  | #include "hb-test.h"  | 
29  |  | #endif  | 
30  |  | #include <hb-aat.h>  | 
31  |  | #include <hb-ot.h>  | 
32  |  |  | 
33  |  | /* Unit tests for hb-ot-*.h */  | 
34  |  |  | 
35  |  | /* Return some dummy result so that compiler won't just optimize things */  | 
36  |  | static long long  | 
37  |  | test_font (hb_font_t *font, hb_codepoint_t cp)  | 
38  | 31.4k  | { | 
39  | 31.4k  |   long long result = 0;  | 
40  |  |  | 
41  | 31.4k  |   hb_face_t *face = hb_font_get_face (font);  | 
42  | 31.4k  |   hb_set_t *set;  | 
43  | 31.4k  |   hb_codepoint_t g = 0;  | 
44  | 31.4k  |   hb_position_t x = 0, y = 0;  | 
45  | 31.4k  |   char buf[5] = {0}; | 
46  | 31.4k  |   unsigned int len = 0;  | 
47  | 31.4k  |   hb_glyph_extents_t extents = {0}; | 
48  | 31.4k  |   hb_ot_font_set_funcs (font);  | 
49  |  |  | 
50  | 31.4k  |   set = hb_set_create ();  | 
51  | 31.4k  |   hb_face_collect_unicodes (face, set);  | 
52  | 31.4k  |   hb_face_collect_variation_selectors (face, set);  | 
53  | 31.4k  |   hb_face_collect_variation_unicodes (face, cp, set);  | 
54  |  |  | 
55  | 31.4k  |   hb_font_get_nominal_glyph (font, cp, &g);  | 
56  | 31.4k  |   hb_font_get_variation_glyph (font, cp, cp, &g);  | 
57  | 31.4k  |   hb_font_get_glyph_h_advance (font, cp);  | 
58  | 31.4k  |   hb_font_get_glyph_v_advance (font, cp);  | 
59  | 31.4k  |   hb_font_get_glyph_h_origin (font, cp, &x, &y);  | 
60  | 31.4k  |   hb_font_get_glyph_v_origin (font, cp, &x, &y);  | 
61  | 31.4k  |   hb_font_get_glyph_extents (font, cp, &extents);  | 
62  | 31.4k  |   hb_font_get_glyph_contour_point (font, cp, 0, &x, &y);  | 
63  | 31.4k  |   hb_font_get_glyph_name (font, cp, buf, sizeof (buf));  | 
64  | 31.4k  |   hb_font_get_glyph_from_name (font, buf, strlen (buf), &g);  | 
65  |  |  | 
66  | 31.4k  |   hb_ot_color_has_palettes (face);  | 
67  | 31.4k  |   hb_ot_color_palette_get_count (face);  | 
68  | 31.4k  |   hb_ot_color_palette_get_name_id (face, cp);  | 
69  | 31.4k  |   hb_ot_color_palette_color_get_name_id (face, cp);  | 
70  | 31.4k  |   hb_ot_color_palette_get_flags (face, cp);  | 
71  | 31.4k  |   hb_ot_color_palette_get_colors (face, cp, 0, NULL, NULL);  | 
72  | 31.4k  |   hb_ot_color_has_layers (face);  | 
73  | 31.4k  |   hb_ot_color_glyph_get_layers (face, cp, 0, NULL, NULL);  | 
74  | 31.4k  |   hb_ot_color_has_svg (face);  | 
75  | 31.4k  |   hb_blob_destroy (hb_ot_color_glyph_reference_svg (face, cp));  | 
76  | 31.4k  |   hb_ot_color_has_png (face);  | 
77  | 31.4k  |   hb_blob_destroy (hb_ot_color_glyph_reference_png (font, cp));  | 
78  |  |  | 
79  | 31.4k  |   { | 
80  | 31.4k  |     hb_aat_layout_feature_type_t feature = HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC;  | 
81  | 31.4k  |     unsigned count = 1;  | 
82  | 31.4k  |     hb_aat_layout_get_feature_types (face, 0, &count, &feature);  | 
83  | 31.4k  |     hb_aat_layout_feature_type_get_name_id (face, HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE);  | 
84  | 31.4k  |     hb_aat_layout_feature_selector_info_t setting = {0}; | 
85  | 31.4k  |     unsigned default_index;  | 
86  | 31.4k  |     count = 1;  | 
87  | 31.4k  |     hb_aat_layout_feature_type_get_selector_infos (face, HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE, 0, &count, &setting, &default_index);  | 
88  | 31.4k  |     result += count + feature + setting.disable + setting.disable + setting.name_id + setting.reserved + default_index;  | 
89  | 31.4k  |   }  | 
90  |  |  | 
91  | 31.4k  |   hb_set_t *lookup_indexes = hb_set_create ();  | 
92  | 31.4k  |   hb_set_add (lookup_indexes, 0);  | 
93  |  |  | 
94  | 31.4k  |   hb_map_t *lookup_mapping = hb_map_create ();  | 
95  | 31.4k  |   hb_map_set (lookup_mapping, 0, 0);  | 
96  | 31.4k  |   hb_set_t *feature_indices = hb_set_create ();  | 
97  | 31.4k  |   hb_set_destroy (lookup_indexes);  | 
98  | 31.4k  |   hb_set_destroy (feature_indices);  | 
99  | 31.4k  |   hb_map_destroy (lookup_mapping);  | 
100  |  |  | 
101  | 31.4k  |   hb_ot_layout_get_baseline (font, HB_OT_LAYOUT_BASELINE_TAG_HANGING, HB_DIRECTION_RTL, HB_SCRIPT_HANGUL, HB_TAG_NONE, NULL);  | 
102  |  |  | 
103  | 31.4k  |   hb_ot_layout_has_glyph_classes (face);  | 
104  | 31.4k  |   hb_ot_layout_has_substitution (face);  | 
105  | 31.4k  |   hb_ot_layout_has_positioning (face);  | 
106  |  |  | 
107  | 31.4k  |   hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR, cp, 0, NULL, NULL);  | 
108  |  |  | 
109  | 31.4k  |   { | 
110  | 31.4k  |     unsigned temp = 0, temp2 = 0;  | 
111  | 31.4k  |     hb_ot_name_id_t name = HB_OT_NAME_ID_FULL_NAME;  | 
112  | 31.4k  |     hb_ot_layout_get_size_params (face, &temp, &temp, &name, &temp, &temp);  | 
113  | 31.4k  |     hb_tag_t cv01 = HB_TAG ('c','v','0','1'); | 
114  | 31.4k  |     unsigned feature_index = 0;  | 
115  | 31.4k  |     hb_ot_layout_language_find_feature (face, HB_OT_TAG_GSUB, 0,  | 
116  | 31.4k  |           HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX,  | 
117  | 31.4k  |           cv01, &feature_index);  | 
118  | 31.4k  |     hb_ot_layout_feature_get_name_ids (face, HB_OT_TAG_GSUB, feature_index,  | 
119  | 31.4k  |                &name, &name, &name, &temp, &name);  | 
120  | 31.4k  |     temp = 1;  | 
121  | 31.4k  |     hb_ot_layout_feature_get_characters (face, HB_OT_TAG_GSUB, feature_index, 0, &temp, &g);  | 
122  | 31.4k  |     temp = 1;  | 
123  | 31.4k  |     hb_ot_layout_language_get_feature_indexes (face, HB_OT_TAG_GSUB, 0, 0, 0, &temp, &temp2);  | 
124  |  |  | 
125  | 31.4k  |     result += temp + name + feature_index + temp2;  | 
126  | 31.4k  |   }  | 
127  |  |  | 
128  | 31.4k  |   hb_ot_math_has_data (face);  | 
129  | 1.79M  |   for (unsigned constant = HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN; constant <= HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT; constant++) { | 
130  | 1.76M  |     hb_ot_math_get_constant (font, (hb_ot_math_constant_t)constant);  | 
131  | 1.76M  |   }  | 
132  |  |  | 
133  | 31.4k  |   hb_ot_math_get_glyph_italics_correction (font, cp);  | 
134  | 31.4k  |   hb_ot_math_get_glyph_top_accent_attachment (font, cp);  | 
135  | 31.4k  |   hb_ot_math_is_glyph_extended_shape (face, cp);  | 
136  |  |  | 
137  | 31.4k  |   { | 
138  | 31.4k  |     hb_ot_math_get_glyph_kerning (font, cp, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0);  | 
139  | 31.4k  |     hb_ot_math_get_glyph_kernings (font, cp, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0, NULL, NULL);  | 
140  | 31.4k  |     hb_ot_math_kern_entry_t entries[5];  | 
141  | 31.4k  |     unsigned count = sizeof (entries) / sizeof (entries[0]);  | 
142  | 31.4k  |     hb_ot_math_get_glyph_kernings (font, cp, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0, &count, entries);  | 
143  | 31.4k  |   }  | 
144  |  |  | 
145  | 31.4k  |   { | 
146  | 31.4k  |     hb_ot_math_get_glyph_variants (font, cp, HB_DIRECTION_LTR, 0, NULL, NULL);  | 
147  | 31.4k  |     hb_ot_math_get_glyph_variants (font, cp, HB_DIRECTION_TTB, 0, NULL, NULL);  | 
148  | 31.4k  |     hb_ot_math_glyph_variant_t entries[5];  | 
149  | 31.4k  |     unsigned count = sizeof (entries) / sizeof (entries[0]);  | 
150  | 31.4k  |     hb_ot_math_get_glyph_variants (font, cp, HB_DIRECTION_LTR, 0, &count, entries);  | 
151  | 31.4k  |   }  | 
152  |  |  | 
153  | 31.4k  |   { | 
154  | 31.4k  |     hb_ot_math_get_min_connector_overlap (font, HB_DIRECTION_LTR);  | 
155  | 31.4k  |     hb_ot_math_get_glyph_assembly (font, cp, HB_DIRECTION_LTR, 0, NULL, NULL, NULL);  | 
156  | 31.4k  |     hb_ot_math_get_glyph_assembly (font, cp, HB_DIRECTION_TTB, 0, NULL, NULL, NULL);  | 
157  | 31.4k  |     hb_ot_math_glyph_part_t entries[5];  | 
158  | 31.4k  |     unsigned count = sizeof (entries) / sizeof (entries[0]);  | 
159  | 31.4k  |     hb_position_t corr;  | 
160  | 31.4k  |     hb_ot_math_get_glyph_assembly (font, cp, HB_DIRECTION_LTR, 0, &count, entries, &corr);  | 
161  | 31.4k  |   }  | 
162  |  |  | 
163  | 31.4k  |   hb_ot_meta_get_entry_tags (face, 0, NULL, NULL);  | 
164  | 31.4k  |   hb_blob_destroy (hb_ot_meta_reference_entry (face, HB_OT_META_TAG_DESIGN_LANGUAGES));  | 
165  |  |  | 
166  | 31.4k  |   hb_ot_metrics_get_position (font, HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER, NULL);  | 
167  | 31.4k  |   hb_ot_metrics_get_variation (font, HB_OT_METRICS_TAG_UNDERLINE_OFFSET);  | 
168  | 31.4k  |   hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_TAG_STRIKEOUT_OFFSET);  | 
169  | 31.4k  |   hb_ot_metrics_get_y_variation (font, HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET);  | 
170  |  |  | 
171  | 31.4k  |   len = sizeof (buf);  | 
172  | 31.4k  |   hb_ot_name_list_names (face, NULL);  | 
173  | 31.4k  |   hb_ot_name_get_utf8 (face, cp, NULL, &len, buf);  | 
174  | 31.4k  |   hb_ot_name_get_utf16 (face, cp, NULL, NULL, NULL);  | 
175  | 31.4k  |   hb_ot_name_get_utf32 (face, cp, NULL, NULL, NULL);  | 
176  |  |  | 
177  |  | #if 0  | 
178  |  |   hb_style_get_value (font, HB_STYLE_TAG_ITALIC);  | 
179  |  |   hb_style_get_value (font, HB_STYLE_TAG_OPTICAL_SIZE);  | 
180  |  |   hb_style_get_value (font, HB_STYLE_TAG_SLANT);  | 
181  |  |   hb_style_get_value (font, HB_STYLE_TAG_WIDTH);  | 
182  |  |   hb_style_get_value (font, HB_STYLE_TAG_WEIGHT);  | 
183  |  | #endif  | 
184  |  |  | 
185  | 31.4k  |   hb_ot_var_get_axis_count (face);  | 
186  | 31.4k  |   hb_ot_var_get_axis_infos (face, 0, NULL, NULL);  | 
187  | 31.4k  |   hb_ot_var_normalize_variations (face, NULL, 0, NULL, 0);  | 
188  | 31.4k  |   hb_ot_var_normalize_coords (face, 0, NULL, NULL);  | 
189  |  |  | 
190  | 31.4k  |   hb_draw_funcs_t *funcs = hb_draw_funcs_create ();  | 
191  | 31.4k  |   hb_font_get_glyph_shape (font, cp, funcs, NULL);  | 
192  | 31.4k  |   hb_draw_funcs_destroy (funcs);  | 
193  |  |  | 
194  | 31.4k  |   hb_set_destroy (set);  | 
195  |  |  | 
196  | 31.4k  |   return result + g + x + y + buf[0] + buf[1] + buf[2] + buf[3] + buf[4] + len +  | 
197  | 31.4k  |    extents.height + extents.width + extents.x_bearing + extents.y_bearing;  | 
198  | 31.4k  | }  | 
199  |  |  | 
200  |  | #ifndef TEST_OT_FACE_NO_MAIN  | 
201  |  | static void  | 
202  |  | test_ot_face_empty (void)  | 
203  |  | { | 
204  |  |   test_font (hb_font_get_empty (), 0);  | 
205  |  | }  | 
206  |  |  | 
207  |  | static void  | 
208  |  | test_ot_var_axis_on_zero_named_instance (void)  | 
209  |  | { | 
210  |  |   hb_face_t *face = hb_test_open_font_file ("fonts/Zycon.ttf"); | 
211  |  |   g_assert (hb_ot_var_get_axis_count (face));  | 
212  |  |   hb_face_destroy (face);  | 
213  |  | }  | 
214  |  |  | 
215  |  | int  | 
216  |  | main (int argc, char **argv)  | 
217  |  | { | 
218  |  |   hb_test_init (&argc, &argv);  | 
219  |  |  | 
220  |  |   hb_test_add (test_ot_face_empty);  | 
221  |  |   hb_test_add (test_ot_var_axis_on_zero_named_instance);  | 
222  |  |  | 
223  |  |   return hb_test_run();  | 
224  |  | }  | 
225  |  | #endif  |