<?php
require_once(dirname(__FILE__).'/BaseTest.php');
/**
* @package System.DataAccess.SQLMap
*/
class InheritanceTest extends BaseTest
{
function __construct()
{
parent::__construct();
$this->initSqlMap();
$this->initScript('documents-init.sql');
}
/// Test All document with no formula
function testGetAllDocument()
{
$list = $this->sqlmap->queryForList("GetAllDocument");
$this->assertEquals(6, count($list));
$book = $list[0];
$this->assertBook($book, 1, "The World of Null-A", 55);
$book = $list[1];
$this->assertBook($book, 3, "Lord of the Rings", 3587);
$document = $list[2];
$this->assertDocument($document, 5, "Le Monde");
$document = $list[3];
$this->assertDocument($document, 6, "Foundation");
$news = $list[4];
$this->assertNewspaper($news, 2, "Le Progres de Lyon", "Lyon");
$document = $list[5];
$this->assertDocument($document, 4, "Le Canard enchaine");
}
/// Test All document in a typed collection
function testGetTypedCollection()
{
$list = $this->sqlmap->queryForList("GetTypedCollection");
$this->assertEquals(6, $list->getCount());
$book = $list[0];
$this->assertBook($book, 1, "The World of Null-A", 55);
$book = $list[1];
$this->assertBook($book, 3, "Lord of the Rings", 3587);
$document = $list[2];
$this->assertDocument($document, 5, "Le Monde");
$document = $list[3];
$this->assertDocument($document, 6, "Foundation");
$news = $list[4];
$this->assertNewspaper($news, 2, "Le Progres de Lyon", "Lyon");
$document = $list[5];
$this->assertDocument($document, 4, "Le Canard enchaine");
}
/// Test All document with Custom Type Handler
function testGetAllDocumentWithCustomTypeHandler()
{
//register the custom inheritance type handler
$this->sqlmap->getTypeHandlerFactory()->register(
'CustomInheritance', new CustomInheritance);
$list = $this->sqlmap->queryForList("GetAllDocumentWithCustomTypeHandler");
$this->assertEquals(6, count($list));
$book = $list[0];
$this->assertBook($book, 1, "The World of Null-A", 55);
$book = $list[1];
$this->assertBook($book, 3, "Lord of the Rings", 3587);
$news = $list[2];
$this->assertNewspaper($news, 5, "Le Monde", "Paris");
$book = $list[3];
$this->assertBook($book, 6, "Foundation", 557);
$news = $list[4];
$this->assertNewspaper($news, 2, "Le Progres de Lyon", "Lyon");
$news = $list[5];
$this->assertNewspaper($news, 4, "Le Canard enchaine", "Paris");
}
function AssertDocument(Document $document, $id, $title)
{
$this->assertEquals($id, $document->getID());
$this->assertEquals($title, $document->getTitle());
}
function AssertBook(Book $book, $id, $title, $pageNumber)
{
$this->assertEquals($id, $book->getId());
$this->assertEquals($title, $book->getTitle());
$this->assertEquals($pageNumber, (int)$book->getPageNumber());
}
function AssertNewspaper(Newspaper $news, $id, $title, $city)
{
$this->assertEquals($id, $news->getId());
$this->assertEquals($title, $news->getTitle());
$this->assertEquals($city, $news->getCity());
}
}
class CustomInheritance implements ITypeHandlerCallback
{
public function getResult($type)
{
switch ($type)
{
case 'Monograph': case 'Book':
return 'Book';
case 'Tabloid': case 'Broadsheet': case 'Newspaper':
return 'Newspaper';
default:
return 'Document';
}
}
public function getParameter($parameter)
{
throw new TDataMapperException('not implemented');
}
public function createNewInstance($data=null)
{
throw new TDataMapperException('can not create');
}
}
?>