public function testPreInjectedDependency()
 {
     $injector = new Phemto();
     $wrap = new WrapAnything(new Thing());
     $injector->willUse($wrap);
     $anything = $injector->create('phemto\\acceptance\\WrapAnything');
     $this->assertEquals($wrap, $anything);
 }
 public function testDetermineImplementationFromTopContext()
 {
     $injector = new Phemto();
     $injector->willUse(new Reused(Preference::class));
     $injector->whenCreating(HasDependency::class)->forVariable('dependency')->willUse(Preference::class);
     $object = $injector->create(HasDependency::class);
     $this->assertSame(spl_object_hash($object->dependency), spl_object_hash($injector->create(Preference::class)));
 }
 function testCanOverridePreferenceWhenInstantiatingFromAnInterface()
 {
     $injector = new Phemto();
     $injector->whenCreating('phemto\\acceptance\\SpecialInterface')->willUse('phemto\\acceptance\\SpecialImplementation');
     $injector->willUse('phemto\\acceptance\\UsualImplementation');
     $special = $injector->create('phemto\\acceptance\\SpecialInterface');
     $this->assertEquals($special, new ClassWithSpecial(new SpecialImplementation()));
 }
 public function testSameInstanceCanBeReusedWithinFactoryDependingOnObjectParam()
 {
     $injector = new Phemto();
     $injector->willUse(new ReusedByParam(CreateMeOnceByObjectParam::class, 'dependency'));
     $dependency = new SomeDependency();
     $object1 = $injector->create(CreateMeOnceByObjectParam::class, $dependency);
     $object2 = $injector->create(CreateMeOnceByObjectParam::class, $dependency);
     $object3 = $injector->create(CreateMeOnceByObjectParam::class, new SomeDependency());
     $this->assertSame($object1, $object2);
     $this->assertNotSame($object1, $object3);
 }
 function testCanBeConfiguredToPreferSpecificImplementation()
 {
     $injector = new Phemto();
     $injector->willUse('phemto\\acceptance\\SecondImplementation');
     $this->assertInstanceOf('phemto\\acceptance\\SecondImplementation', $injector->create('phemto\\acceptance\\InterfaceWithManyImplementations'));
 }
Esempio n. 6
0
<?php

use phemto\Phemto;
require_once __DIR__ . '/../vendor/autoload.php';
$di = new Phemto();
class Config
{
    public $bar = 'asdf';
}
// Would be done during startup once we resolve which config to load.
$di->willUse('Config');
class Database
{
    public function __construct(Config $config)
    {
        $this->config = $config;
    }
}
$di->willUse('Database');
var_dump($di->create('Database'));
 function testSameInstanceCanBeReusedWithinFactory()
 {
     $injector = new Phemto();
     $injector->willUse(new Reused('phemto\\acceptance\\CreateMeOnce'));
     $this->assertSame($injector->create('phemto\\acceptance\\CreateMeOnce'), $injector->create('phemto\\acceptance\\CreateMeOnce'));
 }
 function testCanBeConfiguredToPreferSpecificSubclass()
 {
     $injector = new Phemto();
     $injector->willUse('phemto\\acceptance\\SecondSubclass');
     $this->assertInstanceOf('phemto\\acceptance\\SecondSubclass', $injector->create('phemto\\acceptance\\ClassWithManySubclasses'));
 }
 function testSameInstanceFromSessionWithinSameProcess()
 {
     $injector = new Phemto();
     $injector->willUse(new Sessionable('phemto\\acceptance\\SerialiseMe'));
     $this->assertSame($injector->create('phemto\\acceptance\\SerialiseMe'), $injector->create('phemto\\acceptance\\SerialiseMe'));
 }
Esempio n. 10
0
 public function testInstantiateBySetters()
 {
     $injector = new Phemto();
     $injector->forType(WithSetter::class)->call('setDependency');
     $injector->willUse(new Graph(WithSetter::class, 'graph1'));
     $injector->whenCreating(SecondClass::class, 'graph1')->forVariable('property')->useString('second value for graph1');
     $object1 = $injector->createGraph(WithSetter::class, 'graph1');
     $this->assertEquals('second value for graph1', $object1->dependency->property);
 }