diff --git a/test/PHPMailer/MbPathinfoTest.php b/test/PHPMailer/MbPathinfoTest.php new file mode 100644 index 00000000..d996c053 --- /dev/null +++ b/test/PHPMailer/MbPathinfoTest.php @@ -0,0 +1,172 @@ + + * @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. + * + * @covers \PHPMailer\PHPMailer\PHPMailer::mb_pathinfo + */ +final class MbPathinfoTest extends TestCase +{ + + /** + * 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 testMb_pathinfoWithoutOptions($path, $expected) + { + $result = PHPMailer::mb_pathinfo($path); + self::assertSame($expected, $result); + } + + /** + * Data provider. + * + * @return array + */ + 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' => [ + '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' => '飛兒樂 團光茫', + ], + ], + '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', + ], + ], + ]; + } + + /** + * 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: 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' => '飛兒樂 團光茫', + ], + ]; + } +} 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()