Skip to content

Commit 2fc0b14

Browse files
author
Mark
authored
Merge pull request #1 from scratchers/booltest
add tests and fix empty string evaluated as false
2 parents b755acf + 01515d1 commit 2fc0b14

File tree

3 files changed

+141
-9
lines changed

3 files changed

+141
-9
lines changed

src/Validator.php

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,21 +76,25 @@ function ($value) {
7676
'is not an integer'
7777
);
7878
}
79-
79+
8080
/**
81-
* Asset that each specified variable is a boolean.
81+
* Assert that each specified variable is a boolean.
8282
*
8383
* @return \Dotenv\Validator
8484
*/
8585
public function isBoolean()
8686
{
87-
return $this->assertCallback(
88-
function($value) {
89-
return (filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) !== NULL);
90-
},
91-
'is not a boolean'
92-
);
93-
}
87+
return $this->assertCallback(
88+
function ($value) {
89+
if ($value === '') {
90+
return false;
91+
}
92+
93+
return (filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) !== NULL);
94+
},
95+
'is not a boolean'
96+
);
97+
}
9498

9599
/**
96100
* Assert that each variable is amongst the given choices.

tests/Dotenv/ValidatorBooleanTest.php

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
<?php
2+
3+
use Dotenv\Dotenv;
4+
5+
class ValidatorBooleanTest extends PHPUnit_Framework_TestCase
6+
{
7+
/**
8+
* @var string
9+
*/
10+
private $fixturesFolder;
11+
12+
public function setUp()
13+
{
14+
$this->fixturesFolder = dirname(__DIR__).'/fixtures/env';
15+
}
16+
17+
/**
18+
* List of valid boolean values in fixtures/env/booleans.env
19+
*
20+
* @return array
21+
*/
22+
public function validBooleanValuesDataProvider()
23+
{
24+
return [
25+
['VALID_EXPLICIT_LOWERCASE_TRUE'],
26+
['VALID_EXPLICIT_LOWERCASE_FALSE'],
27+
['VALID_EXPLICIT_UPPERCASE_TRUE'],
28+
['VALID_EXPLICIT_UPPERCASE_FALSE'],
29+
['VALID_EXPLICIT_MIXEDCASE_TRUE'],
30+
['VALID_EXPLICIT_MIXEDCASE_FALSE'],
31+
32+
['VALID_NUMBER_TRUE'],
33+
['VALID_NUMBER_FALSE'],
34+
35+
['VALID_ONOFF_LOWERCASE_TRUE'],
36+
['VALID_ONOFF_LOWERCASE_FALSE'],
37+
['VALID_ONOFF_UPPERCASE_TRUE'],
38+
['VALID_ONOFF_UPPERCASE_FALSE'],
39+
['VALID_ONOFF_MIXEDCASE_TRUE'],
40+
['VALID_ONOFF_MIXEDCASE_FALSE'],
41+
42+
['VALID_YESNO_LOWERCASE_TRUE'],
43+
['VALID_YESNO_LOWERCASE_FALSE'],
44+
['VALID_YESNO_UPPERCASE_TRUE'],
45+
['VALID_YESNO_UPPERCASE_FALSE'],
46+
['VALID_YESNO_MIXEDCASE_TRUE'],
47+
['VALID_YESNO_MIXEDCASE_FALSE'],
48+
];
49+
}
50+
51+
/**
52+
* @dataProvider validBooleanValuesDataProvider
53+
*/
54+
public function testCanValidateBooleans($boolean)
55+
{
56+
$dotenv = new Dotenv($this->fixturesFolder, 'booleans.env');
57+
$dotenv->load();
58+
59+
$dotenv->required($boolean)->isBoolean();
60+
61+
$this->assertTrue(true); // anything wrong - an exception will be thrown
62+
}
63+
64+
/**
65+
* List of non-boolean values in fixtures/env/booleans.env
66+
*
67+
* @return array
68+
*/
69+
public function invalidBooleanValuesDataProvider()
70+
{
71+
return [
72+
['INVALID_SOMETHING'],
73+
['INVALID_EMPTY'],
74+
['INVALID_EMPTY_STRING'],
75+
['INVALID_NULL'],
76+
['INVALID_NUMBER_POSITIVE'],
77+
['INVALID_NUMBER_NEGATIVE'],
78+
['INVALID_MINUS'],
79+
['INVALID_TILDA'],
80+
['INVALID_EXCLAMATION'],
81+
];
82+
}
83+
84+
/**
85+
* @dataProvider invalidBooleanValuesDataProvider
86+
* @expectedException Dotenv\Exception\ValidationException
87+
*/
88+
public function testCanInvalidateNonBooleans($boolean)
89+
{
90+
$dotenv = new Dotenv($this->fixturesFolder, 'booleans.env');
91+
$dotenv->load();
92+
93+
$dotenv->required($boolean)->isBoolean();
94+
}
95+
}

tests/fixtures/env/booleans.env

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
VALID_EXPLICIT_LOWERCASE_TRUE=true
2+
VALID_EXPLICIT_LOWERCASE_FALSE=false
3+
VALID_EXPLICIT_UPPERCASE_TRUE=TRUE
4+
VALID_EXPLICIT_UPPERCASE_FALSE=FALSE
5+
VALID_EXPLICIT_MIXEDCASE_TRUE=True
6+
VALID_EXPLICIT_MIXEDCASE_FALSE=False
7+
8+
VALID_NUMBER_TRUE=1
9+
VALID_NUMBER_FALSE=0
10+
11+
VALID_ONOFF_LOWERCASE_TRUE=on
12+
VALID_ONOFF_LOWERCASE_FALSE=off
13+
VALID_ONOFF_UPPERCASE_TRUE=ON
14+
VALID_ONOFF_UPPERCASE_FALSE=OFF
15+
VALID_ONOFF_MIXEDCASE_TRUE=On
16+
VALID_ONOFF_MIXEDCASE_FALSE=Off
17+
18+
VALID_YESNO_LOWERCASE_TRUE=yes
19+
VALID_YESNO_LOWERCASE_FALSE=no
20+
VALID_YESNO_UPPERCASE_TRUE=YES
21+
VALID_YESNO_UPPERCASE_FALSE=NO
22+
VALID_YESNO_MIXEDCASE_TRUE=Yes
23+
VALID_YESNO_MIXEDCASE_FALSE=No
24+
25+
INVALID_SOMETHING=something
26+
INVALID_EMPTY=
27+
INVALID_EMPTY_STRING=""
28+
INVALID_NULL=null
29+
INVALID_NUMBER_POSITIVE=2
30+
INVALID_NUMBER_NEGATIVE=-2
31+
INVALID_MINUS=-
32+
INVALID_TILDA=~
33+
INVALID_EXCLAMATION=!

0 commit comments

Comments
 (0)