* @version $Id$ * @package Doctrine */ class Doctrine_Import_TestCase extends Doctrine_UnitTestCase { private $tmpdir; private $suffix; private $schema; public function prepareTables() { } public function prepareData() { } public function setUp() { parent::setUp(); //reading $reader = new Doctrine_Import_Reader_Db(); $reader->setPdo($this->dbh); $this->schema = $reader->read(); } public function testBadImport() { $builder = new Doctrine_Import_Builder(); try { $builder->buildRecord(new Doctrine_Schema_Table()); $this->fail(); } catch(Doctrine_Import_Builder_Exception $e) { $this->pass(); } } public function testImportTable() { $definition = array('name' => 'import_test'); $table = new Doctrine_Schema_Table($definition); $def = array('name' => 'name', 'type' => 'string', 'length' => 20, 'default' => 'someone'); $table->addColumn(new Doctrine_Schema_Column($def)); $def = array('name' => 'created', 'type' => 'integer', 'notnull' => true); $table->addColumn(new Doctrine_Schema_Column($def)); $builder = new Doctrine_Import_Builder(); $builder->setTargetPath('tmp'); try { $builder->buildRecord($table); $this->pass(); } catch(Doctrine_Import_Builder_Exception $e) { $this->fail(); } $this->assertTrue(file_exists('tmp' . DIRECTORY_SEPARATOR . 'ImportTest.php')); } public function testImportedComponent() { require_once('tmp' . DIRECTORY_SEPARATOR . 'ImportTest.php'); $r = new ImportTest(); $columns = $r->getTable()->getColumns(); // id column is auto-created $this->assertEqual($columns['id'][0], 'integer'); $this->assertEqual($columns['id'][1], 20); $this->assertEqual($columns['name'][0], 'string'); $this->assertEqual($columns['name'][1], 20); $this->assertEqual($columns['created'][0], 'integer'); unlink('tmp' . DIRECTORY_SEPARATOR . 'ImportTest.php'); } public function testForeignKeySupport() { /** $this->dbh->query('CREATE TABLE album ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, title VARCHAR(100), artist VARCHAR(100) )'); $this->dbh->query('CREATE TABLE track ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, album_id INTEGER, dsk INTEGER, posn INTEGER, song VARCHAR(255), FOREIGN KEY (album_id) REFERENCES album(id) )'); $sql = "PRAGMA table_info(track)"; $sql = "PRAGMA foreign_key_list(track)"; $result = $this->dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC); */ } /** public function testDatabaseConnectionIsReverseEngineeredToSchema() { $this->assertTrue($this->schema instanceof Doctrine_Schema); //table count should match $this->assertEqual(count($this->schema), count($this->tables)); } public function testBaseClassesAreWritten() { //now lets match the original with the result foreach($this->tables as $name) { $name = ucwords($name); $filename = $this->tmpdir.$name.$this->suffix.'.php'; $this->assertTrue(file_exists($filename)); } } public function testNativeColumnDefinitionsAreTranslatedCorrectly() { $transArr = array(); $transArr['sqlite'] = array( // array(native type, native length, doctrine type, doctrine length), array('int', 11, 'int', 11), //array('varchar', 255, 'string', 255), ); foreach ($transArr as $dbType => $colArr) { foreach($colArr as $colDef) { list($natType, $natLen, $expType, $expLen) = $colDef; list($resType, $resLen) = Doctrine_DataDict::getDoctrineType($natType, $natLen, $dbType); $this->assertEqual($resType, $expType); $this->assertEqual($resLen, $expLen); } } } public function testDoctrineRecordBaseClassesAreBuildCorrectly() { foreach($this->tables as $name) { $name = ucwords($name); $filename = $this->tmpdir.$name.$this->suffix.'.php'; if(file_exists($filename)) { require_once $filename; $obj = new $name.$this->suffix; list($oType, $oLength,) = $this->connection->getTable($name)->getColumns(); list($rType, $rLength,) = $this->connection->getTable($name.$this->suffix)->getColumns(); $this->assertEquals($rType, $oType); $this->assertEquals($rLength, $oLength); } } } */ // Gets the system temporary directory name // @return null on failure to resolve the system temp dir private function getTempDir() { /** if(function_exists('sys_get_temp_dir')) { $tempdir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $tempdir = $_ENV['TMP']; } elseif (!empty($_ENV['TMPDIR'])) { $tempdir = $_ENV['TMPDIR']; } elseif (!empty($_ENV['TEMP'])) { $tempdir = $_ENV['TEMP']; } else { //a little bit of chewing gum here will do the trick $tempdir = dirname(tempnam('/THIS_REALLY_SHOULD_NOT_EXISTS', 'na')); } if (empty($tempdir)) { return null; } $tempdir = rtrim($tempdir, '/'); $tempdir .= DIRECTORY_SEPARATOR; if (is_writable($tempdir) == false) { return null; } $dir = tempnam($tempdir, 'doctrine_tests'); @unlink($dir); @rmdir($dir); mkdir($dir); $dir .= DIRECTORY_SEPARATOR; return $dir; */ } }