<?php
require_once __dir__ . '/DiLioc.php';
require_once __dir__ . '/Test.php';
require_once __dir__ . '/TestClass2.php';
require_once __dir__ . '/otherClass.php';
require_once __dir__ . '/DependencyInjection.php';
/**
* DiLiocTest
*
* @group group
*/
class DiLiocTest extends \PHPUnit_Framework_TestCase
{
public function setUp()
{
$this->DiLioc = new DiLioc;
}
public function testClosureBindingAndMake()
{
$this->DiLioc->bind('Test1',function($a,$b,$c){
$Test1 = new Test('Wiki');
$Test1->sum($a,$b,$c);
return $Test1;
},1,2,3);
$this->assertEquals("I'm Wiki", $this->DiLioc->make('Test1')->out());
$this->assertEquals(6,$this->DiLioc->make('Test1')->getSum());
$DiLioc = $this->DiLioc;
$this->DiLioc->bind('Test2',function() use($DiLioc){
$DiLioc->make('Test1')->getSum();
return new Test('Pai');
});
$this->assertEquals("I'm Pai", $this->DiLioc->make('Test2')->out());
}
/**
* @covers class::DependencyInjection()
*/
public function testDependencyInjection()
{
$this->DiLioc->bind('Test3','Test',new DependencyInjection);
$this->assertEquals("I'm Dependency Injection", $this->DiLioc->make('Test3')->out());
}
public function testMoreDependencyInjection()
{
$this->testClosureBindingAndMake();
$this->DiLioc->bind('Test4','Test',new DependencyInjection, $this->DiLioc->make('Test1'));
$this->assertEquals("I'm Dependency Injection and I'm Wiki", $this->DiLioc->make('Test4')->out());
$this->DiLioc->bind('Tests4','TestClass2',new DependencyInjection, $this->DiLioc->make('Test1'), $this->DiLioc->make('Test2'));
$this->assertEquals("I'm Dependency Injection and Wiki and Pai", $this->DiLioc->make('Tests4')->out());
}
public function testAutoDependencyInjection()
{
$this->DiLioc->bind('Test5','TestClass3');
$this->assertEquals("from TestClass3 calling TestClass I am from TestClass", $this->DiLioc->make('Test5')->out());
$this->DiLioc->bind('Test6','TestClass5');
$this->assertEquals("I am from TestClass5", $this->DiLioc->make('Test6')->out());
$this->DiLioc->bind('TestClass2','TestClass2','A','B','C'); //binded for purpose auto dependency injection in TestClass4 2nd arguement
$this->DiLioc->bind('Test7','TestClass4');
$this->assertEquals("I am from TestClass and from TestClass2 I'm A and B and C", $this->DiLioc->make('Test7')->out());
}
/**
* @covers class::BindKeySameNameAsClassName()
*/
public function testBindKeySameNameAsClassName()
{
$this->DiLioc->bind('TestClass2','TestClass2','A','B','C');
$this->assertEquals("I'm A and B and C", $this->DiLioc->make('TestClass2')->out());
}
public function testBindKeyWithMakeClassByIOC()
{
$this->DiLioc->bind('TestClass2','TestClass2','1','2','3');
$this->DiLioc->bind('TestTest',$this->DiLioc->make('TestClass2'));
$this->assertEquals("I'm 1 and 2 and 3", $this->DiLioc->make('TestTest')->out());
}
public function testBindKeyWithBindedKey()
{
$this->markTestIncomplete('Not yet implemented');
$this->DiLioc->bind('TestClass2','TestClass2','1','2','3');
$this->DiLioc->bind('TestTest','TestClass2');
$this->assertEquals("I'm 1 and 2 and 3", $this->DiLioc->make('TestTest')->out());
}
}
|