mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2025-01-03 14:32:40 +00:00
Tests for strict binding
This commit is contained in:
parent
db132c0c24
commit
fb922e65e4
2 changed files with 28 additions and 2 deletions
|
@ -23,12 +23,12 @@ class TestDbStatementSQLite3 extends \PHPUnit\Framework\TestCase {
|
|||
unset($this->c);
|
||||
}
|
||||
|
||||
protected function checkBinding($input, array $expectations) {
|
||||
protected function checkBinding($input, array $expectations, bool $strict = false) {
|
||||
$nativeStatement = $this->c->prepare("SELECT ? as value");
|
||||
$s = new self::$imp($this->c, $nativeStatement);
|
||||
$types = array_unique(Statement::TYPES);
|
||||
foreach($types as $type) {
|
||||
$s->rebindArray([$type]);
|
||||
$s->rebindArray([$strict ? "strict $type" : $type]);
|
||||
$val = $s->runArray([$input])->getRow()['value'];
|
||||
$this->assertSame($expectations[$type], $val, "Type $type failed comparison.");
|
||||
}
|
||||
|
|
|
@ -18,6 +18,20 @@ trait BindingTests {
|
|||
"boolean" => null,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
// types may also be strict (e.g. "strict integer") and never pass null to the database; this is useful for NOT NULL columns
|
||||
// only null input should yield different results, so only this test has different expectations
|
||||
$exp = [
|
||||
"null" => null,
|
||||
"integer" => 0,
|
||||
"float" => 0.0,
|
||||
"date" => date(self::$imp::dateFormat(Statement::TS_DATE), 0),
|
||||
"time" => date(self::$imp::dateFormat(Statement::TS_TIME), 0),
|
||||
"datetime" => date(self::$imp::dateFormat(Statement::TS_BOTH), 0),
|
||||
"binary" => "",
|
||||
"string" => "",
|
||||
"boolean" => 0,
|
||||
];
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindTrue() {
|
||||
|
@ -34,6 +48,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindFalse() {
|
||||
|
@ -50,6 +65,7 @@ trait BindingTests {
|
|||
"boolean" => 0,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindInteger() {
|
||||
|
@ -66,6 +82,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindIntegerZero() {
|
||||
|
@ -82,6 +99,7 @@ trait BindingTests {
|
|||
"boolean" => 0,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindFloat() {
|
||||
|
@ -98,6 +116,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindFloatZero() {
|
||||
|
@ -114,6 +133,7 @@ trait BindingTests {
|
|||
"boolean" => 0,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindAsciiString() {
|
||||
|
@ -130,6 +150,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindUtf8String() {
|
||||
|
@ -146,6 +167,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindBinaryString() {
|
||||
|
@ -163,6 +185,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindIso8601DateString() {
|
||||
|
@ -180,6 +203,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindArbitraryDateString() {
|
||||
|
@ -197,6 +221,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindMutableDateObject($class = '\DateTime') {
|
||||
|
@ -214,6 +239,7 @@ trait BindingTests {
|
|||
"boolean" => 1,
|
||||
];
|
||||
$this->checkBinding($input, $exp);
|
||||
$this->checkBinding($input, $exp, true);
|
||||
}
|
||||
|
||||
function testBindImmutableDateObject() {
|
||||
|
|
Loading…
Reference in a new issue