Skip to content

Commit 80963f8

Browse files
committed
Allow coercion to boolean from '0' and '1'
1 parent d39c56a commit 80963f8

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

src/JsonSchema/Constraints/TypeConstraint.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,11 @@ protected function validateType(&$value, $type, $coerce = false)
225225
*/
226226
protected function toBoolean($value)
227227
{
228-
if($value === "true"){
228+
if ($value === 'true' || $value === '1') {
229229
return true;
230230
}
231231

232-
if($value === "false"){
232+
if ($value === 'false' || $value === '0') {
233233
return false;
234234
}
235235

tests/Constraints/CoerciveTest.php

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,29 +50,33 @@ public function testValidCoerceCases($input, $schema, $errors = array())
5050

5151
$this->assertTrue(gettype($value->number) == "string");
5252
$this->assertTrue(gettype($value->integer) == "string");
53-
$this->assertTrue(gettype($value->boolean) == "string");
53+
$this->assertTrue(gettype($value->boolean1) == "string");
54+
$this->assertTrue(gettype($value->boolean2) == "string");
55+
$this->assertTrue(gettype($value->boolean3) == "string");
56+
$this->assertTrue(gettype($value->boolean4) == "string");
5457

5558
$validator->coerce($value, $schema);
5659

5760
$this->assertTrue(gettype($value->number) == "double");
5861
$this->assertTrue(gettype($value->integer) == "integer");
5962
$this->assertTrue(gettype($value->negativeInteger) == "integer");
60-
$this->assertTrue(gettype($value->boolean) == "boolean");
63+
$this->assertTrue(gettype($value->boolean1) == "boolean");
64+
$this->assertTrue(gettype($value->boolean2) == "boolean");
65+
$this->assertTrue(gettype($value->boolean3) == "boolean");
66+
$this->assertTrue(gettype($value->boolean4) == "boolean");
6167

6268
$this->assertTrue($value->number === 1.5);
6369
$this->assertTrue($value->integer === 1);
6470
$this->assertTrue($value->negativeInteger === -2);
65-
$this->assertTrue($value->boolean === true);
71+
$this->assertTrue($value->boolean1 === true);
72+
$this->assertTrue($value->boolean2 === false);
73+
$this->assertTrue($value->boolean3 === true);
74+
$this->assertTrue($value->boolean4 === false);
6675

6776
$this->assertTrue(gettype($value->multitype1) == "boolean");
6877
$this->assertTrue(gettype($value->multitype2) == "double");
6978
$this->assertTrue(gettype($value->multitype3) == "integer");
7079

71-
$this->assertTrue($value->number === 1.5);
72-
$this->assertTrue($value->integer === 1);
73-
$this->assertTrue($value->negativeInteger === -2);
74-
$this->assertTrue($value->boolean === true);
75-
7680
$this->assertTrue($validator->isValid(), print_r($validator->getErrors(), true));
7781
}
7882

@@ -125,7 +129,10 @@ public function getValidCoerceTests()
125129
"number":"1.5",
126130
"integer":"1",
127131
"negativeInteger":"-2",
128-
"boolean":"true",
132+
"boolean1":"true",
133+
"boolean2":"false",
134+
"boolean3":"1",
135+
"boolean4":"0",
129136
"object":{},
130137
"array":[],
131138
"null":null,
@@ -150,7 +157,10 @@ public function getValidCoerceTests()
150157
"number":{"type":"number"},
151158
"integer":{"type":"integer"},
152159
"negativeInteger":{"type":"integer"},
153-
"boolean":{"type":"boolean"},
160+
"boolean1":{"type":"boolean"},
161+
"boolean2":{"type":"boolean"},
162+
"boolean3":{"type":"boolean"},
163+
"boolean4":{"type":"boolean"},
154164
"object":{"type":"object"},
155165
"array":{"type":"array"},
156166
"null":{"type":"null"},
@@ -231,7 +241,7 @@ public function getInvalidCoerceTests()
231241
),
232242
array(
233243
'{
234-
"boolean":"0"
244+
"boolean":"3"
235245
}',
236246
'{
237247
"type":"object",

0 commit comments

Comments
 (0)