diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2016-09-22 11:52:10 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2016-09-23 12:00:41 +0200 |
commit | 726c5999ebe8d99da3ac9624ccaaab3ec41d6051 (patch) | |
tree | fdebda4e6d88d3a1b0fd3f8f15465a3d2a3fa139 | |
parent | 49c3fa43ada1b58b0283edc5e4795e4e86953407 (diff) | |
download | php-git-726c5999ebe8d99da3ac9624ccaaab3ec41d6051.tar.gz |
Rework FreeType related tests
Firstly, there is no fundamental difference between running the tests on
freetype before and after 2.4.10, so we re-join the respective test cases.
Secondly, there are some minor differences in the results depending on
architecture, freetype versions and config options, so we cater to that
by allowing small deviations from the expectations.
-rw-r--r-- | ext/gd/tests/bug43073.phpt | 72 | ||||
-rw-r--r-- | ext/gd/tests/bug43073_1.phpt | 53 | ||||
-rw-r--r-- | ext/gd/tests/bug48801.phpt | 15 | ||||
-rw-r--r-- | ext/gd/tests/bug48801_1.phpt | 25 | ||||
-rw-r--r-- | ext/gd/tests/bug53504.phpt | 94 |
5 files changed, 104 insertions, 155 deletions
diff --git a/ext/gd/tests/bug43073.phpt b/ext/gd/tests/bug43073.phpt index 8ddd324421..8b58e511cc 100644 --- a/ext/gd/tests/bug43073.phpt +++ b/ext/gd/tests/bug43073.phpt @@ -1,29 +1,53 @@ --TEST-- -Bug #43073 (TrueType bounding box is wrong for angle<>0) freetype < 2.4.10 +Bug #43073 (TrueType bounding box is wrong for angle<>0) --SKIPIF-- <?php if(!extension_loaded('gd')){ die('skip gd extension not available'); } if(!function_exists('imagettftext')) die('skip imagettftext() not available'); - - include dirname(__FILE__) . '/func.inc'; - if(version_compare(get_freetype_version(), '2.4.10') >= 0) die('skip for freetype < 2.4.10'); ?> --FILE-- <?php +$exp = [ + [501,400, 611,400, 611,376, 501,376], + [492,361, 595,319, 586,296, 483,338], + [470,329, 549,251, 531,233, 453,312], + [439,307, 481,204, 458,195, 416,297], + [400,299, 400,189, 376,189, 376,299], + [361,307, 319,204, 296,213, 338,316], + [329,329, 251,250, 233,267, 311,346], + [307,360, 204,318, 195,341, 297,383], + [299,400, 189,400, 189,424, 299,424], + [307,438, 204,480, 213,503, 316,461], + [329,470, 250,548, 267,566, 346,488], + [360,492, 318,595, 341,604, 383,502], + [400,501, 400,611, 424,611, 424,501], + [438,492, 480,595, 503,586, 461,483], + [470,470, 548,549, 566,532, 488,453], + [492,439, 595,481, 604,458, 502,416] +]; $cwd = dirname(__FILE__); $font = "$cwd/Tuffy.ttf"; $delta_t = 360.0 / 16; # Make 16 steps around $g = imagecreate(800, 800); $bgnd = imagecolorallocate($g, 255, 255, 255); $black = imagecolorallocate($g, 0, 0, 0); +$red = imagecolorallocate($g, 255, 0, 0); $x = 100; $y = 0; $cos_t = cos(deg2rad($delta_t)); $sin_t = sin(deg2rad($delta_t)); -for ($angle = 0.0; $angle < 360.0; $angle += $delta_t) { +for ($angle = 0.0, $i = 0; $angle < 360.0; $angle += $delta_t, $i++) { $bbox = imagettftext($g, 24, $angle, 400+$x, 400+$y, $black, $font, 'ABCDEF'); - $s = vsprintf("(%d, %d), (%d, %d), (%d, %d), (%d, %d)\n", $bbox); - echo $s; + imagepolygon($g, $bbox, 4, $red); + printf("%2d: ", $i); + for ($j = 0; $j < 8; $j++) { + if ($bbox[$j] >= $exp[$i][$j] - 1 && $bbox[$j] <= $exp[$i][$j] + 1) { + echo '.'; + } else { + echo "(expected $exp[$i][$j], got $bbox[$j])"; + } + } + echo "\n"; $temp = $cos_t * $x + $sin_t * $y; $y = $cos_t * $y - $sin_t * $x; $x = $temp; @@ -32,20 +56,20 @@ imagepng($g, "$cwd/bug43073.png"); ?> --CLEAN-- <?php @unlink(dirname(__FILE__) . '/bug43073.png'); ?> ---EXPECTF-- -(500, 40%d), (610, 40%d), (610, 376), (500, 376) -(492, 363), (591, 322), (580, 295), (480, 336) -(470, 331), (548, 254), (527, 233), (449, 310) -(439, 309), (483, 202), (461, 193), (416, 299) -(40%d, 300), (40%d, 183), (38%d, 183), (38%d, 300) -(362, 307), (316, 195), (291, 205), (337, 318) -(330, 329), (246, 244), (224, 265), (308, 350) -(308, 360), (202, 316), (190, 344), (296, 388) -(300, %d), (18%d, %d), (18%d, 425), (%d, 425) -(306, 437), (195, 483), (206, 510), (318, 464) -(328, 469), (240, 557), (260, 578), (349, 491) -(359, 491), (312, 607), (334, 616), (382, 501) -(%d, 500), (%d, 618), (41%d, 618), (41%d, 500) -(436, 493), (483, 607), (507, 597), (461, 482) -(468, 471), (555, 558), (577, 538), (490, 450) -(490, 440), (600, 485), (611, 457), (502, 412) +--EXPECT-- + 0: ........ + 1: ........ + 2: ........ + 3: ........ + 4: ........ + 5: ........ + 6: ........ + 7: ........ + 8: ........ + 9: ........ +10: ........ +11: ........ +12: ........ +13: ........ +14: ........ +15: ........ diff --git a/ext/gd/tests/bug43073_1.phpt b/ext/gd/tests/bug43073_1.phpt deleted file mode 100644 index a0682bcf63..0000000000 --- a/ext/gd/tests/bug43073_1.phpt +++ /dev/null @@ -1,53 +0,0 @@ ---TEST-- -Bug #43073 (TrueType bounding box is wrong for angle<>0) freetype >= 2.4.10 ---SKIPIF-- -<?php - if(!extension_loaded('gd')){ die('skip gd extension not available'); } - if(!function_exists('imagettftext')) die('skip imagettftext() not available'); - - include dirname(__FILE__) . '/func.inc'; - if(version_compare(get_freetype_version(), '2.4.10') == -1) die('skip for freetype >= 2.4.10'); -?> ---FILE-- -<?php -$cwd = dirname(__FILE__); -$font = "$cwd/Tuffy.ttf"; -$delta_t = 360.0 / 16; # Make 16 steps around -$g = imagecreate(800, 800); -$bgnd = imagecolorallocate($g, 255, 255, 255); -$black = imagecolorallocate($g, 0, 0, 0); -$red = imagecolorallocate($g, 255, 0, 0); -$x = 100; -$y = 0; -$cos_t = cos(deg2rad($delta_t)); -$sin_t = sin(deg2rad($delta_t)); -for ($angle = 0.0; $angle < 360.0; $angle += $delta_t) { - $bbox = imagettftext($g, 24, $angle, 400+$x, 400+$y, $black, $font, 'ABCDEF'); - imagepolygon($g, $bbox, 4, $red); - $s = vsprintf("(%d, %d), (%d, %d), (%d, %d), (%d, %d)\n", $bbox); - echo $s; - $temp = $cos_t * $x + $sin_t * $y; - $y = $cos_t * $y - $sin_t * $x; - $x = $temp; -} -imagepng($g, "$cwd/bug43073.png"); -?> ---CLEAN-- -<?php @unlink(dirname(__FILE__) . '/bug43073.png'); ?> ---EXPECTF-- -(501, 400), (611, 400), (611, 376), (501, 376) -(492, 361), (595, 319), (586, 296), (483, 338) -(470, 329), (549, 251), (531, 233), (453, 312) -(439, 307), (481, 204), (458, 195), (416, 297) -(400, 299), (400, 189), (376, 189), (376, 299) -(361, 307), (319, 204), (296, 213), (338, 316) -(329, 329), (251, 250), (233, 267), (311, 346) -(307, 360), (204, 318), (195, 341), (297, 383) -(299, 400), (189, 400), (189, 424), (299, 424) -(307, 438), (204, 480), (213, 503), (316, 461) -(329, 470), (250, 548), (267, 566), (346, 488) -(360, 492), (318, 595), (341, 604), (383, 502) -(400, 501), (400, 611), (424, 611), (424, 501) -(438, 492), (480, 595), (503, 586), (461, 483) -(470, 470), (548, 549), (566, 532), (488, 453) -(492, 439), (595, 481), (604, 458), (502, 416) diff --git a/ext/gd/tests/bug48801.phpt b/ext/gd/tests/bug48801.phpt index 773564f782..f55ed55844 100644 --- a/ext/gd/tests/bug48801.phpt +++ b/ext/gd/tests/bug48801.phpt @@ -1,12 +1,9 @@ --TEST-- -Bug #48801 (Problem with imagettfbbox) freetype < 2.4.10 +Bug #48801 (Problem with imagettfbbox) --SKIPIF-- <?php if(!extension_loaded('gd')){ die('skip gd extension not available'); } if(!function_exists('imageftbbox')) die('skip imageftbbox() not available'); - - include dirname(__FILE__) . '/func.inc'; - if(version_compare(get_freetype_version(), '2.4.10') >= 0) die('skip for freetype < 2.4.10'); ?> --FILE-- <?php @@ -18,8 +15,8 @@ echo '(' . $bbox[2] . ', ' . $bbox[3] . ")\n"; echo '(' . $bbox[4] . ', ' . $bbox[5] . ")\n"; echo '(' . $bbox[6] . ', ' . $bbox[7] . ")\n"; ?> ---EXPECTF-- -(-1, 15) -(15%d, 15) -(15%d, -48) -(-1, -48) +--EXPECTREGEX-- +\(4, 15\) +\(16[0-1], 15\) +\(16[0-1], -4[7-8]\) +\(4, -4[7-8]\) diff --git a/ext/gd/tests/bug48801_1.phpt b/ext/gd/tests/bug48801_1.phpt deleted file mode 100644 index f0f3f93fd4..0000000000 --- a/ext/gd/tests/bug48801_1.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Bug #48801 (Problem with imagettfbbox) freetype >= 2.4.10 ---SKIPIF-- -<?php - if(!extension_loaded('gd')){ die('skip gd extension not available'); } - if(!function_exists('imageftbbox')) die('skip imageftbbox() not available'); - - include dirname(__FILE__) . '/func.inc'; - if(version_compare(get_freetype_version(), '2.4.10') == -1) die('skip for freetype >= 2.4.10'); -?> ---FILE-- -<?php -$cwd = dirname(__FILE__); -$font = "$cwd/Tuffy.ttf"; -$bbox = imageftbbox(50, 0, $font, "image"); -echo '(' . $bbox[0] . ', ' . $bbox[1] . ")\n"; -echo '(' . $bbox[2] . ', ' . $bbox[3] . ")\n"; -echo '(' . $bbox[4] . ', ' . $bbox[5] . ")\n"; -echo '(' . $bbox[6] . ', ' . $bbox[7] . ")\n"; -?> ---EXPECTF-- -(4, 15) -(161, 15) -(161, -47) -(4, -47) diff --git a/ext/gd/tests/bug53504.phpt b/ext/gd/tests/bug53504.phpt index c84ee78fdb..bb6cc7a93f 100644 --- a/ext/gd/tests/bug53504.phpt +++ b/ext/gd/tests/bug53504.phpt @@ -4,9 +4,6 @@ Bug #53504 imagettfbbox/imageftbbox gives incorrect values for bounding box <?php if(!extension_loaded('gd')){ die('skip gd extension not available'); } if(!function_exists('imageftbbox')) die('skip imageftbbox() not available'); - - include dirname(__FILE__) . '/func.inc'; - if(version_compare(get_freetype_version(), '2.4.10') == -1) die('skip for freetype < 2.4.10'); ?> --FILE-- <?php @@ -21,40 +18,49 @@ $blue = imagecolorallocate($g, 0, 0, 255); $tests = [ // Kerning examples (unfortunately not available in "Tuffy" test font): - ['fontSize' => 50, 'angle' => 0, 'x' => 20, 'y' => 70, 'text' => 'AV Teg'], - ['fontSize' => 50, 'angle' => 90, 'x' => 70, 'y' => 350, 'text' => 'AV Teg'], - ['fontSize' => 50, 'angle' => 40, 'x' => 130, 'y' => 280, 'text' => 'AV Teg'], + ['fontSize' => 50, 'angle' => 0, 'x' => 20, 'y' => 70, 'text' => 'AV Teg', 'exp' => [2,15, 208,15, 208,-48, 2,-48]], + ['fontSize' => 50, 'angle' => 90, 'x' => 70, 'y' => 350, 'text' => 'AV Teg', 'exp' => [15,-1, 15,-208, -48,-208, -48,-2]], + ['fontSize' => 50, 'angle' => 40, 'x' => 130, 'y' => 280, 'text' => 'AV Teg', 'exp' => [11,11, 169,-122, 129,-171, -30,-39]], // Shift-Test: - ['fontSize' => 100, 'angle' => 0, 'x' => 350, 'y' => 110, 'text' => 'H-Shift'], + ['fontSize' => 100, 'angle' => 0, 'x' => 350, 'y' => 110, 'text' => 'H-Shift', 'exp' => [8,2, 386,2, 386,-97, 8,-97]], // Small/single chars: - ['fontSize' => 100, 'angle' => 0, 'x' => 350, 'y' => 220, 'text' => '-'], - ['fontSize' => 100, 'angle' => 0, 'x' => 430, 'y' => 220, 'text' => ','], - ['fontSize' => 100, 'angle' => 0, 'x' => 510, 'y' => 220, 'text' => '.'], - ['fontSize' => 100, 'angle' => 0, 'x' => 590, 'y' => 220, 'text' => '|'], - ['fontSize' => 100, 'angle' => 0, 'x' => 670, 'y' => 220, 'text' => 'g'], + ['fontSize' => 100, 'angle' => 0, 'x' => 350, 'y' => 220, 'text' => '-', 'exp' => [7,-37, 51,-37, 51,-46, 7,-46]], + ['fontSize' => 100, 'angle' => 0, 'x' => 430, 'y' => 220, 'text' => ',', 'exp' => [7,15, 21,15, 21,-13, 7,-13]], + ['fontSize' => 100, 'angle' => 0, 'x' => 510, 'y' => 220, 'text' => '.', 'exp' => [7,1, 21,1, 21,-13, 7,-13]], + ['fontSize' => 100, 'angle' => 0, 'x' => 590, 'y' => 220, 'text' => '|', 'exp' => [8,0, 17,0, 17,-95, 8,-95]], + ['fontSize' => 100, 'angle' => 0, 'x' => 670, 'y' => 220, 'text' => 'g', 'exp' => [5,29, 60,29, 60,-72, 5,-72]], // Multi-Line + rotation: - ['fontSize' => 30, 'angle' => 0, 'x' => 20, 'y' => 400, 'text' => "Multi\nLine\nTest"], - ['fontSize' => 30, 'angle' => 40, 'x' => 150, 'y' => 420, 'text' => "Multi\nLine\nTest"], - ['fontSize' => 30, 'angle' => 90, 'x' => 250, 'y' => 340, 'text' => "Multi\nLine\nTest"], + ['fontSize' => 30, 'angle' => 0, 'x' => 20, 'y' => 400, 'text' => "Multi\nLine\nTest", 'exp' => [2,107, 80,107, 80,-29, 2,-29]], + ['fontSize' => 30, 'angle' => 40, 'x' => 150, 'y' => 420, 'text' => "Multi\nLine\nTest", 'exp' => [70,81, 131,31, 43,-74, -18,-24]], + ['fontSize' => 30, 'angle' => 90, 'x' => 250, 'y' => 340, 'text' => "Multi\nLine\nTest", 'exp' => [107,-1, 107,-80, -29,-80, -29,-2]], // Some edge case glyphs: - ['fontSize' => 50, 'angle' => 90, 'x' => 70, 'y' => 750, 'text' => "iiiiiiiiiiii"], - ['fontSize' => 50, 'angle' => 90, 'x' => 150, 'y' => 750, 'text' => "~~~~~~~"], - ['fontSize' => 50, 'angle' => 50, 'x' => 210, 'y' => 750, 'text' => "iiiiiiiiiiii"], - ['fontSize' => 50, 'angle' => 50, 'x' => 300, 'y' => 750, 'text' => "~~~~~~~"], - ['fontSize' => 50, 'angle' => 0, 'x' => 430, 'y' => 650, 'text' => "iiiiiiiiiiii"], - ['fontSize' => 50, 'angle' => 0, 'x' => 430, 'y' => 750, 'text' => "~~~~~~~"], + ['fontSize' => 50, 'angle' => 90, 'x' => 70, 'y' => 750, 'text' => "iiiiiiiiiiii", 'exp' => [0,-4, 0,-165, -47,-165, -47,-4]], + ['fontSize' => 50, 'angle' => 90, 'x' => 150, 'y' => 750, 'text' => "~~~~~~~", 'exp' => [-19,-2, -18,-167, -29,-167, -29,-2]], + ['fontSize' => 50, 'angle' => 50, 'x' => 210, 'y' => 750, 'text' => "iiiiiiiiiiii", 'exp' => [3,-3, 107,-127, 70,-157, -34,-33]], + ['fontSize' => 50, 'angle' => 50, 'x' => 300, 'y' => 750, 'text' => "~~~~~~~", 'exp' => [-13,-13, 93,-141, 85,-147, -21,-20]], + ['fontSize' => 50, 'angle' => 0, 'x' => 430, 'y' => 650, 'text' => "iiiiiiiiiiii", 'exp' => [4,0, 165,0, 165,-47, 4,-47]], + ['fontSize' => 50, 'angle' => 0, 'x' => 430, 'y' => 750, 'text' => "~~~~~~~", 'exp' => [2,-19, 167,-19, 167,-29, 2,-29]], // "Big" test: - ['fontSize' => 200, 'angle' => 0, 'x' => 400, 'y' => 500, 'text' => "Big"], + ['fontSize' => 200, 'angle' => 0, 'x' => 400, 'y' => 500, 'text' => "Big", 'exp' => [16,59, 329,59, 329,-190, 16,-190]], ]; -foreach ($tests as $test) { +foreach ($tests as $testnum => $test) { $bbox = imageftbbox($test['fontSize'], $test['angle'], $font, $test['text']); - vprintf("(%d, %d), (%d, %d), (%d, %d), (%d, %d)\n", $bbox); + printf('%2d: ', $testnum); + for ($i = 0; $i < 8; $i++) { + $exp = $test['exp'][$i]; + if ($bbox[$i] >= $exp - 2 && $bbox[$i] <= $exp + 2) { + echo '.'; + } else { + echo "(expected $exp, got $bbox[$i])"; + } + } + echo "\n"; $bboxDrawn = imagefttext($g, $test['fontSize'], $test['angle'], $test['x'], $test['y'], $black, $font, $test['text']); @@ -79,23 +85,23 @@ imagepng($g, "$cwd/bug53504.png"); ?> --CLEAN-- <?php @unlink(dirname(__FILE__) . '/bug53504.png'); ?> ---EXPECTF-- -(2, 15), (208, 15), (208, -48), (2, -48) -(15, -1), (15, -208), (-48, -208), (-48, -2) -(11, 11), (169, -122), (129, -171), (-30, -39) -(8, 2), (385, 2), (385, -97), (8, -97) -(7, -37), (51, -37), (51, -46), (7, -46) -(7, 15), (21, 15), (21, -13), (7, -13) -(7, 1), (21, 1), (21, -13), (7, -13) -(8, 0), (17, 0), (17, -95), (8, -95) -(5, 29), (60, 29), (60, -72), (5, -72) -(2, 107), (80, 107), (80, -29), (2, -29) -(70, 81), (131, 31), (43, -74), (-18, -24) -(107, -1), (107, -80), (-29, -80), (-29, -2) -(0, -4), (0, -165), (-47, -165), (-47, -4) -(-19, -2), (-18, -167), (-29, -167), (-29, -2) -(3, -3), (107, -127), (70, -157), (-34, -33) -(-13, -13), (93, -141), (85, -147), (-21, -20) -(4, 0), (165, 0), (165, -47), (4, -47) -(2, -19), (167, -19), (167, -29), (2, -29) -(16, 59), (330, 59), (330, -190), (16, -190) +--EXPECT-- + 0: ........ + 1: ........ + 2: ........ + 3: ........ + 4: ........ + 5: ........ + 6: ........ + 7: ........ + 8: ........ + 9: ........ +10: ........ +11: ........ +12: ........ +13: ........ +14: ........ +15: ........ +16: ........ +17: ........ +18: ........ |