pastebin

Paste Search Dynamic
Recent pastes
ContainerBuilder basic
  1. <?php
  2.  
  3. /**
  4.  * Test: NetteDIContainerBuilder code generator.
  5.  *
  6.  * @author     David Grudl
  7.  * @package    NetteDI
  8.  * @subpackage UnitTests
  9.  */
  10.  
  11. use NetteDI;
  12.  
  13.  
  14.  
  15. require __DIR__ . '/../bootstrap.php';
  16.  
  17.  
  18.  
  19. class Service
  20. {
  21.         public $args;
  22.         public $methods;
  23.  
  24.         static function create(DIIContainer $container = null)
  25.         {
  26.                 $args = func_get_args();
  27.                 unset($args[0]);
  28.                 return new self($args);
  29.         }
  30.  
  31.         function __construct()
  32.         {
  33.                 $this->args = func_get_args();
  34.         }
  35.  
  36.         function __call($nm, $args)
  37.         {
  38.                 $this->methods[] = array($nm, $args);
  39.         }
  40.  
  41. }
  42.  
  43.  
  44.  
  45. $builder = new DIContainerBuilder;
  46. $builder->addDefinition('one')
  47.         ->setClass('Service');
  48. $builder->addDefinition('three')
  49.         ->setClass('Service', array('a', 'b'));
  50.  
  51. $builder->addDefinition('four')
  52.         ->setClass('Service', array('a', 'b'))
  53.         ->addSetup('methodA', array('a', 'b'))
  54.         ->addSetup('@four::methodB', array(1, 2));
  55.  
  56. $builder->addDefinition('five', null)
  57.         ->setFactory('Service::create');
  58.  
  59. $six = $builder->addDefinition('six')
  60.         ->setFactory('Service::create', array('@container', 'a', 'b'))
  61.         ->addSetup(array('@six', 'methodA'), array('a', 'b'));
  62.  
  63. $builder->addDefinition('seven')
  64.         ->setFactory(array($six, 'create'), array($builder, $six))
  65.         ->addSetup(array($six, 'methodA'));
  66.  
  67. $code = (string) $builder->generateClass();
  68. file_put_contents(TEMP_DIR . '/code.php', "<?phpn$code");
  69. require TEMP_DIR . '/code.php';
  70.  
  71. $container = new Container;
  72.  
  73.  
  74. assert::true( $container->getService('one') instanceof Service );
  75.  
  76. assert::same( array(), $container->getService('one')->args );
  77. assert::same( null, $container->getService('one')->methods );
  78.  
  79. assert::true( $container->getService('three') instanceof Service );
  80. assert::same( array('a', 'b'), $container->getService('three')->args );
  81. assert::same( null, $container->getService('three')->methods );
  82.  
  83. assert::true( $container->getService('four') instanceof Service );
  84. assert::same( array('a', 'b'), $container->getService('four')->args );
  85. assert::same( array(
  86.         array('methodA', array('a', 'b')),
  87.         array('methodB', array(1, 2)),
  88. ), $container->getService('four')->methods );
  89.  
  90. assert::true( $container->getService('five') instanceof Service );
  91. assert::same( array(array()), $container->getService('five')->args );
  92. assert::same( null, $container->getService('five')->methods );
  93.  
  94. assert::true( $container->getService('six') instanceof Service );
  95. assert::same( array(array(1 => 'a', 'b')), $container->getService('six')->args );
  96. assert::same( array(
  97.         array('methodA', array('a', 'b')),
  98. ), $container->getService('six')->methods );
  99.  
  100. assert::true( $container->getService('seven') instanceof Service );
  101. assert::same( array(array(1 => $container->getService('six'))), $container->getService('seven')->args );
  102. assert::same( array(
  103.         array('methodA', array('a', 'b')),
  104.         array('methodA', array()),
  105. ), $container->getService('six')->methods );
Parsed in 0.286 seconds