indicatorProvider = $this->getMockBuilder( '\SMW\Indicator\IndicatorProvider' ) ->disableOriginalConstructor() ->getMock(); $this->permissionExaminer = $this->getMockBuilder( '\SMW\MediaWiki\Permission\PermissionExaminer' ) ->disableOriginalConstructor() ->getMock(); } public function testCanConstruct() { $this->assertInstanceOf( IndicatorRegistry::class, new IndicatorRegistry() ); } public function testAddIndicatorProvider() { $title = $this->getMockBuilder( '\MediaWiki\Title\Title' ) ->disableOriginalConstructor() ->getMock(); $title->expects( $this->once() ) ->method( 'getNamespace' ) ->willReturn( NS_MAIN ); $this->indicatorProvider->expects( $this->once() ) ->method( 'hasIndicator' ) ->willReturn( true ); $this->indicatorProvider->expects( $this->once() ) ->method( 'getIndicators' ) ->willReturn( [] ); $this->indicatorProvider->expects( $this->once() ) ->method( 'getModules' ) ->willReturn( [] ); $instance = new IndicatorRegistry(); $instance->addIndicatorProvider( $this->indicatorProvider ); $instance->hasIndicator( $title, $this->permissionExaminer, [] ); } public function testAttachIndicators() { $outputPage = $this->getMockBuilder( '\MediaWiki\Output\OutputPage' ) ->disableOriginalConstructor() ->getMock(); $outputPage->expects( $this->once() ) ->method( 'setIndicators' ); $instance = new IndicatorRegistry(); $instance->attachIndicators( $outputPage ); } public function testNoPermissionOnIndicatorProvider() { $title = $this->getMockBuilder( '\MediaWiki\Title\Title' ) ->disableOriginalConstructor() ->getMock(); $title->expects( $this->once() ) ->method( 'getNamespace' ) ->willReturn( NS_MAIN ); $this->permissionExaminer->expects( $this->once() ) ->method( 'hasPermissionOf' ) ->willReturn( false ); $instance = new IndicatorRegistry(); $instance->addIndicatorProvider( $this->newPermissionAwareIndicatorProvider() ); $instance->hasIndicator( $title, $this->permissionExaminer, [] ); } public function testPermissionAwareIndicatorProvider() { $title = $this->getMockBuilder( '\MediaWiki\Title\Title' ) ->disableOriginalConstructor() ->getMock(); $title->expects( $this->once() ) ->method( 'getNamespace' ) ->willReturn( NS_MAIN ); $this->permissionExaminer->expects( $this->once() ) ->method( 'hasPermissionOf' ) ->willReturn( false ); $instance = new IndicatorRegistry(); $instance->addIndicatorProvider( $this->newPermissionExaminerAwareIndicatorProvider() ); $instance->hasIndicator( $title, $this->permissionExaminer, [] ); } private function newPermissionAwareIndicatorProvider() { return new class() implements \SMW\Indicator\IndicatorProvider, \SMW\MediaWiki\Permission\PermissionAware { public function getName(): string { return ''; } public function getInlineStyle() { return ''; } public function hasIndicator( \SMW\DIWikiPage $subject, array $options ) { return false; } public function getModules() { return []; } public function getIndicators() { return []; } public function hasPermission( \SMW\MediaWiki\Permission\PermissionExaminer $permissionExaminer ): bool { return $permissionExaminer->hasPermissionOf( 'Foo' ); } }; } private function newPermissionExaminerAwareIndicatorProvider() { return new class() implements \SMW\Indicator\IndicatorProvider, \SMW\MediaWiki\Permission\PermissionExaminerAware { public function getName(): string { return ''; } public function getInlineStyle() { return ''; } public function hasIndicator( \SMW\DIWikiPage $subject, array $options ) { return false; } public function getModules() { return []; } public function getIndicators() { return []; } public function setPermissionExaminer( \SMW\MediaWiki\Permission\PermissionExaminer $permissionExaminer ) { // Just used as an example to check that the setter is run $permissionExaminer->hasPermissionOf( 'Foo' ); } }; } }