TranslationFileLoaderTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace Illuminate\Tests\Translation;
  3. use Illuminate\Filesystem\Filesystem;
  4. use Illuminate\Translation\FileLoader;
  5. use Mockery as m;
  6. use PHPUnit\Framework\TestCase;
  7. class TranslationFileLoaderTest extends TestCase
  8. {
  9. protected function tearDown(): void
  10. {
  11. m::close();
  12. }
  13. public function testLoadMethodWithoutNamespacesProperlyCallsLoader()
  14. {
  15. $loader = new FileLoader($files = m::mock(Filesystem::class), __DIR__);
  16. $files->shouldReceive('exists')->once()->with(__DIR__.'/en/foo.php')->andReturn(true);
  17. $files->shouldReceive('getRequire')->once()->with(__DIR__.'/en/foo.php')->andReturn(['messages']);
  18. $this->assertEquals(['messages'], $loader->load('en', 'foo', null));
  19. }
  20. public function testLoadMethodWithNamespacesProperlyCallsLoader()
  21. {
  22. $loader = new FileLoader($files = m::mock(Filesystem::class), __DIR__);
  23. $files->shouldReceive('exists')->once()->with('bar/en/foo.php')->andReturn(true);
  24. $files->shouldReceive('exists')->once()->with(__DIR__.'/vendor/namespace/en/foo.php')->andReturn(false);
  25. $files->shouldReceive('getRequire')->once()->with('bar/en/foo.php')->andReturn(['foo' => 'bar']);
  26. $loader->addNamespace('namespace', 'bar');
  27. $this->assertEquals(['foo' => 'bar'], $loader->load('en', 'foo', 'namespace'));
  28. }
  29. public function testLoadMethodWithNamespacesProperlyCallsLoaderAndLoadsLocalOverrides()
  30. {
  31. $loader = new FileLoader($files = m::mock(Filesystem::class), __DIR__);
  32. $files->shouldReceive('exists')->once()->with('bar/en/foo.php')->andReturn(true);
  33. $files->shouldReceive('exists')->once()->with(__DIR__.'/vendor/namespace/en/foo.php')->andReturn(true);
  34. $files->shouldReceive('getRequire')->once()->with('bar/en/foo.php')->andReturn(['foo' => 'bar']);
  35. $files->shouldReceive('getRequire')->once()->with(__DIR__.'/vendor/namespace/en/foo.php')->andReturn(['foo' => 'override', 'baz' => 'boom']);
  36. $loader->addNamespace('namespace', 'bar');
  37. $this->assertEquals(['foo' => 'override', 'baz' => 'boom'], $loader->load('en', 'foo', 'namespace'));
  38. }
  39. public function testEmptyArraysReturnedWhenFilesDontExist()
  40. {
  41. $loader = new FileLoader($files = m::mock(Filesystem::class), __DIR__);
  42. $files->shouldReceive('exists')->once()->with(__DIR__.'/en/foo.php')->andReturn(false);
  43. $files->shouldReceive('getRequire')->never();
  44. $this->assertEquals([], $loader->load('en', 'foo', null));
  45. }
  46. public function testEmptyArraysReturnedWhenFilesDontExistForNamespacedItems()
  47. {
  48. $loader = new FileLoader($files = m::mock(Filesystem::class), __DIR__);
  49. $files->shouldReceive('getRequire')->never();
  50. $this->assertEquals([], $loader->load('en', 'foo', 'bar'));
  51. }
  52. public function testLoadMethodForJSONProperlyCallsLoader()
  53. {
  54. $loader = new FileLoader($files = m::mock(Filesystem::class), __DIR__);
  55. $files->shouldReceive('exists')->once()->with(__DIR__.'/en.json')->andReturn(true);
  56. $files->shouldReceive('get')->once()->with(__DIR__.'/en.json')->andReturn('{"foo":"bar"}');
  57. $this->assertEquals(['foo' => 'bar'], $loader->load('en', '*', '*'));
  58. }
  59. public function testLoadMethodForJSONProperlyCallsLoaderForMultiplePaths()
  60. {
  61. $loader = new FileLoader($files = m::mock(Filesystem::class), __DIR__);
  62. $loader->addJsonPath(__DIR__.'/another');
  63. $files->shouldReceive('exists')->once()->with(__DIR__.'/en.json')->andReturn(true);
  64. $files->shouldReceive('exists')->once()->with(__DIR__.'/another/en.json')->andReturn(true);
  65. $files->shouldReceive('get')->once()->with(__DIR__.'/en.json')->andReturn('{"foo":"bar"}');
  66. $files->shouldReceive('get')->once()->with(__DIR__.'/another/en.json')->andReturn('{"foo":"backagebar", "baz": "backagesplash"}');
  67. $this->assertEquals(['foo' => 'bar', 'baz' => 'backagesplash'], $loader->load('en', '*', '*'));
  68. }
  69. }