summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn-Mark Bell <jmb@netsurf-browser.org>2022-05-21 19:37:07 +0100
committerJohn-Mark Bell <jmb@netsurf-browser.org>2022-05-21 19:37:07 +0100
commit37885aaa2300acb12f57e1dfa7824de32ccd6a17 (patch)
tree8e9998934ec279c0d7b6d32a10c01b739d37002a
parent02a17503dbe2ff2f90d2f2f5e60025c2f6ec716e (diff)
downloadlibrufl-37885aaa2300acb12f57e1dfa7824de32ccd6a17.tar.gz
librufl-37885aaa2300acb12f57e1dfa7824de32ccd6a17.tar.bz2
Expand test to cover more API
-rw-r--r--test/mocks.c48
-rw-r--r--test/ucsinit.c47
2 files changed, 93 insertions, 2 deletions
diff --git a/test/mocks.c b/test/mocks.c
index c70f9f5..132e8ac 100644
--- a/test/mocks.c
+++ b/test/mocks.c
@@ -161,9 +161,53 @@ os_error *xfont_read_info (font_f font, int *x0, int *y0, int *x1, int *y1)
if (y0 != NULL)
*y0 = 0;
if (x1 != NULL)
- *x1 = ((h->fonts[font].xsize >> 4) * 72) / 180;
+ *x1 = (h->fonts[font].xsize * 180) / (72 * 16);
if (y1 != NULL)
- *y1 = ((h->fonts[font].ysize >> 4) * 72) / 180;
+ *y1 = (h->fonts[font].ysize * 180) / (72 * 16);
+
+ return NULL;
+}
+
+os_error *xfont_read_font_metrics (font_f font, font_bbox_info *bbox_info,
+ font_width_info *xwidth_info, font_width_info *ywidth_info,
+ font_metrics_misc_info *misc_info, font_kern_info *kern_info,
+ font_metric_flags *flags, int *bbox_info_size,
+ int *xwidth_info_size, int *ywidth_info_size,
+ int *misc_info_size, int *kern_info_size)
+{
+ if (font == 0)
+ return &font_bad_font_number;
+ if (h->fonts[font].refcnt == 0)
+ return &font_no_font;
+ if (bbox_info != NULL || xwidth_info != NULL || ywidth_info != NULL ||
+ kern_info != NULL || flags != NULL)
+ return &unimplemented;
+
+ if (misc_info != NULL) {
+ os_error *err = xfont_read_info(font,
+ &misc_info->x0, &misc_info->y0,
+ &misc_info->x1, &misc_info->y1);
+ if (err != NULL)
+ return err;
+ misc_info->xkern = misc_info->ykern = 0;
+ misc_info->italic_correction = 0;
+ misc_info->underline_position = 0;
+ misc_info->underline_thickness = 0;
+ misc_info->cap_height = misc_info->y1 - misc_info->y0;
+ misc_info->xheight = misc_info->cap_height >> 1;
+ misc_info->descender = misc_info->ascender = 0;
+ }
+
+ if (bbox_info_size != NULL)
+ *bbox_info_size = 0;
+ if (xwidth_info_size != NULL)
+ *xwidth_info_size = 0;
+ if (ywidth_info_size != NULL)
+ *ywidth_info_size = 0;
+ if (misc_info_size != NULL)
+ *misc_info_size = sizeof(font_metrics_misc_info);
+ if (kern_info_size != NULL)
+ *kern_info_size = 0;
return NULL;
}
diff --git a/test/ucsinit.c b/test/ucsinit.c
index 3b59a2f..b3d8f53 100644
--- a/test/ucsinit.c
+++ b/test/ucsinit.c
@@ -7,12 +7,59 @@
int main(int argc, const char **argv)
{
+ int width, x;
+ size_t offset;
+ int32_t xkern, ykern, italic, ascent, descent, xheight, cap_height;
+ int8_t uline_position;
+ uint8_t uline_thickness;
+ os_box bbox;
+
UNUSED(argc);
UNUSED(argv);
rufl_test_harness_init(380, true, true);
assert(rufl_OK == rufl_init());
+ assert(NULL == rufl_fm_error);
+ assert(3 == rufl_family_list_entries);
+ assert(NULL != rufl_family_menu);
+
+ assert(rufl_OK == rufl_font_metrics("Corpus", rufl_WEIGHT_500,
+ &bbox, &xkern, &ykern, &italic,
+ &ascent, &descent, &xheight, &cap_height,
+ &uline_position, &uline_thickness));
+ assert(0 == bbox.x0);
+ assert(2 == bbox.x1);
+ assert(0 == bbox.y0);
+ assert(2 == bbox.y1);
+ assert(0 == xkern);
+ assert(0 == ykern);
+ assert(0 == italic);
+ assert(0 == ascent);
+ assert(0 == descent);
+ assert((bbox.y1 - bbox.y0) == cap_height);
+ assert((cap_height / 2) == xheight);
+ assert(0 == uline_position);
+ assert(0 == uline_thickness);
+
+ assert(rufl_OK == rufl_width("Corpus", rufl_WEIGHT_500, 10,
+ (const uint8_t *) "!\xc2\xa0", 3, &width));
+ assert(2 == width);
+
+ assert(rufl_OK == rufl_x_to_offset("Homerton", rufl_WEIGHT_500, 10,
+ (const uint8_t *) "!\xc2\xa0", 3, 1,
+ &offset, &x));
+ assert(1 == offset);
+ assert(1 == x);
+
+ assert(rufl_OK == rufl_split("Trinity", rufl_WEIGHT_500, 10,
+ (const uint8_t *) "!\xc2\xa0", 3, 1,
+ &offset, &x));
+ assert(1 == offset);
+ assert(1 == x);
+
+ rufl_dump_state(true);
+
rufl_quit();
printf("PASS\n");