From 8ebf5bb8d1070b214ba3bc7a900da46283ebb510 Mon Sep 17 00:00:00 2001 From: marc1706 Date: Fri, 3 Jan 2014 13:30:52 +0100 Subject: [PATCH 1/3] [ticket/12071] Skip tests that depend on fileinfo and fix expected results Tests that depend on fileinfo being enabled will now be skipped to prevent fatal errors while running the test suite. The expected results will be modified to "application/octet-stream" in test_guess_files() if only the extension_guesser is available due to the non-existing extension of those files. PHPBB3-12071 --- tests/mimetype/guesser_test.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/mimetype/guesser_test.php b/tests/mimetype/guesser_test.php index 9f0371262b..244293020f 100644 --- a/tests/mimetype/guesser_test.php +++ b/tests/mimetype/guesser_test.php @@ -19,7 +19,9 @@ function function_exists($name) class guesser_test extends \phpbb_test_case { - public static $function_exists = true; + public static $function_exists = false; + + protected $fileinfo_supported = false; public function setUp() { @@ -28,7 +30,13 @@ class guesser_test extends \phpbb_test_case $guessers = array( new \Symfony\Component\HttpFoundation\File\MimeType\FileinfoMimeTypeGuesser(), new \Symfony\Component\HttpFoundation\File\MimeType\FileBinaryMimeTypeGuesser(), + new \phpbb\mimetype\extension_guesser, + new \phpbb\mimetype\content_guesser, ); + + // Check if any guesser except the extension_guesser is available + $this->fileinfo_supported = (bool) $guessers[0]->isSupported() | $guessers[1]->isSupported() | $guessers[3]->is_supported(); + $this->guesser = new \phpbb\mimetype\guesser($guessers); $this->path = dirname(__FILE__); $this->jpg_file = $this->path . '/fixtures/jpg'; @@ -52,6 +60,12 @@ class guesser_test extends \phpbb_test_case */ public function test_guess_files($expected, $file) { + // We will always get application/octet-stream as mimetype if only the + // extension guesser is supported + if ($expected && !$this->fileinfo_supported) + { + $expected = 'application/octet-stream'; + } $this->assertEquals($expected, $this->guesser->guess($this->path . '/../upload/fixture/' . $file)); } @@ -130,6 +144,11 @@ class guesser_test extends \phpbb_test_case $supported = false; self::$function_exists = !$overload; + if (!\function_exists('mime_content_type')) + { + $this->markTestSkipped('Emulating supported mime_content_type() when it is not supported will cause a fatal error'); + } + // Cover possible LogicExceptions foreach ($guessers as $cur_guesser) { From f111a9262fdca8668e57e3cc4230107e75d957a7 Mon Sep 17 00:00:00 2001 From: marc1706 Date: Fri, 3 Jan 2014 13:45:38 +0100 Subject: [PATCH 2/3] [ticket/12071] Get rid of unneeded cast to boolean in tests PHPBB3-12071 --- tests/mimetype/guesser_test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/mimetype/guesser_test.php b/tests/mimetype/guesser_test.php index 244293020f..a211b99147 100644 --- a/tests/mimetype/guesser_test.php +++ b/tests/mimetype/guesser_test.php @@ -35,7 +35,7 @@ class guesser_test extends \phpbb_test_case ); // Check if any guesser except the extension_guesser is available - $this->fileinfo_supported = (bool) $guessers[0]->isSupported() | $guessers[1]->isSupported() | $guessers[3]->is_supported(); + $this->fileinfo_supported = $guessers[0]->isSupported() | $guessers[1]->isSupported() | $guessers[3]->is_supported(); $this->guesser = new \phpbb\mimetype\guesser($guessers); $this->path = dirname(__FILE__); From 98aebabd73e0be202f91a31f3f689a8bccd01079 Mon Sep 17 00:00:00 2001 From: marc1706 Date: Fri, 3 Jan 2014 16:40:12 +0100 Subject: [PATCH 3/3] [ticket/12071] Add test that covers not available fileinfo The newly added test case will also emulate a non-existing fileinfo in order to check if the mimetype guesser is properly working when fileinfo is not available. PHPBB3-12071 --- tests/mimetype/guesser_test.php | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tests/mimetype/guesser_test.php b/tests/mimetype/guesser_test.php index a211b99147..7c58340a7a 100644 --- a/tests/mimetype/guesser_test.php +++ b/tests/mimetype/guesser_test.php @@ -37,6 +37,9 @@ class guesser_test extends \phpbb_test_case // Check if any guesser except the extension_guesser is available $this->fileinfo_supported = $guessers[0]->isSupported() | $guessers[1]->isSupported() | $guessers[3]->is_supported(); + // Also create a guesser that emulates not having fileinfo available + $this->guesser_no_fileinfo = new \phpbb\mimetype\guesser(array($guessers[2])); + $this->guesser = new \phpbb\mimetype\guesser($guessers); $this->path = dirname(__FILE__); $this->jpg_file = $this->path . '/fixtures/jpg'; @@ -62,13 +65,30 @@ class guesser_test extends \phpbb_test_case { // We will always get application/octet-stream as mimetype if only the // extension guesser is supported - if ($expected && !$this->fileinfo_supported) + if (!$this->fileinfo_supported) { - $expected = 'application/octet-stream'; + $this->markTestSkipped('Unable to run tests depending on fileinfo if it is not available'); } $this->assertEquals($expected, $this->guesser->guess($this->path . '/../upload/fixture/' . $file)); } + public function data_guess_files_no_fileinfo() + { + return array( + array('application/octet-stream', 'gif'), + array('application/octet-stream', 'txt'), + array(false, 'foobar'), + ); + } + + /** + * @dataProvider data_guess_files_no_fileinfo + */ + public function test_guess_files_no_fileinfo($expected, $file) + { + $this->assertEquals($expected, $this->guesser_no_fileinfo->guess($this->path . '/../upload/fixture/' . $file)); + } + public function test_file_not_readable() { @chmod($this->jpg_file, 0000);