summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/get-path-extents.c143
1 files changed, 62 insertions, 81 deletions
diff --git a/test/get-path-extents.c b/test/get-path-extents.c
index 6f3bc107..214596eb 100644
--- a/test/get-path-extents.c
+++ b/test/get-path-extents.c
@@ -108,7 +108,7 @@ draw (cairo_t *cr, int width, int height)
const char *phase;
const char string[] = "The quick brown fox jumps over the lazy dog.";
cairo_text_extents_t extents, scaled_font_extents;
- cairo_test_status_t ret = CAIRO_TEST_SUCCESS;
+ int errors = 0;
surface = cairo_surface_create_similar (cairo_get_group_target (cr),
CAIRO_CONTENT_COLOR, 100, 100);
@@ -122,10 +122,9 @@ draw (cairo_t *cr, int width, int height)
cairo_set_miter_limit (cr2, 100);
phase = "No path";
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, PATH, EQUALS, 0, 0, 0, 0))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 0, 0, 0, 0);
cairo_save (cr2);
@@ -133,35 +132,31 @@ draw (cairo_t *cr, int width, int height)
cairo_move_to (cr2, 200, 400);
cairo_rel_line_to (cr2, 0., 0.);
phase = "Degenerate line";
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0);
cairo_new_path (cr2);
cairo_move_to (cr2, 200, 400);
cairo_rel_curve_to (cr2, 0., 0., 0., 0., 0., 0.);
phase = "Degenerate curve";
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0);
cairo_new_path (cr2);
cairo_arc (cr2, 200, 400, 0., 0, 2 * M_PI);
phase = "Degenerate arc (R=0)";
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0);
cairo_new_path (cr2);
cairo_arc (cr2, 200, 400, 10., 0, 0);
phase = "Degenerate arc (Θ=0)";
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0);
cairo_new_path (cr2);
cairo_restore (cr2);
@@ -176,19 +171,17 @@ draw (cairo_t *cr, int width, int height)
cairo_move_to (cr2, 200, 400);
cairo_rel_line_to (cr2, 0, 0);
phase = "Single 'dot'";
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 190, 390, 20, 20) ||
- !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 190, 390, 20, 20);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 200, 400, 0, 0);
/* Add another dot without starting a new path */
cairo_move_to (cr2, 100, 500);
cairo_rel_line_to (cr2, 0, 0);
phase = "Multiple 'dots'";
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 90, 390, 120, 120) ||
- !check_extents (phase, cr2, PATH, EQUALS, 100, 400, 100, 100))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 90, 390, 120, 120);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 100, 400, 100, 100);
cairo_new_path (cr2);
@@ -201,20 +194,18 @@ draw (cairo_t *cr, int width, int height)
cairo_set_line_join (cr2, CAIRO_LINE_JOIN_ROUND);
cairo_move_to (cr2, 0, 180);
cairo_line_to (cr2, 750, 180);
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0) ||
- !check_extents (phase, cr2, STROKE, EQUALS, -5, 175, 760, 10) ||
- !check_extents (phase, cr2, PATH, EQUALS, 0, 180, 755, 0))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, 0, 0);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, -5, 175, 760, 10);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 0, 180, 755, 0);
cairo_new_path (cr2);
cairo_restore (cr2);
phase = "Simple rect";
cairo_save (cr2);
cairo_rectangle (cr2, 10, 10, 80, 80);
- if (!check_extents (phase, cr2, FILL, EQUALS, 10, 10, 80, 80) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 5, 5, 90, 90) ||
- !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 80, 80))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 10, 10, 80, 80);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 5, 5, 90, 90);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 80, 80);
cairo_new_path (cr2);
cairo_restore (cr2);
@@ -222,10 +213,9 @@ draw (cairo_t *cr, int width, int height)
cairo_save (cr2);
cairo_rectangle (cr2, 10, 10, 10, 10);
cairo_rectangle (cr2, 20, 20, 10, 10);
- if (!check_extents (phase, cr2, FILL, EQUALS, 10, 10, 20, 20) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 5, 5, 30, 30) ||
- !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 20, 20))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 10, 10, 20, 20);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 5, 5, 30, 30);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 20, 20);
cairo_new_path (cr2);
cairo_restore (cr2);
@@ -237,10 +227,9 @@ draw (cairo_t *cr, int width, int height)
cairo_close_path (cr2);
/* miter joins protrude 5*(1+sqrt(2)) above the top-left corner and to
the right of the bottom-right corner */
- if (!check_extents (phase, cr2, FILL, EQUALS, 10, 10, 80, 80) ||
- !check_extents (phase, cr2, STROKE, CONTAINS, 0, 5, 95, 95) ||
- !check_extents (phase, cr2, PATH, CONTAINS, 10, 10, 80, 80))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 10, 10, 80, 80);
+ errors += !check_extents (phase, cr2, STROKE, CONTAINS, 0, 5, 95, 95);
+ errors += !check_extents (phase, cr2, PATH, CONTAINS, 10, 10, 80, 80);
cairo_new_path (cr2);
cairo_restore (cr2);
@@ -253,19 +242,17 @@ draw (cairo_t *cr, int width, int height)
cairo_set_fill_rule (cr2, CAIRO_FILL_RULE_EVEN_ODD);
phase = "EVEN_ODD overlapping rectangles";
- if (!check_extents (phase, cr2, FILL, EQUALS, 10, 10, 15, 30) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 8, 8, 34, 34) ||
- !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 30, 30))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 10, 10, 15, 30);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 8, 8, 34, 34);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 30, 30);
/* Test other fill rule with the same path. */
cairo_set_fill_rule (cr2, CAIRO_FILL_RULE_WINDING);
phase = "WINDING overlapping rectangles";
- if (!check_extents (phase, cr2, FILL, EQUALS, 10, 10, 30, 30) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 8, 8, 34, 34) ||
- !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 30, 30))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 10, 10, 30, 30);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 8, 8, 34, 34);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 30, 30);
/* Now, change the direction of the second rectangle and test both
* fill rules again. */
@@ -275,19 +262,17 @@ draw (cairo_t *cr, int width, int height)
cairo_set_fill_rule (cr2, CAIRO_FILL_RULE_EVEN_ODD);
phase = "EVEN_ODD overlapping rectangles";
- if (!check_extents (phase, cr2, FILL, EQUALS, 10, 10, 15, 30) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 8, 8, 34, 34) ||
- !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 30, 30))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 10, 10, 15, 30);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 8, 8, 34, 34);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 30, 30);
/* Test other fill rule with the same path. */
cairo_set_fill_rule (cr2, CAIRO_FILL_RULE_WINDING);
phase = "WINDING overlapping rectangles";
- if (!check_extents (phase, cr2, FILL, EQUALS, 10, 10, 15, 30) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 8, 8, 34, 34) ||
- !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 30, 30))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 10, 10, 15, 30);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 8, 8, 34, 34);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 30, 30);
cairo_new_path (cr2);
@@ -298,8 +283,7 @@ draw (cairo_t *cr, int width, int height)
cairo_save (cr2);
cairo_arc (cr2, 250.0, 250.0, 157.0, 5.147, 3.432);
cairo_set_line_width (cr2, 154.0);
- if (!check_extents (phase, cr2, STROKE, APPROX_EQUALS, 16, 38, 468, 446))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, STROKE, APPROX_EQUALS, 16, 38, 468, 446);
cairo_new_path (cr2);
cairo_restore (cr2);
@@ -325,16 +309,15 @@ draw (cairo_t *cr, int width, int height)
extents.y_bearing,
extents.width,
extents.height);
- ret = CAIRO_TEST_FAILURE;
+ errors++;
}
cairo_move_to (cr2, -extents.x_bearing, -extents.y_bearing);
cairo_text_path (cr2, string);
cairo_set_line_width (cr2, 2.0);
- if (!check_extents (phase, cr2, FILL, EQUALS, 0, 0, extents.width, extents.height) ||
- !check_extents (phase, cr2, STROKE, EQUALS, -1, -1, extents.width+2, extents.height+2) ||
- !check_extents (phase, cr2, PATH, EQUALS, 0, 0, extents.width, extents.height))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 0, 0, extents.width, extents.height);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, -1, -1, extents.width+2, extents.height+2);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 0, 0, extents.width, extents.height);
cairo_new_path (cr2);
cairo_restore (cr2);
@@ -342,10 +325,9 @@ draw (cairo_t *cr, int width, int height)
cairo_save (cr2);
cairo_scale (cr2, 2, 2);
cairo_rectangle (cr2, 5, 5, 40, 40);
- if (!check_extents (phase, cr2, FILL, EQUALS, 5, 5, 40, 40) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 50, 50) ||
- !check_extents (phase, cr2, PATH, EQUALS, 5, 5, 40, 40))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 5, 5, 40, 40);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 0, 0, 50, 50);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 5, 5, 40, 40);
cairo_new_path (cr2);
cairo_restore (cr2);
@@ -355,10 +337,9 @@ draw (cairo_t *cr, int width, int height)
cairo_scale (cr2, 2, 2);
cairo_rectangle (cr2, 5, 5, 40, 40);
cairo_restore (cr2);
- if (!check_extents (phase, cr2, FILL, EQUALS, 10, 10, 80, 80) ||
- !check_extents (phase, cr2, STROKE, EQUALS, 5, 5, 90, 90) ||
- !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 80, 80))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, EQUALS, 10, 10, 80, 80);
+ errors += !check_extents (phase, cr2, STROKE, EQUALS, 5, 5, 90, 90);
+ errors += !check_extents (phase, cr2, PATH, EQUALS, 10, 10, 80, 80);
cairo_new_path (cr2);
cairo_restore (cr2);
@@ -375,15 +356,15 @@ draw (cairo_t *cr, int width, int height)
the axes. With the stroke width added to the rotated path,
the largest axis-aligned square is a bit over 38 on either side of
the axes. */
- if (!check_extents (phase, cr2, FILL, CONTAINS, -35, -35, 35, 35) ||
- !check_extents (phase, cr2, STROKE, CONTAINS, -38, -38, 38, 38) ||
- !check_extents (phase, cr2, PATH, CONTAINS, -35, -35, 35, 35))
- ret = CAIRO_TEST_FAILURE;
+ errors += !check_extents (phase, cr2, FILL, CONTAINS, -35, -35, 35, 35);
+ errors += !check_extents (phase, cr2, STROKE, CONTAINS, -38, -38, 38, 38);
+ errors += !check_extents (phase, cr2, PATH, CONTAINS, -35, -35, 35, 35);
cairo_new_path (cr2);
cairo_restore (cr2);
cairo_destroy (cr2);
- return ret;
+
+ return errors == 0 ? CAIRO_TEST_SUCCESS : CAIRO_TEST_FAILURE;
}
int