diff --git a/tests/src/Core/Extension/ModuleHandlerTraitTest.php b/tests/src/Core/Extension/ModuleHandlerTraitTest.php new file mode 100644 index 0000000..f166153 --- /dev/null +++ b/tests/src/Core/Extension/ModuleHandlerTraitTest.php @@ -0,0 +1,71 @@ +mockContainerWithFakeService(['calls' => 1]); + $this->assertsame($service, $this->getModuleHandler()); + // Multiple calls should fetch the service from the container only once. + $this->getModuleHandler(); + } + + /** + * @covers ::setModuleHandler + */ + public function testSetter() { + // Verify the set service is returned. + $this->mockContainerWithFakeService(['calls' => 0]); + $service = $this->prophesize() + ->willImplement(ModuleHandlerInterface::class) + ->reveal(); + /** @var \Drupal\Core\Extension\ModuleHandlerInterface $service */ + $this->setModuleHandler($service); + $this->assertsame($service, $this->getModuleHandler()); + } + + /** + * Helper to mock the container with a stub service. + * + * @param int[] $options + * An array with the following keys: + * - calls: The number of calls to get the service the mocked container + * expects. + * + * @return object + * The fake service returned by the container. + */ + protected function mockContainerWithFakeService(array $options) { + $service = new \Stdclass(); + $container = $this->prophesize(Container::class); + $prophecy = $container->get($this->serviceId); + /** @var \Prophecy\Prophecy\MethodProphecy $prophecy */ + $prophecy->shouldBeCalledTimes($options['calls']); + $prophecy->willReturn($service); + \Drupal::setContainer($container->reveal()); + return $service; + } + +}