setMwGlobals( [ 'wgLanguageCode' => 'qqx', ] ); } /** * @covers ::checkRefsNoReferences * @dataProvider provideCheckRefsNoReferences */ public function testCheckRefsNoReferences( array $initialRefs, bool $isSectionPreview, string $expectedOutput ) { global $wgCiteResponsiveReferences; $wgCiteResponsiveReferences = true; $mockErrorReporter = $this->createMock( ErrorReporter::class ); $mockErrorReporter->method( 'halfParsed' )->willReturnCallback( static function ( $parser, ...$args ) { return '(' . implode( '|', $args ) . ')'; } ); $referenceStack = new ReferenceStack( $mockErrorReporter ); TestingAccessWrapper::newFromObject( $referenceStack )->refs = $initialRefs; $referencesFormatter = $this->createMock( ReferencesFormatter::class ); $referencesFormatter->method( 'formatReferences' )->willReturn( '' ); $cite = $this->newCite(); /** @var Cite $spy */ $spy = TestingAccessWrapper::newFromObject( $cite ); $spy->referenceStack = $referenceStack; $spy->errorReporter = $mockErrorReporter; $spy->referencesFormatter = $referencesFormatter; $spy->isSectionPreview = $isSectionPreview; $parser = $this->createNoOpMock( Parser::class ); $output = $cite->checkRefsNoReferences( $parser, $isSectionPreview ); $this->assertSame( $expectedOutput, $output ); } public static function provideCheckRefsNoReferences() { return [ 'Default group' => [ [ '' => [ [ 'name' => 'a' ] ] ], false, "\n" ], 'Default group in preview' => [ [ '' => [ [ 'name' => 'a' ] ] ], true, "\n" . '
' . '

' . '(cite_section_preview_references)

' ], 'Named group' => [ [ 'foo' => [ [ 'name' => 'a' ] ] ], false, "\n" . '
(cite_error_group_refs_without_references|foo)' ], 'Named group in preview' => [ [ 'foo' => [ [ 'name' => 'a' ] ] ], true, "\n" . '
' . '

' . '(cite_section_preview_references)

' ] ]; } private function newCite(): Cite { $language = $this->createNoOpMock( Language::class ); $mockOptions = $this->createMock( ParserOptions::class ); $mockOptions->method( 'getIsPreview' )->willReturn( false ); $mockOptions->method( 'getIsSectionPreview' )->willReturn( false ); $mockParser = $this->createNoOpMock( Parser::class, [ 'getOptions', 'getContentLanguage' ] ); $mockParser->method( 'getOptions' )->willReturn( $mockOptions ); $mockParser->method( 'getContentLanguage' )->willReturn( $language ); return new Cite( $mockParser ); } }