validator = $this->getSignatureValidator(); } /** * Get a basic SignatureValidator for testing with. */ protected function getSignatureValidator() { $lang = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' ); $user = User::newFromName( 'SignatureValidatorTest' ); $validator = new SignatureValidator( $user, null, ParserOptions::newFromUserAndLang( $user, $lang ) ); return TestingAccessWrapper::newFromObject( $validator ); } /** * @covers MediaWiki\Preferences\SignatureValidator::applyPreSaveTransform() * @dataProvider provideApplyPreSaveTransform */ public function testApplyPreSaveTransform( $signature, $expected ) { $pstSig = $this->validator->applyPreSaveTransform( $signature ); $this->assertSame( $expected, $pstSig ); } public function provideApplyPreSaveTransform() { return [ 'Pipe trick' => [ '[[test|]]', '[[test|test]]' ], 'One level substitution' => [ '{{subst:uc:whatever}}', 'WHATEVER' ], 'Hidden nested substitution' => [ '{{subst:uc:{}}{{subst:uc:{subst:uc:}}}{{subst:uc:}}}', false ], 'Hidden nested signature' => [ '{{subst:uc:~~}}{{subst:uc:~~}}', false ], ]; } /** * @covers MediaWiki\Preferences\SignatureValidator::checkUserLinks() * @dataProvider provideCheckUserLinks */ public function testCheckUserLinks( $signature, $expected ) { $isValid = $this->validator->checkUserLinks( $signature ); $this->assertSame( $expected, $isValid ); } public function provideCheckUserLinks() { return [ 'Perfect' => [ '[[User:SignatureValidatorTest|Signature]] ([[User talk:SignatureValidatorTest|talk]])', true ], 'User link' => [ '[[User:SignatureValidatorTest|Signature]]', true ], 'User talk link' => [ '[[User talk:SignatureValidatorTest]]', true ], 'Contributions link' => [ '[[Special:Contributions/SignatureValidatorTest]]', true ], 'Silly formatting permitted' => [ '[[_uSeR :_signatureValidatorTest_]]', true ], 'Contributions of wrong user' => [ '[[Special:Contributions/SignatureValidatorTestNot]]', false ], 'Link to subpage only' => [ '[[User:SignatureValidatorTest/blah|Signature]]', false ], ]; } }