2021-06-26 11:23:15 -04:00
< ? php
namespace Tests ;
2017-03-05 10:10:06 -05:00
class LanguageTest extends TestCase
{
2023-01-16 11:54:53 -05:00
protected array $langs ;
2017-03-05 10:34:54 -05:00
/**
* LanguageTest constructor .
*/
2021-10-30 16:29:59 -04:00
protected function setUp () : void
2017-03-05 10:34:54 -05:00
{
parent :: setUp ();
2020-04-05 08:07:19 -04:00
$this -> langs = array_diff ( scandir ( resource_path ( 'lang' )), [ '..' , '.' ]);
2017-03-05 10:34:54 -05:00
}
2017-04-29 11:47:41 -04:00
public function test_locales_config_key_set_properly ()
{
$configLocales = config ( 'app.locales' );
sort ( $configLocales );
sort ( $this -> langs );
2020-03-04 17:14:25 -05:00
$this -> assertEquals ( implode ( ':' , $configLocales ), implode ( ':' , $this -> langs ), 'app.locales configuration variable does not match those found in lang files' );
2017-04-29 11:47:41 -04:00
}
2020-04-05 08:07:19 -04:00
// Not part of standard phpunit test runs since we sometimes expect non-added langs.
public function do_test_locales_all_have_language_dropdown_entry ()
{
$dropdownLocales = array_keys ( trans ( 'settings.language_select' , [], 'en' ));
sort ( $dropdownLocales );
sort ( $this -> langs );
$diffs = array_diff ( $this -> langs , $dropdownLocales );
if ( count ( $diffs ) > 0 ) {
$diffText = implode ( ',' , $diffs );
$this -> addWarning ( " Languages: { $diffText } found in files but not in language select dropdown. " );
}
$this -> assertTrue ( true );
}
2017-04-29 11:47:41 -04:00
public function test_correct_language_if_not_logged_in ()
{
$loginReq = $this -> get ( '/login' );
$loginReq -> assertSee ( 'Log In' );
$loginPageFrenchReq = $this -> get ( '/login' , [ 'Accept-Language' => 'fr' ]);
$loginPageFrenchReq -> assertSee ( 'Se Connecter' );
}
2018-08-12 08:34:14 -04:00
public function test_public_lang_autodetect_can_be_disabled ()
{
config () -> set ( 'app.auto_detect_locale' , false );
$loginReq = $this -> get ( '/login' );
$loginReq -> assertSee ( 'Log In' );
$loginPageFrenchReq = $this -> get ( '/login' , [ 'Accept-Language' => 'fr' ]);
$loginPageFrenchReq -> assertDontSee ( 'Se Connecter' );
}
2017-03-05 10:34:54 -05:00
public function test_all_lang_files_loadable ()
{
$files = array_diff ( scandir ( resource_path ( 'lang/en' )), [ '..' , '.' ]);
foreach ( $this -> langs as $lang ) {
foreach ( $files as $file ) {
$loadError = false ;
2021-06-26 11:23:15 -04:00
2017-03-05 10:34:54 -05:00
try {
$translations = trans ( str_replace ( '.php' , '' , $file ), [], $lang );
} catch ( \Exception $e ) {
$loadError = true ;
}
$this -> assertFalse ( $loadError , " Translation file { $lang } / { $file } failed to load " );
}
}
}
2018-09-22 08:18:26 -04:00
public function test_rtl_config_set_if_lang_is_rtl ()
{
$this -> asEditor ();
2021-06-26 11:23:15 -04:00
$this -> assertFalse ( config ( 'app.rtl' ), 'App RTL config should be false by default' );
2018-09-22 08:18:26 -04:00
setting () -> putUser ( $this -> getEditor (), 'language' , 'ar' );
$this -> get ( '/' );
2021-06-26 11:23:15 -04:00
$this -> assertTrue ( config ( 'app.rtl' ), 'App RTL config should have been set to true by middleware' );
2018-09-22 08:18:26 -04:00
}
2023-01-16 11:54:53 -05:00
public function test_pluralisation_for_non_standard_locales ()
{
$text = trans_choice ( 'entities.x_pages' , 1 , [], 'de_informal' );
$this -> assertEquals ( '1 Seite' , $text );
$text = trans_choice ( 'entities.x_pages' , 2 , [], 'de_informal' );
$this -> assertEquals ( '2 Seiten' , $text );
$text = trans_choice ( 'entities.x_pages' , 0 , [], 'de_informal' );
$this -> assertEquals ( '0 Seiten' , $text );
}
2021-06-26 11:23:15 -04:00
}