1
0
mirror of synced 2024-12-13 14:56:01 +03:00
doctrine2/tests/DBTestCase.php

376 lines
14 KiB
PHP
Raw Normal View History

<?php
require_once("../draft/DB.php");
2006-11-06 20:56:14 +03:00
class Doctrine_Db_TestLogger implements Doctrine_Overloadable {
2006-09-23 14:44:39 +04:00
private $messages = array();
public function __call($m, $a) {
$this->messages[] = $m;
}
public function pop() {
return array_pop($this->messages);
}
public function getAll() {
return $this->messages;
}
}
2006-11-06 20:56:14 +03:00
class Doctrine_Db_TestValidListener extends Doctrine_Db_EventListener { }
class Doctrine_Db_TestInvalidListener { }
2006-09-23 14:44:39 +04:00
2006-11-06 20:56:14 +03:00
class Doctrine_Db_TestCase extends Doctrine_UnitTestCase {
2006-11-08 13:18:15 +03:00
protected $dbh;
public function prepareData() { }
public function prepareTables() { }
public function init() { }
2006-09-23 14:44:39 +04:00
public function testFetchAll() {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('sqlite::memory:');
$this->dbh->connect();
2006-11-08 13:18:15 +03:00
$this->dbh->query('CREATE TABLE entity (id INTEGER, name TEXT)');
2006-11-08 13:18:15 +03:00
$this->dbh->query("INSERT INTO entity (id, name) VALUES (1, 'zYne')");
$this->dbh->query("INSERT INTO entity (id, name) VALUES (2, 'John')");
2006-11-08 13:18:15 +03:00
$a = $this->dbh->fetchAll('SELECT * FROM entity');
$this->assertEqual($a, array (
0 =>
array (
'id' => '1',
'name' => 'zYne',
),
1 =>
array (
'id' => '2',
'name' => 'John',
),
));
}
public function testFetchOne() {
2006-11-08 13:18:15 +03:00
$c = $this->dbh->fetchOne('SELECT COUNT(1) FROM entity');
$this->assertEqual($c, 2);
2006-11-08 13:18:15 +03:00
$c = $this->dbh->fetchOne('SELECT COUNT(1) FROM entity WHERE id = ?', array(1));
$this->assertEqual($c, 1);
}
public function testFetchAssoc() {
}
public function testFetchColumn() {
2006-11-08 13:18:15 +03:00
$a = $this->dbh->fetchColumn('SELECT * FROM entity');
$this->assertEqual($a, array (
0 => '1',
1 => '2',
));
2006-11-08 13:18:15 +03:00
$a = $this->dbh->fetchColumn('SELECT * FROM entity WHERE id = ?', array(1));
$this->assertEqual($a, array (
0 => '1',
));
}
public function testFetchArray() {
2006-11-08 13:18:15 +03:00
$a = $this->dbh->fetchArray('SELECT * FROM entity');
$this->assertEqual($a, array (
0 => '1',
1 => 'zYne',
));
2006-11-08 13:18:15 +03:00
$a = $this->dbh->fetchArray('SELECT * FROM entity WHERE id = ?', array(1));
$this->assertEqual($a, array (
0 => '1',
1 => 'zYne',
));
}
public function testFetchRow() {
2006-11-08 13:18:15 +03:00
$c = $this->dbh->fetchRow('SELECT * FROM entity');
$this->assertEqual($c, array (
'id' => '1',
'name' => 'zYne',
));
2006-11-08 13:18:15 +03:00
$c = $this->dbh->fetchRow('SELECT * FROM entity WHERE id = ?', array(1));
$this->assertEqual($c, array (
'id' => '1',
'name' => 'zYne',
));
}
public function testFetchPairs() {
}
2006-09-23 14:44:39 +04:00
public function testAddValidEventListener() {
2006-11-08 13:18:15 +03:00
$this->dbh->setListener(new Doctrine_Db_EventListener());
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_EventListener);
2006-09-23 14:44:39 +04:00
try {
2006-11-08 13:18:15 +03:00
$ret = $this->dbh->addListener(new Doctrine_Db_TestLogger());
2006-09-23 14:44:39 +04:00
$this->pass();
2006-11-06 20:56:14 +03:00
$this->assertTrue($ret instanceof Doctrine_Db2);
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->fail();
}
2006-11-08 13:18:15 +03:00
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_EventListener_Chain);
$this->assertTrue($this->dbh->getListener()->get(0) instanceof Doctrine_Db_TestLogger);
2006-09-23 14:44:39 +04:00
try {
2006-11-08 13:18:15 +03:00
$ret = $this->dbh->addListener(new Doctrine_Db_TestValidListener());
2006-09-23 14:44:39 +04:00
$this->pass();
2006-11-06 20:56:14 +03:00
$this->assertTrue($ret instanceof Doctrine_Db2);
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->fail();
}
2006-11-08 13:18:15 +03:00
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_EventListener_Chain);
$this->assertTrue($this->dbh->getListener()->get(0) instanceof Doctrine_Db_TestLogger);
$this->assertTrue($this->dbh->getListener()->get(1) instanceof Doctrine_Db_TestValidListener);
2006-09-23 14:44:39 +04:00
try {
2006-11-08 13:18:15 +03:00
$ret = $this->dbh->addListener(new Doctrine_Db_EventListener_Chain(), 'chain');
2006-09-23 14:44:39 +04:00
$this->pass();
2006-11-06 20:56:14 +03:00
$this->assertTrue($ret instanceof Doctrine_Db2);
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->fail();
}
2006-11-08 13:18:15 +03:00
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_EventListener_Chain);
$this->assertTrue($this->dbh->getListener()->get(0) instanceof Doctrine_Db_TestLogger);
$this->assertTrue($this->dbh->getListener()->get(1) instanceof Doctrine_Db_TestValidListener);
$this->assertTrue($this->dbh->getListener()->get('chain') instanceof Doctrine_Db_EventListener_Chain);
2006-09-23 14:44:39 +04:00
// replacing
try {
2006-11-08 13:18:15 +03:00
$ret = $this->dbh->addListener(new Doctrine_Db_EventListener_Chain(), 'chain');
2006-09-23 14:44:39 +04:00
$this->pass();
2006-11-06 20:56:14 +03:00
$this->assertTrue($ret instanceof Doctrine_Db2);
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->fail();
}
2006-11-08 13:18:15 +03:00
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_EventListener_Chain);
$this->assertTrue($this->dbh->getListener()->get(0) instanceof Doctrine_Db_TestLogger);
$this->assertTrue($this->dbh->getListener()->get(1) instanceof Doctrine_Db_TestValidListener);
$this->assertTrue($this->dbh->getListener()->get('chain') instanceof Doctrine_Db_EventListener_Chain);
2006-09-23 14:44:39 +04:00
}
2006-11-08 13:18:15 +03:00
2006-09-23 14:44:39 +04:00
public function testListeningEventsWithSingleListener() {
2006-11-08 13:18:15 +03:00
$this->dbh->setListener(new Doctrine_Db_TestLogger());
$listener = $this->dbh->getListener();
$stmt = $this->dbh->prepare('INSERT INTO entity (id) VALUES(?)');
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onPrepare');
$this->assertEqual($listener->pop(), 'onPrePrepare');
$stmt->execute(array(1));
$this->assertEqual($listener->pop(), 'onExecute');
$this->assertEqual($listener->pop(), 'onPreExecute');
2006-11-08 13:18:15 +03:00
$this->dbh->exec('DELETE FROM entity');
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onExec');
$this->assertEqual($listener->pop(), 'onPreExec');
2006-11-08 13:18:15 +03:00
$this->dbh->beginTransaction();
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onBeginTransaction');
$this->assertEqual($listener->pop(), 'onPreBeginTransaction');
2006-11-08 13:18:15 +03:00
$this->dbh->query('INSERT INTO entity (id) VALUES (1)');
2006-09-23 14:44:39 +04:00
2006-11-08 13:18:15 +03:00
$this->dbh->commit();
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onCommit');
$this->assertEqual($listener->pop(), 'onPreCommit');
$this->assertEqual($listener->pop(), 'onQuery');
$this->assertEqual($listener->pop(), 'onPreQuery');
2006-11-08 13:18:15 +03:00
2006-09-23 14:44:39 +04:00
}
public function testListeningEventsWithListenerChain() {
2006-11-08 13:18:15 +03:00
$this->dbh->query('DROP TABLE entity');
$this->dbh->addListener(new Doctrine_Db_TestLogger());
$this->dbh->addListener(new Doctrine_Db_TestLogger());
2006-09-23 14:44:39 +04:00
2006-11-08 13:18:15 +03:00
$this->dbh->query('CREATE TABLE entity (id INT)');
2006-09-23 14:44:39 +04:00
2006-11-08 13:18:15 +03:00
$listener = $this->dbh->getListener()->get(0);
$listener2 = $this->dbh->getListener()->get(1);
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onQuery');
$this->assertEqual($listener->pop(), 'onPreQuery');
$this->assertEqual($listener2->pop(), 'onQuery');
$this->assertEqual($listener2->pop(), 'onPreQuery');
2006-11-08 13:18:15 +03:00
$stmt = $this->dbh->prepare('INSERT INTO entity (id) VALUES(?)');
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onPrepare');
$this->assertEqual($listener->pop(), 'onPrePrepare');
$this->assertEqual($listener2->pop(), 'onPrepare');
$this->assertEqual($listener2->pop(), 'onPrePrepare');
$stmt->execute(array(1));
$this->assertEqual($listener->pop(), 'onExecute');
$this->assertEqual($listener->pop(), 'onPreExecute');
$this->assertEqual($listener2->pop(), 'onExecute');
$this->assertEqual($listener2->pop(), 'onPreExecute');
2006-11-08 13:18:15 +03:00
$this->dbh->exec('DELETE FROM entity');
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onExec');
$this->assertEqual($listener->pop(), 'onPreExec');
$this->assertEqual($listener2->pop(), 'onExec');
$this->assertEqual($listener2->pop(), 'onPreExec');
2006-11-08 13:18:15 +03:00
$this->dbh->beginTransaction();
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onBeginTransaction');
$this->assertEqual($listener->pop(), 'onPreBeginTransaction');
$this->assertEqual($listener2->pop(), 'onBeginTransaction');
$this->assertEqual($listener2->pop(), 'onPreBeginTransaction');
2006-11-08 13:18:15 +03:00
$this->dbh->query('INSERT INTO entity (id) VALUES (1)');
2006-09-23 14:44:39 +04:00
2006-11-08 13:18:15 +03:00
$this->dbh->commit();
2006-09-23 14:44:39 +04:00
$this->assertEqual($listener->pop(), 'onCommit');
$this->assertEqual($listener->pop(), 'onPreCommit');
$this->assertEqual($listener->pop(), 'onQuery');
$this->assertEqual($listener->pop(), 'onPreQuery');
2006-11-08 13:18:15 +03:00
$this->dbh->query('DROP TABLE entity');
2006-09-23 14:44:39 +04:00
}
public function testSetValidEventListener() {
try {
2006-11-08 13:18:15 +03:00
$this->dbh->setListener(new Doctrine_Db_TestLogger());
2006-09-23 14:44:39 +04:00
$this->pass();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->fail();
}
2006-11-08 13:18:15 +03:00
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_TestLogger);
2006-09-23 14:44:39 +04:00
try {
2006-11-08 13:18:15 +03:00
$this->dbh->setListener(new Doctrine_Db_TestValidListener());
2006-09-23 14:44:39 +04:00
$this->pass();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->fail();
}
2006-11-08 13:18:15 +03:00
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_TestValidListener);
2006-09-23 14:44:39 +04:00
try {
2006-11-08 13:18:15 +03:00
$this->dbh->setListener(new Doctrine_Db_EventListener_Chain());
2006-09-23 14:44:39 +04:00
$this->pass();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->fail();
}
2006-11-08 13:18:15 +03:00
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_EventListener_Chain);
2006-09-23 14:44:39 +04:00
try {
2006-11-08 13:18:15 +03:00
$this->dbh->setListener(new Doctrine_Db_EventListener());
2006-09-23 14:44:39 +04:00
$this->pass();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->fail();
}
2006-11-08 13:18:15 +03:00
$this->assertTrue($this->dbh->getListener() instanceof Doctrine_Db_EventListener);
2006-09-23 14:44:39 +04:00
}
public function testSetInvalidEventListener() {
try {
2006-11-08 13:18:15 +03:00
$this->dbh->setListener(new Doctrine_Db_TestInvalidListener());
2006-09-23 14:44:39 +04:00
$this->fail();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
2006-09-23 14:44:39 +04:00
$this->pass();
}
}
public function testInvalidDSN() {
try {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('');
$this->fail();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
$this->pass();
}
try {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('unknown');
$this->fail();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
$this->pass();
}
try {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection(0);
$this->fail();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
$this->pass();
}
}
public function testInvalidScheme() {
try {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('unknown://:memory:');
$this->fail();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
$this->pass();
}
}
public function testInvalidHost() {
try {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('mysql://user:password@');
$this->fail();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
$this->pass();
}
}
public function testInvalidDatabase() {
try {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('mysql://user:password@host/');
$this->fail();
2006-11-06 20:56:14 +03:00
} catch(Doctrine_Db_Exception $e) {
$this->pass();
}
}
2006-09-23 02:29:06 +04:00
public function testGetConnectionPdoLikeDSN() {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('mysql:host=localhost;dbname=test', 'root', 'password');
$this->assertEqual($this->dbh->getOption('dsn'), 'mysql:host=localhost;dbname=test');
$this->assertEqual($this->dbh->getOption('username'), 'root');
$this->assertEqual($this->dbh->getOption('password'), 'password');
2006-09-23 02:29:06 +04:00
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('sqlite::memory:');
2006-09-23 02:29:06 +04:00
2006-11-08 13:18:15 +03:00
$this->assertEqual($this->dbh->getOption('dsn'), 'sqlite::memory:');
$this->assertEqual($this->dbh->getOption('username'), false);
$this->assertEqual($this->dbh->getOption('password'), false);
2006-09-23 02:29:06 +04:00
}
2006-09-23 14:44:39 +04:00
public function testDriverName() {
}
2006-09-23 02:29:06 +04:00
public function testGetConnectionWithPearLikeDSN() {
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('mysql://zYne:password@localhost/test');
$this->assertEqual($this->dbh->getOption('dsn'), 'mysql:host=localhost;dbname=test');
$this->assertEqual($this->dbh->getOption('username'), 'zYne');
$this->assertEqual($this->dbh->getOption('password'), 'password');
2006-09-23 14:44:39 +04:00
2006-11-08 13:18:15 +03:00
$this->dbh = Doctrine_Db2::getConnection('sqlite://:memory:');
2006-09-23 14:44:39 +04:00
2006-11-08 13:18:15 +03:00
$this->assertEqual($this->dbh->getOption('dsn'), 'sqlite::memory:');
$this->assertEqual($this->dbh->getOption('username'), false);
$this->assertEqual($this->dbh->getOption('password'), false);
}
2006-09-23 02:29:06 +04:00
}