3
3
namespace Test \DevCoder ;
4
4
5
5
use DevCoder \DotEnv ;
6
+ use DevCoder \Option ;
7
+ use DevCoder \Processor \BooleanProcessor ;
8
+ use DevCoder \Processor \QuotedProcessor ;
9
+ use PHPUnit \Framework \Assert ;
6
10
use PHPUnit \Framework \TestCase ;
7
11
8
12
class DotenvTest extends TestCase
@@ -23,46 +27,98 @@ public function testLoad() {
23
27
$ this ->assertEquals ('password ' , getenv ('DATABASE_PASSWORD ' ));
24
28
$ this ->assertFalse (getenv ('GOOGLE_API ' ));
25
29
$ this ->assertFalse (getenv ('GOOGLE_MANAGER_KEY ' ));
30
+ $ this ->assertEquals (true , getenv ('BOOLEAN_LITERAL ' ));
31
+ $ this ->assertEquals ('true ' , getenv ('BOOLEAN_QUOTED ' ));
26
32
27
33
$ this ->assertEquals ('dev ' , $ _ENV ['APP_ENV ' ]);
28
34
$ this ->assertEquals ('mysql:host=localhost;dbname=test; ' , $ _ENV ['DATABASE_DNS ' ]);
29
35
$ this ->assertEquals ('root ' , $ _ENV ['DATABASE_USER ' ]);
30
36
$ this ->assertEquals ('password ' , $ _ENV ['DATABASE_PASSWORD ' ]);
31
37
$ this ->assertFalse (array_key_exists ('GOOGLE_API ' , $ _ENV ));
32
38
$ this ->assertFalse (array_key_exists ('GOOGLE_MANAGER_KEY ' , $ _ENV ));
39
+ $ this ->assertEquals (true , $ _ENV ['BOOLEAN_LITERAL ' ]);
40
+ $ this ->assertEquals ('true ' , $ _ENV ['BOOLEAN_QUOTED ' ]);
33
41
34
42
$ this ->assertEquals ('dev ' , $ _SERVER ['APP_ENV ' ]);
35
43
$ this ->assertEquals ('mysql:host=localhost;dbname=test; ' , $ _SERVER ['DATABASE_DNS ' ]);
36
44
$ this ->assertEquals ('root ' , $ _SERVER ['DATABASE_USER ' ]);
37
45
$ this ->assertEquals ('password ' , $ _SERVER ['DATABASE_PASSWORD ' ]);
38
46
$ this ->assertFalse (array_key_exists ('GOOGLE_API ' , $ _SERVER ));
39
47
$ this ->assertFalse (array_key_exists ('GOOGLE_MANAGER_KEY ' , $ _SERVER ));
48
+ $ this ->assertEquals (true , $ _SERVER ['BOOLEAN_LITERAL ' ]);
49
+ $ this ->assertEquals ('true ' , $ _SERVER ['BOOLEAN_QUOTED ' ]);
40
50
}
41
51
42
52
public function testFileNotExist () {
43
53
$ this ->expectException (\InvalidArgumentException::class);
44
54
(new DotEnv ($ this ->env ('.env.not-exists ' )))->load ();
45
55
}
46
56
57
+ public function testUncompatibleProcessors () {
58
+ $ this ->assertProcessors (
59
+ [],
60
+ []
61
+ );
62
+
63
+ $ this ->assertProcessors (
64
+ null ,
65
+ [BooleanProcessor::class, QuotedProcessor::class]
66
+ );
67
+
68
+ $ this ->assertProcessors (
69
+ [null ],
70
+ []
71
+ );
72
+
73
+ $ this ->assertProcessors (
74
+ [new \stdClass ()],
75
+ []
76
+ );
77
+
78
+ $ this ->assertProcessors (
79
+ [QuotedProcessor::class, null ],
80
+ [QuotedProcessor::class]
81
+ );
82
+ }
83
+
84
+ private function assertProcessors (array $ processorsToUse = null , array $ expectedProcessors = [])
85
+ {
86
+ $ dotEnv = new DotEnv ($ this ->env ('.env.default ' ), $ processorsToUse );
87
+ $ dotEnv ->load ();
88
+
89
+ $ this ->assertEquals (
90
+ $ expectedProcessors ,
91
+ $ this ->getProtectedProperty ($ dotEnv , 'processors ' )
92
+ );
93
+ }
94
+
95
+ private function getProtectedProperty (object $ object , string $ property ) {
96
+ $ reflection = new \ReflectionClass ($ object );
97
+ $ reflectionProperty = $ reflection ->getProperty ($ property );
98
+ $ reflectionProperty ->setAccessible (true );
99
+
100
+ return $ reflectionProperty ->getValue ($ object );
101
+ }
102
+
47
103
/**
48
104
* @runInSeparateProcess
49
105
*/
50
106
public function testProcessBoolean ()
51
107
{
52
108
(new DotEnv ($ this ->env ('.env.boolean ' ), [
53
- DotEnv:: PROCESS_BOOLEANS => true
109
+ BooleanProcessor::class
54
110
]))->load ();
55
111
56
112
$ this ->assertEquals (false , $ _ENV ['FALSE1 ' ]);
57
113
$ this ->assertEquals (false , $ _ENV ['FALSE2 ' ]);
58
114
$ this ->assertEquals (false , $ _ENV ['FALSE3 ' ]);
59
- $ this ->assertEquals ("'false' " , $ _ENV ['FALSE4 ' ]);
115
+ $ this ->assertEquals ("'false' " , $ _ENV ['FALSE4 ' ]); // Since we don't have the QuotedProcessor::class this will be the result
60
116
$ this ->assertEquals ('0 ' , $ _ENV ['FALSE5 ' ]);
61
117
62
118
$ this ->assertEquals (true , $ _ENV ['TRUE1 ' ]);
63
119
$ this ->assertEquals (true , $ _ENV ['TRUE2 ' ]);
64
120
$ this ->assertEquals (true , $ _ENV ['TRUE3 ' ]);
65
- $ this ->assertEquals ("'true' " , $ _ENV ['TRUE4 ' ]);
121
+ $ this ->assertEquals ("'true' " , $ _ENV ['TRUE4 ' ]); // Since we don't have the QuotedProcessor::class this will be the result
66
122
$ this ->assertEquals ('1 ' , $ _ENV ['TRUE5 ' ]);
67
123
}
68
124
@@ -71,12 +127,44 @@ public function testProcessBoolean()
71
127
*/
72
128
public function testDontProcessBoolean ()
73
129
{
74
- (new DotEnv ($ this ->env ('.env.boolean ' ), [
75
- DotEnv::PROCESS_BOOLEANS => false
76
- ]))->load ();
130
+ (new DotEnv ($ this ->env ('.env.boolean ' ), []))->load ();
77
131
78
132
$ this ->assertEquals ('false ' , $ _ENV ['FALSE1 ' ]);
79
133
80
134
$ this ->assertEquals ('true ' , $ _ENV ['TRUE1 ' ]);
81
135
}
136
+
137
+ /**
138
+ * @runInSeparateProcess
139
+ */
140
+ public function testProcessQuotes ()
141
+ {
142
+ (new DotEnv ($ this ->env ('.env.quotes ' ), [
143
+ QuotedProcessor::class
144
+ ]))->load ();
145
+
146
+ $ this ->assertEquals ('q1 ' , $ _ENV ['QUOTED1 ' ]);
147
+ $ this ->assertEquals ('q2 ' , $ _ENV ['QUOTED2 ' ]);
148
+ $ this ->assertEquals ('"q3" ' , $ _ENV ['QUOTED3 ' ]);
149
+ $ this ->assertEquals ('This is a "sample" value ' , $ _ENV ['QUOTED4 ' ]);
150
+ $ this ->assertEquals ('\"This is a "sample" value\" ' , $ _ENV ['QUOTED5 ' ]);
151
+ $ this ->assertEquals ('"q6 ' , $ _ENV ['QUOTED6 ' ]);
152
+ $ this ->assertEquals ('q7" ' , $ _ENV ['QUOTED7 ' ]);
153
+ }
154
+
155
+ /**
156
+ * @runInSeparateProcess
157
+ */
158
+ public function testDontProcessQuotes ()
159
+ {
160
+ (new DotEnv ($ this ->env ('.env.quotes ' ), []))->load ();
161
+
162
+ $ this ->assertEquals ('"q1" ' , $ _ENV ['QUOTED1 ' ]);
163
+ $ this ->assertEquals ('\'q2 \'' , $ _ENV ['QUOTED2 ' ]);
164
+ $ this ->assertEquals ('""q3"" ' , $ _ENV ['QUOTED3 ' ]);
165
+ $ this ->assertEquals ('"This is a "sample" value" ' , $ _ENV ['QUOTED4 ' ]);
166
+ $ this ->assertEquals ('\"This is a "sample" value\" ' , $ _ENV ['QUOTED5 ' ]);
167
+ $ this ->assertEquals ('"q6 ' , $ _ENV ['QUOTED6 ' ]);
168
+ $ this ->assertEquals ('q7" ' , $ _ENV ['QUOTED7 ' ]);
169
+ }
82
170
}
0 commit comments