X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Ftests%2FDrupal%2FFunctionalTests%2FImage%2FToolkitTestBase.php;fp=web%2Fcore%2Ftests%2FDrupal%2FFunctionalTests%2FImage%2FToolkitTestBase.php;h=cf024e26ef8089cf7d7e6aaa8fb468750bc0007a;hp=0000000000000000000000000000000000000000;hb=bfbba508964731508b9bd6d5835c2edc858db95b;hpb=cb9a80db11fc6b014e5b1e693a5a391c95eb5d9a diff --git a/web/core/tests/Drupal/FunctionalTests/Image/ToolkitTestBase.php b/web/core/tests/Drupal/FunctionalTests/Image/ToolkitTestBase.php new file mode 100644 index 000000000..cf024e26e --- /dev/null +++ b/web/core/tests/Drupal/FunctionalTests/Image/ToolkitTestBase.php @@ -0,0 +1,159 @@ +imageFactory = $this->container->get('image.factory'); + + // Pick a file for testing. + $file = current($this->drupalGetTestFiles('image')); + $this->file = $file->uri; + + // Setup a dummy image to work with. + $this->image = $this->getImage(); + + // Clear out any hook calls. + $this->imageTestReset(); + } + + /** + * Sets up an image with the custom toolkit. + * + * @return \Drupal\Core\Image\ImageInterface + * The image object. + */ + protected function getImage() { + $image = $this->imageFactory->get($this->file, 'test'); + $this->assertTrue($image->isValid(), 'Image file was parsed.'); + return $image; + } + + /** + * Assert that all of the specified image toolkit operations were called + * exactly once once, other values result in failure. + * + * @param $expected + * Array with string containing with the operation name, e.g. 'load', + * 'save', 'crop', etc. + */ + public function assertToolkitOperationsCalled(array $expected) { + // If one of the image operations is expected, apply should be expected as + // well. + $operations = [ + 'resize', + 'rotate', + 'crop', + 'desaturate', + 'create_new', + 'scale', + 'scale_and_crop', + 'my_operation', + 'convert', + ]; + if (count(array_intersect($expected, $operations)) > 0 && !in_array('apply', $expected)) { + $expected[] = 'apply'; + } + + // Determine which operations were called. + $actual = array_keys(array_filter($this->imageTestGetAllCalls())); + + // Determine if there were any expected that were not called. + $uncalled = array_diff($expected, $actual); + if (count($uncalled)) { + $this->assertTrue(FALSE, SafeMarkup::format('Expected operations %expected to be called but %uncalled was not called.', ['%expected' => implode(', ', $expected), '%uncalled' => implode(', ', $uncalled)])); + } + else { + $this->assertTrue(TRUE, SafeMarkup::format('All the expected operations were called: %expected', ['%expected' => implode(', ', $expected)])); + } + + // Determine if there were any unexpected calls. + // If all unexpected calls are operations and apply was expected, we do not + // count it as an error. + $unexpected = array_diff($actual, $expected); + if (count($unexpected) && (!in_array('apply', $expected) || count(array_intersect($unexpected, $operations)) !== count($unexpected))) { + $this->assertTrue(FALSE, SafeMarkup::format('Unexpected operations were called: %unexpected.', ['%unexpected' => implode(', ', $unexpected)])); + } + else { + $this->assertTrue(TRUE, 'No unexpected operations were called.'); + } + } + + /** + * Resets/initializes the history of calls to the test toolkit functions. + */ + protected function imageTestReset() { + // Keep track of calls to these operations + $results = [ + 'parseFile' => [], + 'save' => [], + 'settings' => [], + 'apply' => [], + 'resize' => [], + 'rotate' => [], + 'crop' => [], + 'desaturate' => [], + 'create_new' => [], + 'scale' => [], + 'scale_and_crop' => [], + 'convert' => [], + ]; + \Drupal::state()->set('image_test.results', $results); + } + + /** + * Gets an array of calls to the test toolkit. + * + * @return array + * An array keyed by operation name ('parseFile', 'save', 'settings', + * 'resize', 'rotate', 'crop', 'desaturate') with values being arrays of + * parameters passed to each call. + */ + protected function imageTestGetAllCalls() { + return \Drupal::state()->get('image_test.results') ?: []; + } + +}