testEnvironment = new TestEnvironment( [ 'smwgBrowseFeatures' => SMW_BROWSE_SHOW_INCOMING | SMW_BROWSE_USE_API ] ); $store = $this->getMockBuilder( '\SMW\Store' ) ->disableOriginalConstructor() ->getMockForAbstractClass(); $store->expects( $this->any() ) ->method( 'getPropertySubjects' ) ->willReturn( [] ); $this->testEnvironment->registerObject( 'Store', $store ); $this->stringValidator = $this->testEnvironment->getUtilityFactory()->newValidatorFactory()->newStringValidator(); } protected function tearDown(): void { $this->testEnvironment->tearDown(); parent::tearDown(); } /** * @dataProvider queryParameterProvider */ public function testQueryParameter( $query, $expected ) { $instance = new SpecialBrowse(); $services = MediaWikiServices::getInstance(); $instance->getContext()->setTitle( $services->getTitleFactory()->newFromText( 'SpecialBrowse' ) ); $languageFactory = $services->getLanguageFactory(); $instance->getContext()->setLanguage( $languageFactory->getLanguage( 'en' ) ); $instance->execute( $query ); $this->stringValidator->assertThatStringContains( $expected, $instance->getOutput()->getHtml() ); } public function queryParameterProvider() { # 0 $provider[] = [ '', [ 'smw-error-browse' ] ]; # 1 $provider[] = [ ':Has-20foo/http:-2F-2Fexample.org-2Fid-2FCurly-2520Brackets-257B-257D', [ 'smw-error-browse' ] ]; # 2 $provider[] = [ 'Foo/Bar', [ 'data-mw-smw-browse-subject="{"dbkey":"Foo\/Bar","ns":0,"iw":"","subobject":""}"', 'data-mw-smw-browse-options="{"dir":null,"lang":"en","group":null,"printable":null,"offset":null,"including":null,"showInverse":false,"showAll":true,"showGroup":false,"showSort":false,"api":true,"valuelistlimit.out":"30","valuelistlimit.in":"20"}"' ] ]; # 3 $provider[] = [ ':Main-20Page-23_QUERY140d50d705e9566904fc4a877c755964', [ 'data-mw-smw-browse-subject="{"dbkey":"Main_Page","ns":0,"iw":"","subobject":"_QUERY140d50d705e9566904fc4a877c755964"}"', 'data-mw-smw-browse-options="{"dir":null,"lang":"en","group":null,"printable":null,"offset":null,"including":null,"showInverse":false,"showAll":true,"showGroup":false,"showSort":false,"api":true,"valuelistlimit.out":"30","valuelistlimit.in":"20"}"' ] ]; return $provider; } }