From 64fa2bf831955e7be0e2ab8c5ee26cd3a99b23ca Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 25 Jun 2021 16:58:11 +0200 Subject: [PATCH 1/5] Tests/reorganize: move pathinfo tests to own file As this test does not actually need an instantiated PHPMailer object, this class extends the `Yoast\PHPUnitPolyfills\TestCases\TestCase` instead of the `PHPMailer\Test\TestCase`. Note: this doesn't move the complete test from the original test file, just select parts of the test method. --- test/PHPMailer/MbPathinfoTest.php | 54 +++++++++++++++++++++++++++++++ test/PHPMailer/PHPMailerTest.php | 24 -------------- 2 files changed, 54 insertions(+), 24 deletions(-) create mode 100644 test/PHPMailer/MbPathinfoTest.php diff --git a/test/PHPMailer/MbPathinfoTest.php b/test/PHPMailer/MbPathinfoTest.php new file mode 100644 index 00000000..71932425 --- /dev/null +++ b/test/PHPMailer/MbPathinfoTest.php @@ -0,0 +1,54 @@ + + * @author Andy Prevost + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + */ + +namespace PHPMailer\Test\PHPMailer; + +use PHPMailer\PHPMailer\PHPMailer; +use Yoast\PHPUnitPolyfills\TestCases\TestCase; + +/** + * Test Multi-byte-safe pathinfo replacement functionality. + */ +final class MbPathinfoTest extends TestCase +{ + + /** + * Miscellaneous calls to improve test coverage and some small tests. + */ + public function testMiscellaneous() + { + $a = '/mnt/files/飛兒樂 團光茫.mp3'; + $q = PHPMailer::mb_pathinfo($a); + self::assertSame('/mnt/files', $q['dirname'], 'UNIX dirname not matched'); + self::assertSame('飛兒樂 團光茫.mp3', $q['basename'], 'UNIX basename not matched'); + self::assertSame('mp3', $q['extension'], 'UNIX extension not matched'); + self::assertSame('飛兒樂 團光茫', $q['filename'], 'UNIX filename not matched'); + self::assertSame( + '/mnt/files', + PHPMailer::mb_pathinfo($a, PATHINFO_DIRNAME), + 'Dirname path element not matched' + ); + self::assertSame( + '飛兒樂 團光茫.mp3', + PHPMailer::mb_pathinfo($a, PATHINFO_BASENAME), + 'Basename path element not matched' + ); + self::assertSame('飛兒樂 團光茫', PHPMailer::mb_pathinfo($a, 'filename'), 'Filename path element not matched'); + $a = 'c:\mnt\files\飛兒樂 團光茫.mp3'; + $q = PHPMailer::mb_pathinfo($a); + self::assertSame('c:\mnt\files', $q['dirname'], 'Windows dirname not matched'); + self::assertSame('飛兒樂 團光茫.mp3', $q['basename'], 'Windows basename not matched'); + self::assertSame('mp3', $q['extension'], 'Windows extension not matched'); + self::assertSame('飛兒樂 團光茫', $q['filename'], 'Windows filename not matched'); + } +} diff --git a/test/PHPMailer/PHPMailerTest.php b/test/PHPMailer/PHPMailerTest.php index 60ad810b..91f10d06 100644 --- a/test/PHPMailer/PHPMailerTest.php +++ b/test/PHPMailer/PHPMailerTest.php @@ -1350,30 +1350,6 @@ EOT; self::assertTrue($this->Mail->set('Timeout', 11), 'Valid property set failed'); self::assertTrue($this->Mail->set('AllowEmpty', null), 'Null property set failed'); self::assertTrue($this->Mail->set('AllowEmpty', false), 'Valid property set of null property failed'); - //Test pathinfo - $a = '/mnt/files/飛兒樂 團光茫.mp3'; - $q = PHPMailer::mb_pathinfo($a); - self::assertSame('/mnt/files', $q['dirname'], 'UNIX dirname not matched'); - self::assertSame('飛兒樂 團光茫.mp3', $q['basename'], 'UNIX basename not matched'); - self::assertSame('mp3', $q['extension'], 'UNIX extension not matched'); - self::assertSame('飛兒樂 團光茫', $q['filename'], 'UNIX filename not matched'); - self::assertSame( - '/mnt/files', - PHPMailer::mb_pathinfo($a, PATHINFO_DIRNAME), - 'Dirname path element not matched' - ); - self::assertSame( - '飛兒樂 團光茫.mp3', - PHPMailer::mb_pathinfo($a, PATHINFO_BASENAME), - 'Basename path element not matched' - ); - self::assertSame('飛兒樂 團光茫', PHPMailer::mb_pathinfo($a, 'filename'), 'Filename path element not matched'); - $a = 'c:\mnt\files\飛兒樂 團光茫.mp3'; - $q = PHPMailer::mb_pathinfo($a); - self::assertSame('c:\mnt\files', $q['dirname'], 'Windows dirname not matched'); - self::assertSame('飛兒樂 團光茫.mp3', $q['basename'], 'Windows basename not matched'); - self::assertSame('mp3', $q['extension'], 'Windows extension not matched'); - self::assertSame('飛兒樂 團光茫', $q['filename'], 'Windows filename not matched'); } public function testBadSMTP() From 3a03d5139968b642369f0c05c37c6d89cab6b4ce Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 25 Jun 2021 17:23:07 +0200 Subject: [PATCH 2/5] MbPathinfoTest: reorganize to use data providers * Replace the existing test code with two new test methods using data providers. * Maintains the same test code and test cases. * Makes it easier to add additional test cases in the future. --- test/PHPMailer/MbPathinfoTest.php | 101 ++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 25 deletions(-) diff --git a/test/PHPMailer/MbPathinfoTest.php b/test/PHPMailer/MbPathinfoTest.php index 71932425..3cbc290b 100644 --- a/test/PHPMailer/MbPathinfoTest.php +++ b/test/PHPMailer/MbPathinfoTest.php @@ -23,32 +23,83 @@ final class MbPathinfoTest extends TestCase { /** - * Miscellaneous calls to improve test coverage and some small tests. + * Verify retrieving information about a file path when the $options parameter has been passed. + * + * @dataProvider dataMb_pathinfoWithoutOptions + * + * @param string $path Path input. + * @param string $expected Expected function output. */ - public function testMiscellaneous() + public function testMb_pathinfoWithoutOptions($path, $expected) { - $a = '/mnt/files/飛兒樂 團光茫.mp3'; - $q = PHPMailer::mb_pathinfo($a); - self::assertSame('/mnt/files', $q['dirname'], 'UNIX dirname not matched'); - self::assertSame('飛兒樂 團光茫.mp3', $q['basename'], 'UNIX basename not matched'); - self::assertSame('mp3', $q['extension'], 'UNIX extension not matched'); - self::assertSame('飛兒樂 團光茫', $q['filename'], 'UNIX filename not matched'); - self::assertSame( - '/mnt/files', - PHPMailer::mb_pathinfo($a, PATHINFO_DIRNAME), - 'Dirname path element not matched' - ); - self::assertSame( - '飛兒樂 團光茫.mp3', - PHPMailer::mb_pathinfo($a, PATHINFO_BASENAME), - 'Basename path element not matched' - ); - self::assertSame('飛兒樂 團光茫', PHPMailer::mb_pathinfo($a, 'filename'), 'Filename path element not matched'); - $a = 'c:\mnt\files\飛兒樂 團光茫.mp3'; - $q = PHPMailer::mb_pathinfo($a); - self::assertSame('c:\mnt\files', $q['dirname'], 'Windows dirname not matched'); - self::assertSame('飛兒樂 團光茫.mp3', $q['basename'], 'Windows basename not matched'); - self::assertSame('mp3', $q['extension'], 'Windows extension not matched'); - self::assertSame('飛兒樂 團光茫', $q['filename'], 'Windows filename not matched'); + $result = PHPMailer::mb_pathinfo($path); + self::assertSame($expected, $result); + } + + /** + * Data provider. + * + * @return array + */ + public function dataMb_pathinfoWithoutOptions() + { + return [ + 'Unix path with multibyte filename' => [ + 'path' => '/mnt/files/飛兒樂 團光茫.mp3', + 'expected' => [ + 'dirname' => '/mnt/files', + 'basename' => '飛兒樂 團光茫.mp3', + 'extension' => 'mp3', + 'filename' => '飛兒樂 團光茫', + ], + ], + 'Windows path with multibyte filename' => [ + 'path' => 'c:\mnt\files\飛兒樂 團光茫.mp3', + 'expected' => [ + 'dirname' => 'c:\mnt\files', + 'basename' => '飛兒樂 團光茫.mp3', + 'extension' => 'mp3', + 'filename' => '飛兒樂 團光茫', + ], + ], + ]; + } + + /** + * Verify retrieving information about a file path when the $options parameter has been passed. + * + * @dataProvider dataMb_pathinfoWithOptions + * + * @param int|string $options Input to pass to the $options parameter. + * @param string $expected Expected function output. + */ + public function testMb_pathinfoWithOptions($options, $expected) + { + $path = '/mnt/files/飛兒樂 團光茫.mp3'; + $result = PHPMailer::mb_pathinfo($path, $options); + self::assertSame($expected, $result); + } + + /** + * Data provider. + * + * @return array + */ + public function dataMb_pathinfoWithOptions() + { + return [ + 'Option: PATHINFO_DIRNAME' => [ + 'options' => PATHINFO_DIRNAME, + 'expected' => '/mnt/files', + ], + 'Option: PATHINFO_BASENAME' => [ + 'options' => PATHINFO_BASENAME, + 'expected' => '飛兒樂 團光茫.mp3', + ], + 'Option: filename' => [ + 'options' => 'filename', + 'expected' => '飛兒樂 團光茫', + ], + ]; } } From 487551ddac8c447bc9450e1fdc73633c5ff14535 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 25 Jun 2021 17:32:47 +0200 Subject: [PATCH 3/5] MbPathinfoTest: add additional test cases for `testMb_pathinfoWithoutOptions()` Including test cases with: * Spaces in the paths. * Incomplete file paths. Note: the "empty string" test may need looking at.... should this return an empty array instead ? --- test/PHPMailer/MbPathinfoTest.php | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/test/PHPMailer/MbPathinfoTest.php b/test/PHPMailer/MbPathinfoTest.php index 3cbc290b..43f9ce09 100644 --- a/test/PHPMailer/MbPathinfoTest.php +++ b/test/PHPMailer/MbPathinfoTest.php @@ -44,6 +44,33 @@ final class MbPathinfoTest extends TestCase public function dataMb_pathinfoWithoutOptions() { return [ + 'Empty string' => [ + 'path' => '', + 'expected' => [ + 'dirname' => '', + 'basename' => '', + 'extension' => '', + 'filename' => '', + ], + ], + 'Unix path with singlebyte filename' => [ + 'path' => '/mnt/music/music.mp3', + 'expected' => [ + 'dirname' => '/mnt/music', + 'basename' => 'music.mp3', + 'extension' => 'mp3', + 'filename' => 'music', + ], + ], + 'Windows path with singlebyte filename' => [ + 'path' => 'c:\mnt\music\music.mp3', + 'expected' => [ + 'dirname' => 'c:\mnt\music', + 'basename' => 'music.mp3', + 'extension' => 'mp3', + 'filename' => 'music', + ], + ], 'Unix path with multibyte filename' => [ 'path' => '/mnt/files/飛兒樂 團光茫.mp3', 'expected' => [ @@ -62,6 +89,24 @@ final class MbPathinfoTest extends TestCase 'filename' => '飛兒樂 團光茫', ], ], + 'Filename, not path, contains spaces' => [ + 'path' => 'my file.png', + 'expected' => [ + 'dirname' => '', + 'basename' => 'my file.png', + 'extension' => 'png', + 'filename' => 'my file', + ], + ], + 'Path, no file name, linux style, contains spaces' => [ + 'path' => '/mnt/sub directory/another sub/', + 'expected' => [ + 'dirname' => '/mnt/sub directory', + 'basename' => 'another sub', + 'extension' => '', + 'filename' => 'another sub', + ], + ], ]; } From 78cb650429debfdf0f07a668203ea21cf00a9ef4 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 25 Jun 2021 17:33:26 +0200 Subject: [PATCH 4/5] MbPathinfoTest: add additional test cases for `testMb_pathinfoWithOptions()` ... to ensure all supported options are covered by a test. --- test/PHPMailer/MbPathinfoTest.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/PHPMailer/MbPathinfoTest.php b/test/PHPMailer/MbPathinfoTest.php index 43f9ce09..153a443a 100644 --- a/test/PHPMailer/MbPathinfoTest.php +++ b/test/PHPMailer/MbPathinfoTest.php @@ -141,6 +141,26 @@ final class MbPathinfoTest extends TestCase 'options' => PATHINFO_BASENAME, 'expected' => '飛兒樂 團光茫.mp3', ], + 'Option: PATHINFO_EXTENSION' => [ + 'options' => PATHINFO_EXTENSION, + 'expected' => 'mp3', + ], + 'Option: PATHINFO_FILENAME' => [ + 'options' => PATHINFO_FILENAME, + 'expected' => '飛兒樂 團光茫', + ], + 'Option: dirname' => [ + 'options' => 'dirname', + 'expected' => '/mnt/files', + ], + 'Option: basename' => [ + 'options' => 'basename', + 'expected' => '飛兒樂 團光茫.mp3', + ], + 'Option: extension' => [ + 'options' => 'extension', + 'expected' => 'mp3', + ], 'Option: filename' => [ 'options' => 'filename', 'expected' => '飛兒樂 團光茫', From 8771d5f14697741c1583f2cc7c5eeae69b08352b Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 25 Jun 2021 17:33:37 +0200 Subject: [PATCH 5/5] MbPathinfoTest: add `@covers` tag --- test/PHPMailer/MbPathinfoTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/PHPMailer/MbPathinfoTest.php b/test/PHPMailer/MbPathinfoTest.php index 153a443a..d996c053 100644 --- a/test/PHPMailer/MbPathinfoTest.php +++ b/test/PHPMailer/MbPathinfoTest.php @@ -18,6 +18,8 @@ use Yoast\PHPUnitPolyfills\TestCases\TestCase; /** * Test Multi-byte-safe pathinfo replacement functionality. + * + * @covers \PHPMailer\PHPMailer\PHPMailer::mb_pathinfo */ final class MbPathinfoTest extends TestCase {