/** * */ function test_provide_with_merge() { $resolver = new Resolver(); $resolver->configure('foo', new Plugin(Model::class, ['a' => new Value('a'), 'b' => new Value('b')])); $config = new Plugin('foo', ['a' => new Value('a1')]); $this->assertEquals(new Model('a1', 'b', 'c'), $resolver->gem($config, ['c' => 'c'])); }
/** * */ function test_resolver_gem_with_plugin_name() { $resolver = new Resolver(); $resolver->configure('foo', Config::class); $plugin = $resolver->gem(new Scope('foo', [])); $this->assertInstanceOf(Config::class, $plugin); }
/** * */ function test_gem_filter() { $resolver = new Resolver(); $this->assertEquals('foo', $resolver->gem(new Filter('foo', [function ($foo) { return $foo; }]))); }
/** * */ function test_gem_copy() { $resolver = new Resolver(); $object = new \stdClass(); $copy = $resolver->gem(new Copy($object)); $this->assertEquals($object, $copy); $this->assertFalse($object === $copy); }
/** * */ function test_gem_factory() { $resolver = new Resolver(); $resolver->configure('bar', function () { return function () { return 'baz'; }; }); $resolver->configure('factory', new Plugin('bar')); $this->assertEquals('baz', $resolver->gem(new Factory('foo'))); }
/** * */ function test_gem_invokable_merge() { $resolver = new Resolver(); $invokable = new Invokable(new Call(new Invoke(function ($foo, $bar, $baz) { return $foo . $bar . $baz; })), ['s']); $callable = $resolver->gem($invokable); $this->assertEquals('foobars', $callable('foo', 'bar')); $this->assertEquals('foobars', call_user_func($callable, 'foo', 'bar')); $this->assertEquals('foobars', call_user_func_array($callable, ['foo', 'bar'])); $this->assertEquals('foobars', $resolver->call($callable, ['foo', 'bar'])); }
/** * */ function test_gem_shared_null() { $resolver = new Resolver(); $this->assertEquals(null, $resolver->gem(new Shared('foo', new Args(null)))); $this->assertTrue(false === $resolver->has('foo')); }
/** * */ function test_gem_args() { $resolver = new Resolver(); $this->assertEquals(['foo' => new Config()], $resolver->gem(new Args(['foo' => new Plugin(Config::class)]))); }
/** * */ function test_end() { $resolver = new Resolver(); $plugin = new End(new Call('@phpversion'), new Plugin(Config::class, [['foo' => 'bar']])); $this->assertEquals(new Config(['foo' => 'bar']), $resolver->gem($plugin)); }
/** * */ function test_gem_file_include() { $resolver = new Resolver(); $plugin = new FileInclude(__DIR__ . '/../Model/config.inc.php'); $this->assertEquals(['foo' => 'bar'], $resolver->gem($plugin)); }
/** * */ function test_gem_call_not_named() { $resolver = new Resolver(); $call = new Call(CallObject::class, ['bar']); $this->assertEquals('foo', $resolver->gem($call, ['foo'])); }
/** * */ function test_gem_calls() { $resolver = new Resolver(); $this->assertEquals(new Config(['foo' => 'bar']), $resolver->gem(new Calls(new Plugin(Config::class), ['#foo' => 'bar']))); }
/** * */ function test_gem_value() { $resolver = new Resolver(); $this->assertEquals('foo', $resolver->gem(new Value('foo'))); }
/** * */ function test_gem_plug() { $resolver = new Resolver(); $resolver->configure('foo', 'bar'); $this->assertEquals('bar', $resolver->gem(new Plug('foo'))); }
/** * */ function test_gem_config() { $resolver = new Resolver(); $resolver->config(['foo' => 'bar']); $this->assertEquals(['foo' => 'bar'], $resolver->gem(new Config())); }
/** * */ function test_gem_param() { $resolver = new Resolver(); $resolver->config(['foo' => 'bar']); $this->assertEquals('bar', $resolver->gem(new Param('foo'))); }
/** * */ function test_gem_child() { $resolver = new Resolver(); $resolver->configure('bar', new Plugin(Config::class)); $this->assertInstanceOf(Config::class, $resolver->gem(new Child('foo', 'bar'))); }
/** * */ function test_gem_unresolvable() { $resolver = new Resolver(); $this->setExpectedException(RuntimeException::class); $resolver->gem(new Unresolvable()); }
/** * */ function test_gem_provide_no_provider() { $resolver = new Resolver(); $this->setExpectedException(\RuntimeException::class, 'Unresolvable plugin: bar'); $resolver->gem(new Provide('bar')); }