J. King
6 years ago
6 changed files with 207 additions and 276 deletions
@ -1,253 +0,0 @@ |
|||||
<?php |
|
||||
/** @license MIT |
|
||||
* Copyright 2017 J. King, Dustin Wilson et al. |
|
||||
* See LICENSE and AUTHORS files for details */ |
|
||||
|
|
||||
declare(strict_types=1); |
|
||||
namespace JKingWeb\Arsse\Test\Db; |
|
||||
|
|
||||
use JKingWeb\Arsse\Db\Statement; |
|
||||
|
|
||||
trait BindingTests { |
|
||||
public function testBindNull() { |
|
||||
$input = null; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => null, |
|
||||
"float" => null, |
|
||||
"date" => null, |
|
||||
"time" => null, |
|
||||
"datetime" => null, |
|
||||
"binary" => null, |
|
||||
"string" => null, |
|
||||
"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" => gmdate("Y-m-d", 0), |
|
||||
"time" => gmdate("H:i:s", 0), |
|
||||
"datetime" => gmdate("Y-m-d H:i:s", 0), |
|
||||
"binary" => "", |
|
||||
"string" => "", |
|
||||
"boolean" => 0, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindTrue() { |
|
||||
$input = true; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 1, |
|
||||
"float" => 1.0, |
|
||||
"date" => null, |
|
||||
"time" => null, |
|
||||
"datetime" => null, |
|
||||
"binary" => "1", |
|
||||
"string" => "1", |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindFalse() { |
|
||||
$input = false; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 0, |
|
||||
"float" => 0.0, |
|
||||
"date" => null, |
|
||||
"time" => null, |
|
||||
"datetime" => null, |
|
||||
"binary" => "", |
|
||||
"string" => "", |
|
||||
"boolean" => 0, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindInteger() { |
|
||||
$input = 2112; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 2112, |
|
||||
"float" => 2112.0, |
|
||||
"date" => gmdate("Y-m-d", 2112), |
|
||||
"time" => gmdate("H:i:s", 2112), |
|
||||
"datetime" => gmdate("Y-m-d H:i:s", 2112), |
|
||||
"binary" => "2112", |
|
||||
"string" => "2112", |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindIntegerZero() { |
|
||||
$input = 0; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 0, |
|
||||
"float" => 0.0, |
|
||||
"date" => gmdate("Y-m-d", 0), |
|
||||
"time" => gmdate("H:i:s", 0), |
|
||||
"datetime" => gmdate("Y-m-d H:i:s", 0), |
|
||||
"binary" => "0", |
|
||||
"string" => "0", |
|
||||
"boolean" => 0, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindFloat() { |
|
||||
$input = 2112.0; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 2112, |
|
||||
"float" => 2112.0, |
|
||||
"date" => gmdate("Y-m-d", 2112), |
|
||||
"time" => gmdate("H:i:s", 2112), |
|
||||
"datetime" => gmdate("Y-m-d H:i:s", 2112), |
|
||||
"binary" => "2112", |
|
||||
"string" => "2112", |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindFloatZero() { |
|
||||
$input = 0.0; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 0, |
|
||||
"float" => 0.0, |
|
||||
"date" => gmdate("Y-m-d", 0), |
|
||||
"time" => gmdate("H:i:s", 0), |
|
||||
"datetime" => gmdate("Y-m-d H:i:s", 0), |
|
||||
"binary" => "0", |
|
||||
"string" => "0", |
|
||||
"boolean" => 0, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindAsciiString() { |
|
||||
$input = "Random string"; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 0, |
|
||||
"float" => 0.0, |
|
||||
"date" => null, |
|
||||
"time" => null, |
|
||||
"datetime" => null, |
|
||||
"binary" => $input, |
|
||||
"string" => $input, |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindUtf8String() { |
|
||||
$input = "é"; |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 0, |
|
||||
"float" => 0.0, |
|
||||
"date" => null, |
|
||||
"time" => null, |
|
||||
"datetime" => null, |
|
||||
"binary" => $input, |
|
||||
"string" => $input, |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindBinaryString() { |
|
||||
// FIXME: This test may be unreliable; SQLite happily stores invalid UTF-8 text as bytes untouched, but other engines probably don't do this |
|
||||
$input = chr(233); |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 0, |
|
||||
"float" => 0.0, |
|
||||
"date" => null, |
|
||||
"time" => null, |
|
||||
"datetime" => null, |
|
||||
"binary" => $input, |
|
||||
"string" => $input, |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindIso8601DateString() { |
|
||||
$input = "2017-01-09T13:11:17"; |
|
||||
$time = strtotime($input." UTC"); |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 2017, |
|
||||
"float" => 2017.0, |
|
||||
"date" => gmdate("Y-m-d", $time), |
|
||||
"time" => gmdate("H:i:s", $time), |
|
||||
"datetime" => gmdate("Y-m-d H:i:s", $time), |
|
||||
"binary" => $input, |
|
||||
"string" => $input, |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindArbitraryDateString() { |
|
||||
$input = "Today"; |
|
||||
$time = date_create($input, new \DateTimezone("UTC"))->getTimestamp(); |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => 0, |
|
||||
"float" => 0.0, |
|
||||
"date" => gmdate("Y-m-d", $time), |
|
||||
"time" => gmdate("H:i:s", $time), |
|
||||
"datetime" => gmdate("Y-m-d H:i:s", $time), |
|
||||
"binary" => $input, |
|
||||
"string" => $input, |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindMutableDateObject($class = '\DateTime') { |
|
||||
$input = new $class("Noon Today"); |
|
||||
$time = $input->getTimestamp(); |
|
||||
$exp = [ |
|
||||
"null" => null, |
|
||||
"integer" => $time, |
|
||||
"float" => (float) $time, |
|
||||
"date" => gmdate("Y-m-d", $time), |
|
||||
"time" => gmdate("H:i:s", $time), |
|
||||
"datetime" => gmdate("Y-m-d H:i:s", $time), |
|
||||
"binary" => gmdate("Y-m-d H:i:s", $time), |
|
||||
"string" => gmdate("Y-m-d H:i:s", $time), |
|
||||
"boolean" => 1, |
|
||||
]; |
|
||||
$this->checkBinding($input, $exp); |
|
||||
$this->checkBinding($input, $exp, true); |
|
||||
} |
|
||||
|
|
||||
public function testBindImmutableDateObject() { |
|
||||
$this->testBindMutableDateObject('\DateTimeImmutable'); |
|
||||
} |
|
||||
} |
|
Loading…
Reference in new issue