createNoOpMock( Parser::class, [ 'setHook' ] ); $expectedTags = [ 'ref' => true, 'references' => true ]; $parser->expects( $this->exactly( 2 ) ) ->method( 'setHook' ) ->willReturnCallback( function ( $tag ) use ( &$expectedTags ) { $this->assertArrayHasKey( $tag, $expectedTags ); unset( $expectedTags[$tag] ); } ); $citeParserHooks = new CiteParserHooks(); $citeParserHooks->onParserFirstCallInit( $parser ); } /** * @covers ::onParserClearState */ public function testOnParserClearState() { $parser = $this->createParser(); $parser->extCite = $this->createMock( Cite::class ); $citeParserHooks = new CiteParserHooks(); $citeParserHooks->onParserClearState( $parser ); $this->assertFalse( isset( $parser->extCite ) ); } /** * @covers ::onParserCloned */ public function testOnParserCloned() { $parser = $this->createParser(); $parser->extCite = $this->createMock( Cite::class ); $citeParserHooks = new CiteParserHooks(); $citeParserHooks->onParserCloned( $parser ); $this->assertFalse( isset( $parser->extCite ) ); } /** * @covers ::onParserAfterParse */ public function testAfterParseHooks() { $cite = $this->createMock( Cite::class ); $cite->expects( $this->once() ) ->method( 'checkRefsNoReferences' ); $parserOptions = $this->createMock( ParserOptions::class ); $parserOptions->method( 'getIsSectionPreview' ) ->willReturn( false ); $parser = $this->createParser( [ 'getOptions', 'getOutput' ] ); $parser->method( 'getOptions' ) ->willReturn( $parserOptions ); $parser->method( 'getOutput' ) ->willReturn( $this->createMock( ParserOutput::class ) ); $parser->extCite = $cite; $text = ''; $citeParserHooks = new CiteParserHooks(); $citeParserHooks->onParserAfterParse( $parser, $text, $this->createMock( StripState::class ) ); } /** * @param array $configurableMethods * @return Parser */ private function createParser( $configurableMethods = [] ) { return $this->getMockBuilder( Parser::class ) ->disableOriginalConstructor() ->onlyMethods( $configurableMethods ) ->getMock(); } }