ExpirationAwareness::TTL_INDEFINITE, ] ); $configFactory = $this->createMock( ConfigFactory::class ); $configFactory->method( 'makeConfig' ) ->with( 'textextracts' ) ->willReturn( $config ); $cache = new \WANObjectCache( [ 'cache' => new \HashBagOStuff() ] ); $context = $this->createMock( IContextSource::class ); $context->method( 'getConfig' ) ->willReturn( $config ); $context->method( 'msg' ) ->willReturnCallback( function ( $key, ...$params ) { $msg = $this->createMock( Message::class ); $msg->method( 'text' )->willReturn( "($key)" ); return $msg; } ); $main = $this->createMock( \ApiMain::class ); $main->expects( $this->once() ) ->method( 'getContext' ) ->willReturn( $context ); $query = $this->createMock( \ApiQuery::class ); $query->expects( $this->once() ) ->method( 'getMain' ) ->willReturn( $main ); $langConv = $this->createMock( ILanguageConverter::class ); $langConv->method( 'getPreferredVariant' ) ->willReturn( 'en' ); $langConvFactory = $this->createMock( LanguageConverterFactory::class ); $langConvFactory->method( 'getLanguageConverter' ) ->willReturn( $langConv ); return new ApiQueryExtracts( $query, '', $configFactory, $cache, $langConvFactory, $this->getServiceContainer()->getWikiPageFactory(), $this->getServiceContainer()->getTitleFormatter() ); } public function testMemCacheHelpers() { $title = $this->createMock( Title::class ); $title->method( 'getPageLanguage' ) ->willReturn( $this->createMock( \Language::class ) ); $page = $this->createMock( \WikiPage::class ); $page->method( 'getTitle' ) ->willReturn( $title ); $page->method( 'getId' ) ->willReturn( 123 ); $page->method( 'getTouched' ) ->willReturn( '20010101000000' ); $text = 'Text to cache'; /** @var ApiQueryExtracts $instance */ $instance = TestingAccessWrapper::newFromObject( $this->newInstance() ); // Default param values for this API module $instance->params = [ 'intro' => false, 'plaintext' => false ]; $this->assertFalse( $instance->getFromCache( $page, false ), 'is not cached yet' ); $instance->setCache( $page, $text ); $instance->cache->clearProcessCache(); $this->assertSame( $text, $instance->getFromCache( $page, false ) ); } public function testSelfDocumentation() { /** @var ApiQueryExtracts $instance */ $instance = TestingAccessWrapper::newFromObject( $this->newInstance() ); $this->assertIsString( $instance->getCacheMode( [] ) ); $this->assertNotEmpty( $instance->getExamplesMessages() ); $this->assertIsString( $instance->getHelpUrls() ); $params = $instance->getAllowedParams(); $this->assertIsArray( $params ); $this->assertSame( 1, $params['chars'][\ApiBase::PARAM_MIN] ); $this->assertSame( 1200, $params['chars'][\ApiBase::PARAM_MAX] ); $this->assertSame( 20, $params['limit'][\ApiBase::PARAM_DFLT] ); $this->assertSame( 'limit', $params['limit'][\ApiBase::PARAM_TYPE] ); $this->assertSame( 1, $params['limit'][\ApiBase::PARAM_MIN] ); $this->assertSame( 20, $params['limit'][\ApiBase::PARAM_MAX] ); $this->assertSame( 20, $params['limit'][\ApiBase::PARAM_MAX2] ); } /** * @dataProvider provideFirstSectionsToExtract */ public function testGetFirstSection( $text, $isPlainText, $expected ) { /** @var ApiQueryExtracts $instance */ $instance = TestingAccessWrapper::newFromObject( $this->newInstance() ); $this->assertSame( $expected, $instance->getFirstSection( $text, $isPlainText ) ); } public static function provideFirstSectionsToExtract() { return [ 'Plain text match' => [ "First\nsection \1\2... \1\2...", true, "First\nsection ", ], 'Plain text without a match' => [ 'Example\1\2...', true, 'Example\1\2...', ], 'HTML match' => [ "First\nsection