LocaleTest.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace Test\Depo\RequestKit;
  3. use Depo\RequestKit\Locale;
  4. use Depo\UniTester\TestCase;
  5. class LocaleTest extends TestCase
  6. {
  7. protected function setUp(): void
  8. {
  9. // Reset locale to default before each test group
  10. Locale::setLocale('en');
  11. }
  12. protected function tearDown(): void
  13. {
  14. // Clean up after tests
  15. Locale::setLocale('en');
  16. }
  17. protected function execute(): void
  18. {
  19. $this->testGetDefaultEnglishMessage();
  20. $this->testSetLocaleToFrench();
  21. $this->testMessageWithParameters();
  22. $this->testFallbackToEnglish();
  23. $this->testAddNewLanguage();
  24. }
  25. private function testGetDefaultEnglishMessage()
  26. {
  27. $message = Locale::get('error.required');
  28. $this->assertStrictEquals('Value is required, but got null or empty string.', $message);
  29. }
  30. private function testSetLocaleToFrench()
  31. {
  32. Locale::setLocale('fr');
  33. $message = Locale::get('error.required');
  34. $this->assertStrictEquals('La valeur est requise.', $message);
  35. }
  36. private function testMessageWithParameters()
  37. {
  38. // English
  39. Locale::setLocale('en');
  40. $messageEn = Locale::get('error.string.min_length', ['min' => 5]);
  41. $this->assertStrictEquals('Value must be at least 5 characters long.', $messageEn);
  42. // French
  43. Locale::setLocale('fr');
  44. $messageFr = Locale::get('error.string.min_length', ['min' => 10]);
  45. $this->assertStrictEquals('La valeur doit contenir au moins 10 caractères.', $messageFr);
  46. }
  47. private function testFallbackToEnglish()
  48. {
  49. // Add a message only in English
  50. Locale::addMessages('en', ['error.test' => 'This is a test.']);
  51. // Set locale to French
  52. Locale::setLocale('fr');
  53. // The key 'error.test' does not exist in French, so it should fall back to English.
  54. $message = Locale::get('error.test');
  55. $this->assertStrictEquals('This is a test.', $message);
  56. }
  57. private function testAddNewLanguage()
  58. {
  59. $spanishMessages = [
  60. 'error' => [
  61. 'required' => 'El valor es requerido.'
  62. ]
  63. ];
  64. Locale::addMessages('es', $spanishMessages);
  65. Locale::setLocale('es');
  66. $message = Locale::get('error.required');
  67. $this->assertStrictEquals('El valor es requerido.', $message);
  68. // Check that it falls back to English for non-translated messages
  69. $messageEquals = Locale::get('error.equals');
  70. $this->assertStrictEquals('The value does not match the expected value.', $messageEquals);
  71. }
  72. }