LoaderTest.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. declare(strict_types=1);
  3. namespace Dotenv\Tests\Loader;
  4. use Dotenv\Exception\InvalidFileException;
  5. use Dotenv\Loader\Loader;
  6. use Dotenv\Loader\LoaderInterface;
  7. use Dotenv\Parser\Parser;
  8. use Dotenv\Repository\Adapter\ArrayAdapter;
  9. use Dotenv\Repository\Adapter\EnvConstAdapter;
  10. use Dotenv\Repository\Adapter\ServerConstAdapter;
  11. use Dotenv\Repository\RepositoryBuilder;
  12. use PHPUnit\Framework\TestCase;
  13. final class LoaderTest extends TestCase
  14. {
  15. public function testParserInstanceOf()
  16. {
  17. self::assertInstanceOf(LoaderInterface::class, new Loader());
  18. }
  19. public function testLoaderWithNoReaders()
  20. {
  21. $repository = RepositoryBuilder::createWithNoAdapters()->addWriter(ArrayAdapter::class)->make();
  22. $loader = new Loader();
  23. $content = "NVAR1=\"Hello\"\nNVAR2=\"World!\"\nNVAR3=\"{\$NVAR1} {\$NVAR2}\"\nNVAR4=\"\${NVAR1} \${NVAR2}\"";
  24. $expected = ['NVAR1' => 'Hello', 'NVAR2' => 'World!', 'NVAR3' => '{$NVAR1} {$NVAR2}', 'NVAR4' => '${NVAR1} ${NVAR2}'];
  25. self::assertSame($expected, $loader->load($repository, (new Parser())->parse($content)));
  26. }
  27. public function testLoaderWithAllowList()
  28. {
  29. $adapter = ArrayAdapter::create()->get();
  30. $repository = RepositoryBuilder::createWithNoAdapters()->addReader($adapter)->addWriter($adapter)->allowList(['FOO'])->make();
  31. $loader = new Loader();
  32. self::assertSame(['FOO' => 'Hello'], $loader->load($repository, (new Parser())->parse("FOO=\"Hello\"\nBAR=\"World!\"\n")));
  33. self::assertTrue($adapter->read('FOO')->isDefined());
  34. self::assertSame('Hello', $adapter->read('FOO')->get());
  35. self::assertFalse($adapter->read('BAR')->isDefined());
  36. }
  37. public function testLoaderWithGarbage()
  38. {
  39. $adapter = ArrayAdapter::create()->get();
  40. $repository = RepositoryBuilder::createWithNoAdapters()->make();
  41. $loader = new Loader();
  42. $this->expectException(InvalidFileException::class);
  43. $this->expectExceptionMessage('Failed to parse dotenv file. Encountered unexpected whitespace at ["""].');
  44. $loader->load($repository, (new Parser())->parse('FOO="""'));
  45. }
  46. /**
  47. * @return array<int,\Dotenv\Repository\Adapter\AdapterInterface|string>[]
  48. */
  49. public static function providesAdapters()
  50. {
  51. return [
  52. [ArrayAdapter::create()->get()],
  53. [EnvConstAdapter::class],
  54. [ServerConstAdapter::class],
  55. ];
  56. }
  57. /**
  58. * @dataProvider providesAdapters
  59. *
  60. * @param \Dotenv\Repository\Adapter\AdapterInterface|string $adapter
  61. */
  62. public function testLoaderWithSpecificAdapter($adapter)
  63. {
  64. $repository = RepositoryBuilder::createWithNoAdapters()->addReader($adapter)->addWriter($adapter)->make();
  65. $loader = new Loader();
  66. $content = "NVAR1=\"Hello\"\nNVAR2=\"World!\"\nNVAR3=\"{\$NVAR1} {\$NVAR2}\"\nNVAR4=\"\${NVAR1} \${NVAR2}\"";
  67. $expected = ['NVAR1' => 'Hello', 'NVAR2' => 'World!', 'NVAR3' => '{$NVAR1} {$NVAR2}', 'NVAR4' => 'Hello World!'];
  68. self::assertSame($expected, $loader->load($repository, (new Parser())->parse($content)));
  69. }
  70. }