public function testParameter() { // register parameter $this->instance->parameter('type', function () { }); // register parameter with invalid type try { $this->instance->parameter([], function () { }); $this->fail(); } catch (InvalidArgumentException $e) { } // register invalid parameter try { $this->instance->parameter('type', 'invalid'); $this->fail(); } catch (ErrorException $e) { } // with app as parameter $tmp = ''; $this->instance->get('/bla', function (\Hahns\Hahns $app) use(&$tmp) { $tmp = $app; }); $this->instance->run('/bla', 'get'); $this->assertInstanceOf('\\Hahns\\Hahns', $tmp); // register parameter as singleton (default) $hahns = new \Hahns\Hahns(); $hahns->parameter('\\IsSingleton', function () { return new IsSingleton(); }); // regiser parameter as non-singleton $hahns->parameter('\\IsNotSingleton', function () { return new IsNotSingleton(); }, false); // test singleton parameter $tmp = ''; $hahns->get('/singleton', function (IsSingleton $p) use($tmp) { $tmp = $p->test; }); $hahns->run('/singleton', 'get'); $test = $tmp; $hahns->run('/singleton', 'get'); $this->assertEquals($test, $tmp); // test non-singleton parameter $tmp = ''; $hahns->get('/is/not/singleton', function (IsNotSingleton $p) use(&$tmp) { $tmp = $p->test; }); $hahns->run('/is/not/singleton', 'get'); $test = $tmp; $hahns->run('/is/not/singleton', 'get'); $this->assertNotEquals($test, $tmp); }