<?php 
namespace eMapper\Type; 
 
use eMapper\Reflection\Profiler; 
use Acme\Type\RGBColorTypeHandler; 
 
/** 
 * Tests default and custom types defined in TypeManager class 
 *  
 * @author emaphp 
 * @group type 
 */ 
class TypeManagerTest extends \PHPUnit_Framework_TestCase { 
    public function testManager1() { 
        $typeManager = new TypeManager(); 
         
        //string 
        $this->assertArrayHasKey('string', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\StringTypeHandler', $typeManager->getTypeHandler('string')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\StringTypeHandler'); 
        $this->assertFalse($profile->isSafe()); 
         
        $this->assertArrayHasKey('s', $typeManager->getAliases()); 
        $this->assertArrayHasKey('str', $typeManager->getAliases()); 
        $this->assertInstanceOf('eMapper\Type\Handler\StringTypeHandler', $typeManager->getTypeHandler('s')); 
        $this->assertInstanceOf('eMapper\Type\Handler\StringTypeHandler', $typeManager->getTypeHandler('str')); 
         
        //boolean 
        $this->assertArrayHasKey('boolean', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\BooleanTypeHandler', $typeManager->getTypeHandler('boolean')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\BooleanTypeHandler'); 
        $this->assertTrue($profile->isSafe()); 
         
        $this->assertArrayHasKey('b', $typeManager->getAliases()); 
        $this->assertArrayHasKey('bool', $typeManager->getAliases()); 
        $this->assertInstanceOf('eMapper\Type\Handler\BooleanTypeHandler', $typeManager->getTypeHandler('b')); 
        $this->assertInstanceOf('eMapper\Type\Handler\BooleanTypeHandler', $typeManager->getTypeHandler('bool')); 
         
        //integer 
        $this->assertArrayHasKey('integer', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\IntegerTypeHandler', $typeManager->getTypeHandler('integer')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\IntegerTypeHandler'); 
        $this->assertTrue($profile->isSafe()); 
         
        $this->assertArrayHasKey('i', $typeManager->getAliases()); 
        $this->assertArrayHasKey('int', $typeManager->getAliases()); 
        $this->assertInstanceOf('eMapper\Type\Handler\IntegerTypeHandler', $typeManager->getTypeHandler('int')); 
        $this->assertInstanceOf('eMapper\Type\Handler\IntegerTypeHandler', $typeManager->getTypeHandler('i')); 
         
        //float 
        $this->assertArrayHasKey('float', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\FloatTypeHandler', $typeManager->getTypeHandler('float')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\FloatTypeHandler'); 
        $this->assertTrue($profile->isSafe()); 
         
        $this->assertArrayHasKey('f', $typeManager->getAliases()); 
        $this->assertArrayHasKey('double', $typeManager->getAliases()); 
        $this->assertArrayHasKey('real', $typeManager->getAliases()); 
        $this->assertInstanceOf('eMapper\Type\Handler\FloatTypeHandler', $typeManager->getTypeHandler('f')); 
        $this->assertInstanceOf('eMapper\Type\Handler\FloatTypeHandler', $typeManager->getTypeHandler('double')); 
        $this->assertInstanceOf('eMapper\Type\Handler\FloatTypeHandler', $typeManager->getTypeHandler('real')); 
         
        //blob 
        $this->assertArrayHasKey('blob', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\BlobTypeHandler', $typeManager->getTypeHandler('blob')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\BlobTypeHandler'); 
        $this->assertTrue($profile->isSafe()); 
         
        $this->assertArrayHasKey('x', $typeManager->getAliases()); 
        $this->assertArrayHasKey('bin', $typeManager->getAliases()); 
        $this->assertInstanceOf('eMapper\Type\Handler\BlobTypeHandler', $typeManager->getTypeHandler('x')); 
        $this->assertInstanceOf('eMapper\Type\Handler\BlobTypeHandler', $typeManager->getTypeHandler('bin')); 
         
        //datetime 
        $this->assertArrayHasKey('DateTime', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\DatetimeTypeHandler', $typeManager->getTypeHandler('DateTime')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\DatetimeTypeHandler'); 
        $this->assertFalse($profile->isSafe()); 
         
        $this->assertArrayHasKey('dt', $typeManager->getAliases()); 
        $this->assertArrayHasKey('timestamp', $typeManager->getAliases()); 
        $this->assertInstanceOf('eMapper\Type\Handler\DatetimeTypeHandler', $typeManager->getTypeHandler('dt')); 
        $this->assertInstanceOf('eMapper\Type\Handler\DatetimeTypeHandler', $typeManager->getTypeHandler('timestamp')); 
         
        //date 
        $this->assertArrayHasKey('date', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\DateTypeHandler', $typeManager->getTypeHandler('date')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\DateTypeHandler'); 
        $this->assertFalse($profile->isSafe()); 
         
        $this->assertArrayHasKey('d', $typeManager->getAliases()); 
        $this->assertInstanceOf('eMapper\Type\Handler\DateTypeHandler', $typeManager->getTypeHandler('d')); 
         
        //safe strings 
        $this->assertArrayHasKey('sstring', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\SafeStringTypeHandler', $typeManager->getTypeHandler('sstring')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\SafeStringTypeHandler'); 
        $this->assertTrue($profile->isSafe()); 
         
        $this->assertArrayHasKey('ss', $typeManager->getAliases()); 
        $this->assertArrayHasKey('sstr', $typeManager->getAliases()); 
        $this->assertInstanceOf('eMapper\Type\Handler\SafeStringTypeHandler', $typeManager->getTypeHandler('ss')); 
        $this->assertInstanceOf('eMapper\Type\Handler\SafeStringTypeHandler', $typeManager->getTypeHandler('sstr')); 
         
        //json 
        $this->assertArrayHasKey('json', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\JSONTypeHandler', $typeManager->getTypeHandler('json')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\JSONTypeHandler'); 
        $this->assertFalse($profile->isSafe()); 
         
        //null 
        $this->assertArrayHasKey('null', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('eMapper\Type\Handler\NullTypeHandler', $typeManager->getTypeHandler('null')); 
         
        $profile = Profiler::getClassProfile('eMapper\Type\Handler\NullTypeHandler'); 
        $this->assertTrue($profile->isSafe()); 
    } 
     
    public function testCustomType() { 
        $typeManager = new TypeManager(); 
        $typeManager->setTypeHandler('Acme\RGBColor', new RGBColorTypeHandler()); 
        $typeManager->addAlias('Acme\RGBColor', 'clr'); 
         
        $this->assertArrayHasKey('Acme\RGBColor', $typeManager->getTypeHandlers()); 
        $this->assertInstanceOf('Acme\Type\RGBColorTypeHandler', $typeManager->getTypeHandler('Acme\RGBColor')); 
         
        $this->assertArrayHasKey('clr', $typeManager->getAliases()); 
        $this->assertInstanceOf('Acme\Type\RGBColorTypeHandler', $typeManager->getTypeHandler('clr')); 
    } 
} 
?>
 
 |