Mercurial > hg > isophonics-drupal-site
comparison core/tests/Drupal/Tests/Component/Utility/RectangleTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\Component\Utility; | |
4 | |
5 use Drupal\Component\Utility\Rectangle; | |
6 use PHPUnit\Framework\TestCase; | |
7 | |
8 /** | |
9 * @coversDefaultClass \Drupal\Component\Utility\Rectangle | |
10 * @group Image | |
11 */ | |
12 class RectangleTest extends TestCase { | |
13 | |
14 /** | |
15 * Tests wrong rectangle width. | |
16 * | |
17 * @covers ::rotate | |
18 */ | |
19 public function testWrongWidth() { | |
20 $this->setExpectedException(\InvalidArgumentException::class); | |
21 $rect = new Rectangle(-40, 20); | |
22 } | |
23 | |
24 /** | |
25 * Tests wrong rectangle height. | |
26 * | |
27 * @covers ::rotate | |
28 */ | |
29 public function testWrongHeight() { | |
30 $this->setExpectedException(\InvalidArgumentException::class); | |
31 $rect = new Rectangle(40, 0); | |
32 } | |
33 | |
34 /** | |
35 * Tests getting rectangle dimensions after a rotation operation. | |
36 * | |
37 * @param int $width | |
38 * The width of the rectangle. | |
39 * @param int $height | |
40 * The height of the rectangle. | |
41 * @param float $angle | |
42 * The angle for rotation. | |
43 * @param int $exp_width | |
44 * The expected width of the rotated rectangle. | |
45 * @param int $exp_height | |
46 * The expected height of the rotated rectangle. | |
47 * | |
48 * @covers ::rotate | |
49 * @covers ::getBoundingWidth | |
50 * @covers ::getBoundingHeight | |
51 * | |
52 * @dataProvider providerPhp55RotateDimensions | |
53 */ | |
54 public function testRotateDimensions($width, $height, $angle, $exp_width, $exp_height) { | |
55 $rect = new Rectangle($width, $height); | |
56 $rect->rotate($angle); | |
57 $this->assertEquals($exp_width, $rect->getBoundingWidth()); | |
58 $this->assertEquals($exp_height, $rect->getBoundingHeight()); | |
59 } | |
60 | |
61 /** | |
62 * Provides data for image dimension rotation tests. | |
63 * | |
64 * This dataset sample was generated by running on PHP 5.5 the function below | |
65 * - first, for all integer rotation angles (-360 to 360) on a rectangle | |
66 * 40x20; | |
67 * - second, for 500 random float rotation angle in the range -360 to 360 on | |
68 * a rectangle 40x20; | |
69 * - third, on 1000 rectangles of random WxH rotated to a random float angle | |
70 * in the range -360 to 360 | |
71 * - fourth, on 2000 rectangles of random WxH rotated to a random integer | |
72 * angle multiple of 30 degrees in the range -360 to 360 (which is the most | |
73 * tricky case). | |
74 * Using the GD toolkit operations gives us true data coming from the GD | |
75 * library that can be used to match against the Rectangle class under test. | |
76 * @code | |
77 * protected function rotateResults($width, $height, $angle, &$new_width, &$new_height) { | |
78 * $image = \Drupal::service('image.factory')->get(NULL, 'gd'); | |
79 * $image->createNew($width, $height); | |
80 * $old_res = $image->getToolkit()->getResource(); | |
81 * $image->rotate($angle); | |
82 * $new_width = $image->getWidth(); | |
83 * $new_height = $image->getHeight(); | |
84 * if (is_resource($old_res)) { | |
85 * imagedestroy($old_res); | |
86 * } | |
87 * } | |
88 * @endcode | |
89 * | |
90 * @return array[] | |
91 * A simple array of simple arrays, each having the following elements: | |
92 * - original image width | |
93 * - original image height | |
94 * - rotation angle in degrees | |
95 * - expected image width after rotation | |
96 * - expected image height after rotation | |
97 * | |
98 * @see testRotateDimensions() | |
99 */ | |
100 public function providerPhp55RotateDimensions() { | |
101 // The dataset is stored in a .json file because it is very large and causes | |
102 // problems for PHPCS. | |
103 return json_decode(file_get_contents(__DIR__ . '/fixtures/RectangleTest.json')); | |
104 } | |
105 | |
106 } |