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