J. King
6 years ago
5 changed files with 150 additions and 218 deletions
@ -1,108 +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\TestCase\Db\SQLite3; |
|
||||
|
|
||||
use JKingWeb\Arsse\Db\SQLite3\Result; |
|
||||
|
|
||||
/** @covers \JKingWeb\Arsse\Db\SQLite3\Result<extended> */ |
|
||||
class TestResult extends \JKingWeb\Arsse\Test\AbstractTest { |
|
||||
protected $c; |
|
||||
|
|
||||
public function setUp() { |
|
||||
if (!\JKingWeb\Arsse\Db\SQLite3\Driver::requirementsMet()) { |
|
||||
$this->markTestSkipped("SQLite extension not loaded"); |
|
||||
} |
|
||||
$this->clearData(); |
|
||||
$c = new \SQLite3(":memory:"); |
|
||||
$c->enableExceptions(true); |
|
||||
$this->c = $c; |
|
||||
} |
|
||||
|
|
||||
public function tearDown() { |
|
||||
$this->c->close(); |
|
||||
unset($this->c); |
|
||||
$this->clearData(); |
|
||||
} |
|
||||
|
|
||||
public function testConstructResult() { |
|
||||
$set = $this->c->query("SELECT 1"); |
|
||||
$this->assertInstanceOf(Result::class, new Result($set)); |
|
||||
} |
|
||||
|
|
||||
public function testGetChangeCountAndLastInsertId() { |
|
||||
$this->c->query("CREATE TABLE test(col)"); |
|
||||
$set = $this->c->query("INSERT INTO test(col) values(1)"); |
|
||||
$rows = $this->c->changes(); |
|
||||
$id = $this->c->lastInsertRowID(); |
|
||||
$r = new Result($set, [$rows,$id]); |
|
||||
$this->assertEquals($rows, $r->changes()); |
|
||||
$this->assertEquals($id, $r->lastId()); |
|
||||
} |
|
||||
|
|
||||
public function testIterateOverResults() { |
|
||||
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col"); |
|
||||
$rows = []; |
|
||||
foreach (new Result($set) as $index => $row) { |
|
||||
$rows[$index] = $row['col']; |
|
||||
} |
|
||||
$this->assertEquals([0 => 1, 1 => 2, 2 => 3], $rows); |
|
||||
} |
|
||||
|
|
||||
public function testIterateOverResultsTwice() { |
|
||||
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col"); |
|
||||
$rows = []; |
|
||||
$test = new Result($set); |
|
||||
foreach ($test as $row) { |
|
||||
$rows[] = $row['col']; |
|
||||
} |
|
||||
$this->assertEquals([1,2,3], $rows); |
|
||||
$this->assertException("resultReused", "Db"); |
|
||||
foreach ($test as $row) { |
|
||||
$rows[] = $row['col']; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public function testGetSingleValues() { |
|
||||
$set = $this->c->query("SELECT 1867 as year union select 1970 as year union select 2112 as year"); |
|
||||
$test = new Result($set); |
|
||||
$this->assertEquals(1867, $test->getValue()); |
|
||||
$this->assertEquals(1970, $test->getValue()); |
|
||||
$this->assertEquals(2112, $test->getValue()); |
|
||||
$this->assertSame(null, $test->getValue()); |
|
||||
} |
|
||||
|
|
||||
public function testGetFirstValuesOnly() { |
|
||||
$set = $this->c->query("SELECT 1867 as year, 19 as century union select 1970 as year, 20 as century union select 2112 as year, 22 as century"); |
|
||||
$test = new Result($set); |
|
||||
$this->assertEquals(1867, $test->getValue()); |
|
||||
$this->assertEquals(1970, $test->getValue()); |
|
||||
$this->assertEquals(2112, $test->getValue()); |
|
||||
$this->assertSame(null, $test->getValue()); |
|
||||
} |
|
||||
|
|
||||
public function testGetRows() { |
|
||||
$set = $this->c->query("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track"); |
|
||||
$rows = [ |
|
||||
['album' => '2112', 'track' => '2112'], |
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'], |
|
||||
]; |
|
||||
$test = new Result($set); |
|
||||
$this->assertEquals($rows[0], $test->getRow()); |
|
||||
$this->assertEquals($rows[1], $test->getRow()); |
|
||||
$this->assertSame(null, $test->getRow()); |
|
||||
} |
|
||||
|
|
||||
public function testGetAllRows() { |
|
||||
$set = $this->c->query("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track"); |
|
||||
$rows = [ |
|
||||
['album' => '2112', 'track' => '2112'], |
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'], |
|
||||
]; |
|
||||
$test = new Result($set); |
|
||||
$this->assertEquals($rows, $test->getAll()); |
|
||||
} |
|
||||
} |
|
@ -1,108 +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\TestCase\Db\SQLite3PDO; |
|
||||
|
|
||||
use JKingWeb\Arsse\Db\Result; |
|
||||
use JKingWeb\Arsse\Db\PDOResult; |
|
||||
use JKingWeb\Arsse\Db\SQLite3\PDODriver; |
|
||||
|
|
||||
/** @covers \JKingWeb\Arsse\Db\PDOResult<extended> */ |
|
||||
class TestResult extends \JKingWeb\Arsse\Test\AbstractTest { |
|
||||
protected $c; |
|
||||
|
|
||||
public function setUp() { |
|
||||
if (!PDODriver::requirementsMet()) { |
|
||||
$this->markTestSkipped("PDO-SQLite extension not loaded"); |
|
||||
} |
|
||||
$this->clearData(); |
|
||||
$c = new \PDO("sqlite::memory:", "", "", [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]); |
|
||||
$this->c = $c; |
|
||||
} |
|
||||
|
|
||||
public function tearDown() { |
|
||||
unset($this->c); |
|
||||
$this->clearData(); |
|
||||
} |
|
||||
|
|
||||
public function testConstructResult() { |
|
||||
$set = $this->c->query("SELECT 1"); |
|
||||
$this->assertInstanceOf(Result::class, new PDOResult($set)); |
|
||||
} |
|
||||
|
|
||||
public function testGetChangeCountAndLastInsertId() { |
|
||||
$this->c->query("CREATE TABLE test(col)"); |
|
||||
$set = $this->c->query("INSERT INTO test(col) values(1)"); |
|
||||
$rows = $set->rowCount(); |
|
||||
$id = $this->c->lastInsertID(); |
|
||||
$r = new PDOResult($set, [$rows,$id]); |
|
||||
$this->assertSame((int) $rows, $r->changes()); |
|
||||
$this->assertSame((int) $id, $r->lastId()); |
|
||||
} |
|
||||
|
|
||||
public function testIterateOverResults() { |
|
||||
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col"); |
|
||||
$rows = []; |
|
||||
foreach (new PDOResult($set) as $index => $row) { |
|
||||
$rows[$index] = $row['col']; |
|
||||
} |
|
||||
$this->assertSame([0 => "1", 1 => "2", 2 => "3"], $rows); |
|
||||
} |
|
||||
|
|
||||
public function testIterateOverResultsTwice() { |
|
||||
$set = $this->c->query("SELECT 1 as col union select 2 as col union select 3 as col"); |
|
||||
$rows = []; |
|
||||
$test = new PDOResult($set); |
|
||||
foreach ($test as $row) { |
|
||||
$rows[] = $row['col']; |
|
||||
} |
|
||||
$this->assertSame(["1","2","3"], $rows); |
|
||||
$this->assertException("resultReused", "Db"); |
|
||||
foreach ($test as $row) { |
|
||||
$rows[] = $row['col']; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public function testGetSingleValues() { |
|
||||
$set = $this->c->query("SELECT 1867 as year union select 1970 as year union select 2112 as year"); |
|
||||
$test = new PDOResult($set); |
|
||||
$this->assertEquals(1867, $test->getValue()); |
|
||||
$this->assertEquals(1970, $test->getValue()); |
|
||||
$this->assertEquals(2112, $test->getValue()); |
|
||||
$this->assertSame(null, $test->getValue()); |
|
||||
} |
|
||||
|
|
||||
public function testGetFirstValuesOnly() { |
|
||||
$set = $this->c->query("SELECT 1867 as year, 19 as century union select 1970 as year, 20 as century union select 2112 as year, 22 as century"); |
|
||||
$test = new PDOResult($set); |
|
||||
$this->assertEquals(1867, $test->getValue()); |
|
||||
$this->assertEquals(1970, $test->getValue()); |
|
||||
$this->assertEquals(2112, $test->getValue()); |
|
||||
$this->assertSame(null, $test->getValue()); |
|
||||
} |
|
||||
|
|
||||
public function testGetRows() { |
|
||||
$set = $this->c->query("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track"); |
|
||||
$rows = [ |
|
||||
['album' => '2112', 'track' => '2112'], |
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'], |
|
||||
]; |
|
||||
$test = new PDOResult($set); |
|
||||
$this->assertEquals($rows[0], $test->getRow()); |
|
||||
$this->assertEquals($rows[1], $test->getRow()); |
|
||||
$this->assertSame(null, $test->getRow()); |
|
||||
} |
|
||||
|
|
||||
public function testGetAllRows() { |
|
||||
$set = $this->c->query("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track"); |
|
||||
$rows = [ |
|
||||
['album' => '2112', 'track' => '2112'], |
|
||||
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'], |
|
||||
]; |
|
||||
$test = new PDOResult($set); |
|
||||
$this->assertEquals($rows, $test->getAll()); |
|
||||
} |
|
||||
} |
|
@ -0,0 +1,134 @@ |
|||||
|
<?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\TestCase\Db; |
||||
|
|
||||
|
use JKingWeb\Arsse\Db\Result; |
||||
|
use JKingWeb\Arsse\Db\PDOResult; |
||||
|
use JKingWeb\Arsse\Db\SQLite3\PDODriver; |
||||
|
|
||||
|
/** |
||||
|
* @covers \JKingWeb\Arsse\Db\PDOResult<extended> |
||||
|
* @covers \JKingWeb\Arsse\Db\SQLite3\Result<extended> |
||||
|
*/ |
||||
|
class TestResult extends \JKingWeb\Arsse\Test\AbstractTest { |
||||
|
public function provideDrivers() { |
||||
|
$drvSqlite3 = (function() { |
||||
|
if (\JKingWeb\Arsse\Db\SQLite3\Driver::requirementsMet()) { |
||||
|
$d = new \SQLite3(":memory:"); |
||||
|
$d->enableExceptions(true); |
||||
|
return $d; |
||||
|
} |
||||
|
})(); |
||||
|
$drvPdo = (function() { |
||||
|
if (\JKingWeb\Arsse\Db\SQLite3\PDODriver::requirementsMet()) { |
||||
|
return new \PDO("sqlite::memory:", "", "", [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]); |
||||
|
} |
||||
|
})(); |
||||
|
return [ |
||||
|
'SQLite 3' => [isset($drvSqlite3), false, \JKingWeb\Arsse\Db\SQLite3\Result::class, function(string $query) use($drvSqlite3) { |
||||
|
$set = $drvSqlite3->query($query); |
||||
|
$rows = $drvSqlite3->changes(); |
||||
|
$id = $drvSqlite3->lastInsertRowID(); |
||||
|
return [$set, [$rows, $id]]; |
||||
|
}], |
||||
|
'PDO' => [isset($drvPdo), true, \JKingWeb\Arsse\Db\PDOResult::class, function(string $query) use($drvPdo) { |
||||
|
$set = $drvPdo->query($query); |
||||
|
$rows = $set->rowCount(); |
||||
|
$id = $drvPdo->lastInsertID(); |
||||
|
return [$set, [$rows, $id]]; |
||||
|
}], |
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideDrivers */ |
||||
|
public function testConstructResult($driver, bool $stringCoersion, string $class, \Closure $func) { |
||||
|
if (is_null($driver)) { |
||||
|
$this->markTestSkipped(); |
||||
|
} |
||||
|
$this->assertInstanceOf(Result::class, new $class(...$func("SELECT 1"))); |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideDrivers */ |
||||
|
public function testGetChangeCountAndLastInsertId($driver, bool $stringCoersion, string $class, \Closure $func) { |
||||
|
$func("CREATE TABLE if not exists arsse_meta(key varchar(255) primary key not null, value text)"); |
||||
|
$out = $func("INSERT INTO arsse_meta(key,value) values('test', 1)"); |
||||
|
$rows = $out[1][0]; |
||||
|
$id = $out[1][1]; |
||||
|
$r = new $class(...$out); |
||||
|
$this->assertSame((int) $rows, $r->changes()); |
||||
|
$this->assertSame((int) $id, $r->lastId()); |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideDrivers */ |
||||
|
public function testIterateOverResults($driver, bool $stringCoersion, string $class, \Closure $func) { |
||||
|
$exp = [0 => 1, 1 => 2, 2 => 3]; |
||||
|
$exp = $stringCoersion ? $this->stringify($exp) : $exp; |
||||
|
foreach (new $class(...$func("SELECT 1 as col union select 2 as col union select 3 as col")) as $index => $row) { |
||||
|
$rows[$index] = $row['col']; |
||||
|
} |
||||
|
$this->assertSame($exp, $rows); |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideDrivers */ |
||||
|
public function testIterateOverResultsTwice($driver, bool $stringCoersion, string $class, \Closure $func) { |
||||
|
$exp = [0 => 1, 1 => 2, 2 => 3]; |
||||
|
$exp = $stringCoersion ? $this->stringify($exp) : $exp; |
||||
|
$result = new $class(...$func("SELECT 1 as col union select 2 as col union select 3 as col")); |
||||
|
foreach ($result as $index => $row) { |
||||
|
$rows[$index] = $row['col']; |
||||
|
} |
||||
|
$this->assertSame($exp, $rows); |
||||
|
$this->assertException("resultReused", "Db"); |
||||
|
foreach ($result as $row) { |
||||
|
$rows[] = $row['col']; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideDrivers */ |
||||
|
public function testGetSingleValues($driver, bool $stringCoersion, string $class, \Closure $func) { |
||||
|
$exp = [1867, 1970, 2112]; |
||||
|
$exp = $stringCoersion ? $this->stringify($exp) : $exp; |
||||
|
$test = new $class(...$func("SELECT 1867 as year union select 1970 as year union select 2112 as year")); |
||||
|
$this->assertSame($exp[0], $test->getValue()); |
||||
|
$this->assertSame($exp[1], $test->getValue()); |
||||
|
$this->assertSame($exp[2], $test->getValue()); |
||||
|
$this->assertSame(null, $test->getValue()); |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideDrivers */ |
||||
|
public function testGetFirstValuesOnly($driver, bool $stringCoersion, string $class, \Closure $func) { |
||||
|
$exp = [1867, 1970, 2112]; |
||||
|
$exp = $stringCoersion ? $this->stringify($exp) : $exp; |
||||
|
$test = new $class(...$func("SELECT 1867 as year, 19 as century union select 1970 as year, 20 as century union select 2112 as year, 22 as century")); |
||||
|
$this->assertSame($exp[0], $test->getValue()); |
||||
|
$this->assertSame($exp[1], $test->getValue()); |
||||
|
$this->assertSame($exp[2], $test->getValue()); |
||||
|
$this->assertSame(null, $test->getValue()); |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideDrivers */ |
||||
|
public function testGetRows($driver, bool $stringCoersion, string $class, \Closure $func) { |
||||
|
$exp = [ |
||||
|
['album' => '2112', 'track' => '2112'], |
||||
|
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'], |
||||
|
]; |
||||
|
$test = new $class(...$func("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track")); |
||||
|
$this->assertSame($exp[0], $test->getRow()); |
||||
|
$this->assertSame($exp[1], $test->getRow()); |
||||
|
$this->assertSame(null, $test->getRow()); |
||||
|
} |
||||
|
|
||||
|
/** @dataProvider provideDrivers */ |
||||
|
public function testGetAllRows($driver, bool $stringCoersion, string $class, \Closure $func) { |
||||
|
$exp = [ |
||||
|
['album' => '2112', 'track' => '2112'], |
||||
|
['album' => 'Clockwork Angels', 'track' => 'The Wreckers'], |
||||
|
]; |
||||
|
$test = new $class(...$func("SELECT '2112' as album, '2112' as track union select 'Clockwork Angels' as album, 'The Wreckers' as track")); |
||||
|
$this->assertEquals($exp, $test->getAll()); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue