| 
<?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());
 }
 }
 
 
 |