/** * Tests creating the mocks * @param array $options * @return void * * @dataProvider mockProvider */ public function testMock(array $options) { $definition = new Definition($options); $this->assertEquals($options['id'], $definition->getId()); $this->assertEquals($options['class'], $definition->getClass()); $this->assertSame($options['parameters'], $definition->getParameters()); $this->assertSame($options['shared'], $definition->isShared()); $instance = $definition->getInstance(); $this->assertInstanceOf($options['class'], $instance); $count = call_user_func(array($options['class'], 'getInstanceCount')); $instance = $definition(); // check that definition is invokable $this->assertInstanceOf($options['class'], $instance); $this->assertSame($options['parameters'], $instance->getParameters()); $newCount = call_user_func(array($options['class'], 'getInstanceCount')); if ($options['shared']) { $this->assertEquals($count, $newCount, 'New instance of class was created when meant to be shared'); } else { $this->assertGreaterThan($count, $newCount, 'No new instance of class was created when not meant to be shared'); if (!empty($options['parameters'])) { $this->setExpectedException('Nimbles\\Core\\Container\\Exception\\CreateInstanceFailure'); $definition->setParameters(array()); $instance = $definition(); } } }