diff --git a/tests/TestConf.php b/tests/TestConf.php index 4e839a53..da2dbfa1 100644 --- a/tests/TestConf.php +++ b/tests/TestConf.php @@ -89,7 +89,7 @@ class TestConf extends \PHPUnit\Framework\TestCase { /** * @depends testImportFile */ - function testImportFileNotPHP() { + function testImportFileNotPhp() { $this->assertException("fileCorrupt", "Conf"); // this should not print the output of the non-PHP file $conf = new Conf(self::$path."confNotPHP"); diff --git a/tests/TestLangErrors.php b/tests/TestLangErrors.php new file mode 100644 index 00000000..99971f34 --- /dev/null +++ b/tests/TestLangErrors.php @@ -0,0 +1,50 @@ +assertException("fileCorrupt", "Lang"); + Lang::set("fr_ca", true); + } + + function testLoadFileNotAnArray() { + $this->assertException("fileCorrupt", "Lang"); + Lang::set("it", true); + } + + function testLoadFileNotPhp() { + $this->assertException("fileCorrupt", "Lang"); + Lang::set("ko", true); + } + + function testLoadFileCorrupt() { + $this->assertException("fileCorrupt", "Lang"); + Lang::set("zh", true); + } + + function testLoadFileUnreadable() { + $this->assertException("fileUnreadable", "Lang"); + Lang::set("ru", true); + } + + function testLoadDefaultMissing() { + // this should be the last test of the series + unlink(self::$path.Lang::DEFAULT.".php"); + $this->assertException("defaultFileMissing", "Lang"); + Lang::set("fr", true); + } +} \ No newline at end of file diff --git a/tests/bootstrap.php b/tests/bootstrap.php index c4c2368c..3df862ea 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -31,6 +31,7 @@ trait LanguageTestingHelpers { 'fr.php' => ' "à l\'école des sorciers"];', 'ja.php' => ' "賢者の石"];', 'de.php' => ' "und der Stein der Weisen"];', + 'vi.php' => ' ' ' '', ]; self::$vfs = vfsStream::setup("langtest", 0777, self::$files); - self::$path = self::$vfs->url(); + self::$path = self::$vfs->url()."/"; // set up a file without read access - chmod(self::$path."/ru.php", 0000); + chmod(self::$path."ru.php", 0000); // make the Lang class use the vfs files self::$defaultPath = Lang::$path; - Lang::$path = self::$path."/"; + Lang::$path = self::$path; } static function tearDownAfterClass() { diff --git a/tests/phpunit.xml b/tests/phpunit.xml index 8b1dbd80..32782856 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -7,12 +7,14 @@ convertWarningsToExceptions="true" beStrictAboutTestsThatDoNotTestAnything="true" beStrictAboutOutputDuringTests="true" - beStrictAboutTestSize="true"> + beStrictAboutTestSize="true" + stopOnError="true"> TestLang.php TestLangComplex.php TestException.php + TestLangErrors.php diff --git a/tests/testLangComplex.php b/tests/testLangComplex.php index d02ecdbb..8340d4de 100644 --- a/tests/testLangComplex.php +++ b/tests/testLangComplex.php @@ -47,7 +47,7 @@ class TestLangComplex extends \PHPUnit\Framework\TestCase { /** * @depends testMessage */ - function testMessageNumMSingle() { + function testMessageNumSingle() { Lang::set("en_ca", true); $this->assertEquals('Default language file "en" missing', Lang::msg('Exception.JKingWeb/NewsSync/Lang/Exception.defaultFileMissing', Lang::DEFAULT)); } @@ -66,4 +66,24 @@ class TestLangComplex extends \PHPUnit\Framework\TestCase { function testMessageNamed() { $this->assertEquals('Message string "Test.absentText" missing from all loaded language files (en)', Lang::msg('Exception.JKingWeb/NewsSync/Lang/Exception.stringMissing', ['msgID' => 'Test.absentText', 'fileList' => 'en'])); } + + /** + * @depends testMessage + */ + function testReloadDefaults() { + Lang::set("de", true); + Lang::set("en", true); + $this->assertEquals('and the Philosopher\'s Stone', Lang::msg('Test.presentText')); + } + + /** + * @depends testMessage + */ + function testReloadGeneralTagAfterSubtag() { + Lang::set("en", true); + Lang::set("en_us", true); + $this->assertEquals('and the Sorcerer\'s Stone', Lang::msg('Test.presentText')); + Lang::set("en", true); + $this->assertEquals('and the Philosopher\'s Stone', Lang::msg('Test.presentText')); + } } \ No newline at end of file diff --git a/vendor/JKingWeb/NewsSync/Lang.php b/vendor/JKingWeb/NewsSync/Lang.php index 9ae9e681..d5578660 100644 --- a/vendor/JKingWeb/NewsSync/Lang.php +++ b/vendor/JKingWeb/NewsSync/Lang.php @@ -94,6 +94,7 @@ class Lang { static protected function listFiles(): array { $out = glob(self::$path."*.php"); + // built-in glob doesn't work with vfsStream (and this other glob doesn't seem to work with Windows paths), so we try both if(empty($out)) $out = Glob::glob(self::$path."*.php"); $out = array_map(function($file) { $file = str_replace(DIRECTORY_SEPARATOR, "/", $file);