|
- <?php
- /**
- * PhpUnderControl_PhalApiDI_Test
- *
- * 针对 ../PhalApi/DI.php PhalApi_DI 类的PHPUnit单元测试
- *
- * @author: dogstar 20141004
- */
-
- require_once dirname(__FILE__) . '/test_env.php';
-
- if (!class_exists('PhalApi_DI')) {
- require dirname(__FILE__) . '/../PhalApi/DI.php';
- }
-
- class PhpUnderControl_PhalApiDI_Test extends PHPUnit_Framework_TestCase
- {
- public $coreDI;
-
- protected function setUp()
- {
- parent::setUp();
-
- $this->coreDI = new PhalApi_DI();
- }
-
- protected function tearDown()
- {
- }
-
-
- /**
- * @group testOne
- */
- public function testOne()
- {
- $rs = DI();
- }
-
- public function testSetterAndGetter()
- {
- $this->coreDI->set('name', 'dogstar');
- $this->assertEquals($this->coreDI->get('name'), 'dogstar');
-
- $arr = array(1, 5, 7);
- $this->coreDI->set('nameArr', $arr);
- $this->assertEquals($this->coreDI->get('nameArr'), $arr);
- }
-
- public function testMagicFunction()
- {
- $this->coreDI->setName('dogstar');
- $this->assertEquals($this->coreDI->getName(), 'dogstar');
-
- $this->assertEquals($this->coreDI->getNameDefault('2013'), '2013');
-
- $this->assertEquals($this->coreDI->getNameNull(), null);
-
- $this->coreDI->setNameSetNull();
- $this->assertEquals($this->coreDI->getNameSetNull(), null);
- }
-
- public function testClassSettterAndGetter()
- {
- $this->coreDI->name2 = 'dogstar';
- $this->assertEquals($this->coreDI->name2, 'dogstar');
-
- $this->coreDI->nameAgain = 'dogstarAgain';
- $this->assertEquals($this->coreDI->nameAgain, 'dogstarAgain');
-
- $this->assertNull($this->coreDI->nameNull);
-
- }
-
- public function testMixed()
- {
- $this->coreDI->name1 = 'dogstar1';
- $this->assertEquals($this->coreDI->name1, 'dogstar1');
- $this->assertEquals($this->coreDI->getName1('2013'), 'dogstar1');
- $this->assertEquals($this->coreDI->name1, 'dogstar1');
-
- $this->coreDI->setName1('dogstar2');
- $this->assertEquals($this->coreDI->name1, 'dogstar2');
- $this->assertEquals($this->coreDI->getName1('2013'), 'dogstar2');
- $this->assertEquals($this->coreDI->name1, 'dogstar2');
-
- $this->coreDI->set('name1', 'dogstar3');
- $this->assertEquals($this->coreDI->name1, 'dogstar3');
- $this->assertEquals($this->coreDI->getName1('2013'), 'dogstar3');
- $this->assertEquals($this->coreDI->name1, 'dogstar3');
-
- }
-
- public function testAnonymousFunction()
- {
- $this->coreDI->set('name', function(){
- return new Demo(2014);
- });
-
- $this->assertEquals($this->coreDI->name->mark, 2014);
-
- $mark = 2015;
- $this->coreDI->set('name1', function() use ($mark){
- return new Demo($mark);
- });
- $this->assertEquals($this->coreDI->name1->mark, $mark);
-
- $this->coreDI->name3 = function(){
- return new Demo(2015);
- };
- $this->assertEquals($this->coreDI->getName3()->mark, 2015);
- }
-
- public function testLazyLoadClass()
- {
- $this->coreDI->setName('Demo2');
- $this->assertEquals($this->coreDI->name instanceof Demo2, true);
- $this->assertEquals($this->coreDI->name->number, 3);
- $this->assertEquals($this->coreDI->name->number, 3);
- $this->coreDI->name->number = 9;
- $this->assertEquals($this->coreDI->name->number, 9);
- $this->assertEquals($this->coreDI->getName()->number, 9);
- }
-
- public function testArrayIndex()
- {
- $this->coreDI['name'] = 'dogstar';
- $this->assertEquals($this->coreDI->name, 'dogstar');
-
- $this->coreDI[2014] = 'horse';
- $this->assertEquals($this->coreDI->get2014(), 'horse');
- $this->assertEquals($this->coreDI[2014], 'horse');
- $this->assertEquals($this->coreDI->get(2014), 'horse');
- }
-
- /**
- * hope nobody use DI as bellow
- */
- public function testException()
- {
- try {
- $this->coreDI[array(1)] = 1;
- $this->fail('no way');
- } catch (Exception $ex) {
- }
-
- try {
- $this->coreDI->set(array(1), array(1));
- $this->fail('no way');
- } catch (Exception $ex) {
- }
-
- try {
- $this->coreDI->get(array(1), array(1));
- $this->fail('no way');
- } catch (Exception $ex) {
- }
- }
-
- public function testSetAgainAndAgain()
- {
- $this->coreDI['name'] = function () {
- return 'dogstar';
- };
- $this->assertEquals('dogstar', $this->coreDI['name']);
-
- $this->coreDI['name'] = 'dogstar2';
- $this->assertEquals('dogstar2', $this->coreDI['name']);
-
- $this->coreDI['name'] = function () {
- return 'dogstar3';
- };
- $this->assertEquals('dogstar3', $this->coreDI['name']);
-
- $this->coreDI['name'] = 'dogstar4';
- $this->assertEquals('dogstar4', $this->coreDI['name']);
-
- $this->coreDI['name'] = 'dogstar5';
- $this->assertEquals('dogstar5', $this->coreDI['name']);
-
- }
-
- public function testSetAgainAndAgainByProperty()
- {
- $this->coreDI->name = 'name';
- $this->assertSame('name', $this->coreDI->name);
-
- $this->coreDI->name = 'name2';
- $this->assertSame('name2', $this->coreDI->name);
-
- $this->coreDI->name = array('name3');
- $this->assertSame(array('name3'), $this->coreDI->name);
- }
-
- public function testSetAgainAndAgainBySetter()
- {
- $this->coreDI->set('name', 'value');
- $this->assertSame('value', $this->coreDI->name);
-
- $this->coreDI->set('name', 'value2');
- $this->assertSame('value2', $this->coreDI->name);
- }
-
- public function testSetAgainAndAgainByMagic()
- {
- $this->coreDI->setName('value');
- $this->assertSame('value', $this->coreDI->name);
-
- $this->coreDI->setName('value2');
- $this->assertSame('value2', $this->coreDI->name);
- }
-
- public function testGetAgainAndAgain()
- {
- $times = 0;
-
- $this->coreDI['name'] = function () use (&$times) {
- $times ++;
- return 'dogstar';
- };
-
- $this->assertEquals('dogstar', $this->coreDI['name']);
- $this->assertEquals('dogstar', $this->coreDI['name']);
- $this->assertEquals('dogstar', $this->coreDI['name']);
- $this->assertEquals('dogstar', $this->coreDI['name']);
-
- $this->assertEquals(1, $times);
- }
-
- public function testNumericKey()
- {
- $this->coreDI[0] = 0;
- $this->coreDI[1] = 10;
- $this->coreDI[2] = 20;
-
- $this->assertSame(0, $this->coreDI[0]);
- $this->assertSame(0, $this->coreDI->get(0));
- $this->assertSame(0, $this->coreDI->get0());
-
- $this->assertSame(10, $this->coreDI[1]);
- $this->assertSame(20, $this->coreDI->get(2));
- $this->assertSame(20, $this->coreDI->get2());
- }
-
- public function testMultiLevel()
- {
- $this->coreDI->dogstar = new PhalApi_DI();
- $this->coreDI->dogstar->name = "dogstar";
- $this->coreDI->dogstar->age = "?";
- $this->coreDI->dogstar->id = 1;
-
- $this->assertSame('dogstar', $this->coreDI->dogstar->name);
- $this->assertSame('?', $this->coreDI->dogstar->age);
- $this->assertSame(1, $this->coreDI->dogstar->id = 1);
- }
-
- public function testWithClassName()
- {
- $this->coreDI->key = 'PhalApi_DI';
- $this->assertInstanceOf('PhalApi_DI', $this->coreDI->key);
- }
-
- public function testArrayUsage()
- {
- $this->coreDI[0] = 0;
- $this->coreDI[1] = 1;
- $this->coreDI[2] = 2;
-
- foreach ($this->coreDI as $key => $value) {
- $this->assertSame($key, $value);
- }
- }
-
- /**
- * @expectedException Exception
- */
- public function testIllegalMethod()
- {
- $this->coreDI->doSomeThingWrong();
- }
-
- public function testMultiSet()
- {
- $this->coreDI->set('key1', 'value1')
- ->set('key2', 'value2')
- ->set('key2', 'value2')
- ->set('key3', 'value3');
-
- $this->coreDI->setKey4('value4')
- ->setKey5('value5')
- ->setkey6('value6');
-
- $this->assertSame('value2', $this->coreDI->key2);
- $this->assertSame('value6', $this->coreDI['key6']);
- }
-
- public function testOneWithInstanceNull()
- {
- $oldInstance = PhalApi_DI_Mock::getInstance();
-
- PhalApi_DI_Mock::setInstance(null);
- $newDI = PhalApi_DI::one();
-
- if (!isset($newDI['tmp'])) {
- $newDI['tmp'] = '2015';
-
- $this->assertEquals('2015', $newDI['tmp']);
- unset($newDI['tmp']);
- }
-
- $this->assertEquals(null, $newDI['tmp']);
-
- PhalApi_DI_Mock::setInstance($oldInstance);
- }
- }
-
- class Demo
- {
- public $hasConstruct = false;
- public $hasInitialized = false;
-
- public $mark = null;
-
- public function __construct($mark)
- {
- //echo "Demo::__construct()\n";
-
- $this->mark = $mark;
- }
-
- public function onConstruct()
- {
- $this->hasConstruct = true;
- //echo "Demo::onConstruct()\n";
- }
-
- public function onInitialize()
- {
- $this->hasInitialize = true;
- //echo "Demo:: onInitialize()\n";
- }
- }
-
-
- class Demo2 extends Demo
- {
- public $number = 1;
-
- public function __construct()
- {
- //echo "Demo2::__construct()\n";
- }
-
- public function onConstruct()
- {
- //echo "Demo2::onConstruct()\n";
- $this->number = 2;
- parent::onConstruct();
- }
-
- public function onInitialize()
- {
- //echo "Demo2::onInitialize()\n";
- $this->number = 3;
- parent::onInitialize();
- }
-
- public function onInit()
- {
- $this->onInitialize();
- }
- }
-
- class PhalApi_DI_Mock extends PhalApi_DI {
-
- public static function getInstance(){
- return PhalApi_DI::$instance;
- }
-
- public static function setInstance($instance) {
- PhalApi_DI::$instance = $instance;
- }
- }
|