Replace Content::getParserOutput call to ContentRenderer::getParserOutput
Bug: T287158 Change-Id: I8a13f45027e08e2d8ddefa140dd47a0c55094934
This commit is contained in:
parent
2ae3e55f64
commit
fa5237eb48
23 changed files with 198 additions and 129 deletions
|
|
@ -4236,9 +4236,10 @@ class EditPage implements IEditObject {
|
|||
// once before PST with $content, and then after PST with $pstContent.
|
||||
$services = MediaWikiServices::getInstance();
|
||||
$contentTransformer = $services->getContentTransformer();
|
||||
$contentRenderer = $services->getContentRenderer();
|
||||
$pstContent = $contentTransformer->preSaveTransform( $content, $this->mTitle, $user, $parserOptions );
|
||||
$scopedCallback = $parserOptions->setupFakeRevision( $this->mTitle, $pstContent, $user );
|
||||
$parserOutput = $pstContent->getParserOutput( $this->mTitle, null, $parserOptions );
|
||||
$parserOutput = $contentRenderer->getParserOutput( $pstContent, $this->mTitle, null, $parserOptions );
|
||||
ScopedCallback::consume( $scopedCallback );
|
||||
return [
|
||||
'parserOutput' => $parserOutput,
|
||||
|
|
|
|||
|
|
@ -74,9 +74,6 @@ class RenderedRevision implements SlotRenderingProvider {
|
|||
*/
|
||||
private $slotsOutput = [];
|
||||
|
||||
/** @var ContentRenderer */
|
||||
private $contentRenderer;
|
||||
|
||||
/**
|
||||
* @var callable Callback for combining slot output into revision output.
|
||||
* Signature: function ( RenderedRevision $this ): ParserOutput.
|
||||
|
|
@ -88,6 +85,11 @@ class RenderedRevision implements SlotRenderingProvider {
|
|||
*/
|
||||
private $saveParseLogger;
|
||||
|
||||
/**
|
||||
* @var ContentRenderer Service to render content.
|
||||
*/
|
||||
private $contentRenderer;
|
||||
|
||||
/**
|
||||
* @note Application logic should not instantiate RenderedRevision instances directly,
|
||||
* but should use a RevisionRenderer instead.
|
||||
|
|
@ -113,6 +115,7 @@ class RenderedRevision implements SlotRenderingProvider {
|
|||
Authority $performer = null
|
||||
) {
|
||||
$this->options = $options;
|
||||
$this->contentRenderer = $contentRenderer;
|
||||
|
||||
$this->setRevisionInternal( $revision );
|
||||
|
||||
|
|
@ -238,7 +241,8 @@ class RenderedRevision implements SlotRenderingProvider {
|
|||
throw new LogicException(
|
||||
'HTML generation was requested, but '
|
||||
. get_class( $content )
|
||||
. '::getParserOutput() returns a ParserOutput with no text set.'
|
||||
. ' that passed to '
|
||||
. 'ContentRenderer::getParserOutput() returns a ParserOutput with no text set.'
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -131,6 +131,7 @@ class ApiMain extends ApiBase {
|
|||
'ContentHandlerFactory',
|
||||
'Parser',
|
||||
'WikiPageFactory',
|
||||
'ContentRenderer',
|
||||
'ContentTransformer',
|
||||
'CommentFormatter',
|
||||
]
|
||||
|
|
|
|||
|
|
@ -23,8 +23,10 @@
|
|||
use MediaWiki\Cache\LinkBatchFactory;
|
||||
use MediaWiki\CommentFormatter\CommentFormatter;
|
||||
use MediaWiki\Content\IContentHandlerFactory;
|
||||
use MediaWiki\Content\Renderer\ContentRenderer;
|
||||
use MediaWiki\Content\Transform\ContentTransformer;
|
||||
use MediaWiki\Languages\LanguageNameUtils;
|
||||
use MediaWiki\Page\PageReference;
|
||||
use MediaWiki\Page\WikiPageFactory;
|
||||
use MediaWiki\Revision\RevisionLookup;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
|
|
@ -77,6 +79,9 @@ class ApiParse extends ApiBase {
|
|||
/** @var CommentFormatter */
|
||||
private $commentFormatter;
|
||||
|
||||
/** @var ContentRenderer */
|
||||
private $contentRenderer;
|
||||
|
||||
/**
|
||||
* @param ApiMain $main
|
||||
* @param string $action
|
||||
|
|
@ -88,6 +93,7 @@ class ApiParse extends ApiBase {
|
|||
* @param IContentHandlerFactory $contentHandlerFactory
|
||||
* @param Parser $parser
|
||||
* @param WikiPageFactory $wikiPageFactory
|
||||
* @param ContentRenderer $contentRenderer
|
||||
* @param ContentTransformer $contentTransformer
|
||||
* @param CommentFormatter $commentFormatter
|
||||
*/
|
||||
|
|
@ -102,6 +108,7 @@ class ApiParse extends ApiBase {
|
|||
IContentHandlerFactory $contentHandlerFactory,
|
||||
Parser $parser,
|
||||
WikiPageFactory $wikiPageFactory,
|
||||
ContentRenderer $contentRenderer,
|
||||
ContentTransformer $contentTransformer,
|
||||
CommentFormatter $commentFormatter
|
||||
) {
|
||||
|
|
@ -114,6 +121,7 @@ class ApiParse extends ApiBase {
|
|||
$this->contentHandlerFactory = $contentHandlerFactory;
|
||||
$this->parser = $parser;
|
||||
$this->wikiPageFactory = $wikiPageFactory;
|
||||
$this->contentRenderer = $contentRenderer;
|
||||
$this->contentTransformer = $contentTransformer;
|
||||
$this->commentFormatter = $commentFormatter;
|
||||
}
|
||||
|
|
@ -130,14 +138,14 @@ class ApiParse extends ApiBase {
|
|||
|
||||
private function getContentParserOutput(
|
||||
Content $content,
|
||||
Title $title,
|
||||
PageReference $page,
|
||||
$revId,
|
||||
ParserOptions $popts
|
||||
) {
|
||||
$worker = new PoolCounterWorkViaCallback( 'ApiParser', $this->getPoolKey(),
|
||||
[
|
||||
'doWork' => static function () use ( $content, $title, $revId, $popts ) {
|
||||
return $content->getParserOutput( $title, $revId, $popts );
|
||||
'doWork' => function () use ( $content, $page, $revId, $popts ) {
|
||||
return $this->contentRenderer->getParserOutput( $content, $page, $revId, $popts );
|
||||
},
|
||||
'error' => function () {
|
||||
$this->dieWithError( 'apierror-concurrency-limit' );
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ class ApiQuery extends ApiBase {
|
|||
'SlotRoleRegistry',
|
||||
'ChangeTagDefStore',
|
||||
'LinkBatchFactory',
|
||||
'ContentRenderer',
|
||||
'ContentTransformer',
|
||||
]
|
||||
],
|
||||
|
|
@ -140,6 +141,7 @@ class ApiQuery extends ApiBase {
|
|||
'SlotRoleRegistry',
|
||||
'ChangeTagDefStore',
|
||||
'ActorMigration',
|
||||
'ContentRenderer',
|
||||
'ContentTransformer',
|
||||
]
|
||||
],
|
||||
|
|
@ -179,6 +181,7 @@ class ApiQuery extends ApiBase {
|
|||
'SlotRoleRegistry',
|
||||
'ChangeTagDefStore',
|
||||
'NamespaceInfo',
|
||||
'ContentRenderer',
|
||||
'ContentTransformer',
|
||||
]
|
||||
],
|
||||
|
|
@ -229,6 +232,7 @@ class ApiQuery extends ApiBase {
|
|||
'SlotRoleRegistry',
|
||||
'ActorMigration',
|
||||
'NamespaceInfo',
|
||||
'ContentRenderer',
|
||||
'ContentTransformer',
|
||||
]
|
||||
],
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
*/
|
||||
|
||||
use MediaWiki\Content\IContentHandlerFactory;
|
||||
use MediaWiki\Content\Renderer\ContentRenderer;
|
||||
use MediaWiki\Content\Transform\ContentTransformer;
|
||||
use MediaWiki\ParamValidator\TypeDef\UserDef;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
|
|
@ -57,6 +58,7 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
|
|||
* @param SlotRoleRegistry $slotRoleRegistry
|
||||
* @param NameTableStore $changeTagDefStore
|
||||
* @param NamespaceInfo $namespaceInfo
|
||||
* @param ContentRenderer $contentRenderer
|
||||
* @param ContentTransformer $contentTransformer
|
||||
*/
|
||||
public function __construct(
|
||||
|
|
@ -68,6 +70,7 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
|
|||
SlotRoleRegistry $slotRoleRegistry,
|
||||
NameTableStore $changeTagDefStore,
|
||||
NamespaceInfo $namespaceInfo,
|
||||
ContentRenderer $contentRenderer,
|
||||
ContentTransformer $contentTransformer
|
||||
) {
|
||||
parent::__construct(
|
||||
|
|
@ -78,6 +81,7 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
|
|||
$contentHandlerFactory,
|
||||
$parserFactory,
|
||||
$slotRoleRegistry,
|
||||
$contentRenderer,
|
||||
$contentTransformer
|
||||
);
|
||||
$this->revisionStore = $revisionStore;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
use MediaWiki\Content\IContentHandlerFactory;
|
||||
use MediaWiki\Content\Renderer\ContentRenderer;
|
||||
use MediaWiki\Content\Transform\ContentTransformer;
|
||||
use MediaWiki\ParamValidator\TypeDef\UserDef;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
|
|
@ -53,6 +54,7 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase {
|
|||
* @param SlotRoleRegistry $slotRoleRegistry
|
||||
* @param ActorMigration $actorMigration
|
||||
* @param NamespaceInfo $namespaceInfo
|
||||
* @param ContentRenderer $contentRenderer
|
||||
* @param ContentTransformer $contentTransformer
|
||||
*/
|
||||
public function __construct(
|
||||
|
|
@ -64,6 +66,7 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase {
|
|||
SlotRoleRegistry $slotRoleRegistry,
|
||||
ActorMigration $actorMigration,
|
||||
NamespaceInfo $namespaceInfo,
|
||||
ContentRenderer $contentRenderer,
|
||||
ContentTransformer $contentTransformer
|
||||
) {
|
||||
parent::__construct(
|
||||
|
|
@ -74,6 +77,7 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase {
|
|||
$contentHandlerFactory,
|
||||
$parserFactory,
|
||||
$slotRoleRegistry,
|
||||
$contentRenderer,
|
||||
$contentTransformer
|
||||
);
|
||||
$this->revisionStore = $revisionStore;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
use MediaWiki\Cache\LinkBatchFactory;
|
||||
use MediaWiki\Content\IContentHandlerFactory;
|
||||
use MediaWiki\Content\Renderer\ContentRenderer;
|
||||
use MediaWiki\Content\Transform\ContentTransformer;
|
||||
use MediaWiki\ParamValidator\TypeDef\UserDef;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
|
|
@ -58,6 +59,7 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
|
|||
* @param SlotRoleRegistry $slotRoleRegistry
|
||||
* @param NameTableStore $changeTagDefStore
|
||||
* @param LinkBatchFactory $linkBatchFactory
|
||||
* @param ContentRenderer $contentRenderer
|
||||
* @param ContentTransformer $contentTransformer
|
||||
*/
|
||||
public function __construct(
|
||||
|
|
@ -69,6 +71,7 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
|
|||
SlotRoleRegistry $slotRoleRegistry,
|
||||
NameTableStore $changeTagDefStore,
|
||||
LinkBatchFactory $linkBatchFactory,
|
||||
ContentRenderer $contentRenderer,
|
||||
ContentTransformer $contentTransformer
|
||||
) {
|
||||
parent::__construct(
|
||||
|
|
@ -79,6 +82,7 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
|
|||
$contentHandlerFactory,
|
||||
$parserFactory,
|
||||
$slotRoleRegistry,
|
||||
$contentRenderer,
|
||||
$contentTransformer
|
||||
);
|
||||
$this->revisionStore = $revisionStore;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
use MediaWiki\Content\IContentHandlerFactory;
|
||||
use MediaWiki\Content\Renderer\ContentRenderer;
|
||||
use MediaWiki\Content\Transform\ContentTransformer;
|
||||
use MediaWiki\ParamValidator\TypeDef\UserDef;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
|
|
@ -57,6 +58,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
|
|||
* @param SlotRoleRegistry $slotRoleRegistry
|
||||
* @param NameTableStore $changeTagDefStore
|
||||
* @param ActorMigration $actorMigration
|
||||
* @param ContentRenderer $contentRenderer
|
||||
* @param ContentTransformer $contentTransformer
|
||||
*/
|
||||
public function __construct(
|
||||
|
|
@ -68,6 +70,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
|
|||
SlotRoleRegistry $slotRoleRegistry,
|
||||
NameTableStore $changeTagDefStore,
|
||||
ActorMigration $actorMigration,
|
||||
ContentRenderer $contentRenderer,
|
||||
ContentTransformer $contentTransformer
|
||||
) {
|
||||
parent::__construct(
|
||||
|
|
@ -78,6 +81,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
|
|||
$contentHandlerFactory,
|
||||
$parserFactory,
|
||||
$slotRoleRegistry,
|
||||
$contentRenderer,
|
||||
$contentTransformer
|
||||
);
|
||||
$this->revisionStore = $revisionStore;
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
use MediaWiki\Content\IContentHandlerFactory;
|
||||
use MediaWiki\Content\Renderer\ContentRenderer;
|
||||
use MediaWiki\Content\Transform\ContentTransformer;
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
|
|
@ -73,6 +74,9 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
|
|||
/** @var SlotRoleRegistry */
|
||||
private $slotRoleRegistry;
|
||||
|
||||
/** @var ContentRenderer */
|
||||
private $contentRenderer;
|
||||
|
||||
/** @var ContentTransformer */
|
||||
private $contentTransformer;
|
||||
|
||||
|
|
@ -86,6 +90,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
|
|||
* @param IContentHandlerFactory|null $contentHandlerFactory
|
||||
* @param ParserFactory|null $parserFactory
|
||||
* @param SlotRoleRegistry|null $slotRoleRegistry
|
||||
* @param ContentRenderer|null $contentRenderer
|
||||
* @param ContentTransformer|null $contentTransformer
|
||||
*/
|
||||
public function __construct(
|
||||
|
|
@ -96,6 +101,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
|
|||
IContentHandlerFactory $contentHandlerFactory = null,
|
||||
ParserFactory $parserFactory = null,
|
||||
SlotRoleRegistry $slotRoleRegistry = null,
|
||||
ContentRenderer $contentRenderer = null,
|
||||
ContentTransformer $contentTransformer = null
|
||||
) {
|
||||
parent::__construct( $queryModule, $moduleName, $paramPrefix );
|
||||
|
|
@ -106,6 +112,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
|
|||
$this->contentHandlerFactory = $contentHandlerFactory ?? $services->getContentHandlerFactory();
|
||||
$this->parserFactory = $parserFactory ?? $services->getParserFactory();
|
||||
$this->slotRoleRegistry = $slotRoleRegistry ?? $services->getSlotRoleRegistry();
|
||||
$this->contentRenderer = $contentRenderer ?? $services->getContentRenderer();
|
||||
$this->contentTransformer = $contentTransformer ?? $services->getContentTransformer();
|
||||
}
|
||||
|
||||
|
|
@ -617,7 +624,8 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
|
|||
}
|
||||
}
|
||||
if ( $this->parseContent ) {
|
||||
$po = $content->getParserOutput(
|
||||
$po = $this->contentRenderer->getParserOutput(
|
||||
$content,
|
||||
$title,
|
||||
$revision->getId(),
|
||||
ParserOptions::newFromContext( $this->getContext() )
|
||||
|
|
|
|||
|
|
@ -252,8 +252,8 @@ class WikitextContent extends TextContent {
|
|||
$context = RequestContext::getMain();
|
||||
$title = $context->getTitle();
|
||||
}
|
||||
|
||||
$po = $this->getParserOutput( $title, null, null, false );
|
||||
$contentRenderer = MediaWikiServices::getInstance()->getContentRenderer();
|
||||
$po = $contentRenderer->getParserOutput( $this, $title, null, null, false );
|
||||
$links = $po->getLinks();
|
||||
$hasLinks = !empty( $links );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -159,9 +159,8 @@ class BenchmarkParse extends Maintenance {
|
|||
*/
|
||||
private function runParser( RevisionRecord $revision ) {
|
||||
$content = $revision->getContent( SlotRecord::MAIN );
|
||||
$title = Title::newFromLinkTarget( $revision->getPageAsLinkTarget() );
|
||||
|
||||
$content->getParserOutput( $title, $revision->getId() );
|
||||
$contentRenderer = MediaWikiServices::getInstance()->getContentRenderer();
|
||||
$contentRenderer->getParserOutput( $content, $revision->getPage(), $revision->getId() );
|
||||
if ( $this->clearLinkCache ) {
|
||||
$this->linkCache->clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,7 +114,8 @@ class DumpRenderer extends Maintenance {
|
|||
$options = ParserOptions::newFromUser( $user );
|
||||
|
||||
$content = $rev->getContent();
|
||||
$output = $content->getParserOutput( $title, null, $options );
|
||||
$contentRenderer = MediaWikiServices::getInstance()->getContentRenderer();
|
||||
$output = $contentRenderer->getParserOutput( $content, $title, null, $options );
|
||||
|
||||
file_put_contents( $filename,
|
||||
"<!DOCTYPE html>\n" .
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ namespace MediaWiki\Tests\Revision;
|
|||
use Content;
|
||||
use InvalidArgumentException;
|
||||
use LogicException;
|
||||
use MediaWiki\Page\PageIdentity;
|
||||
use MediaWiki\Content\Renderer\ContentRenderer;
|
||||
use MediaWiki\Page\PageIdentityValue;
|
||||
use MediaWiki\Revision\MutableRevisionRecord;
|
||||
use MediaWiki\Revision\MutableRevisionSlots;
|
||||
|
|
@ -36,12 +36,17 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
/** @var callable */
|
||||
private $combinerCallback;
|
||||
|
||||
/** @var ContentRenderer */
|
||||
private $contentRenderer;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->combinerCallback = function ( RenderedRevision $rr, array $hints = [] ) {
|
||||
return $this->combineOutput( $rr, $hints );
|
||||
};
|
||||
|
||||
$this->contentRenderer = $this->getServiceContainer()->getContentRenderer();
|
||||
}
|
||||
|
||||
private function combineOutput( RenderedRevision $rrev, array $hints = [] ) {
|
||||
|
|
@ -156,7 +161,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback,
|
||||
RevisionRecord::FOR_THIS_USER
|
||||
);
|
||||
|
|
@ -172,7 +177,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -204,7 +209,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -223,7 +228,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -253,7 +258,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -283,7 +288,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -314,7 +319,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -334,7 +339,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback,
|
||||
RevisionRecord::FOR_THIS_USER,
|
||||
$this->mockRegisteredUltimateAuthority()
|
||||
|
|
@ -368,7 +373,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback,
|
||||
RevisionRecord::RAW
|
||||
);
|
||||
|
|
@ -406,7 +411,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -452,7 +457,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -490,8 +495,9 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->combinerCallback );
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
// MutableRevisionRecord with ID should not be used by the parser,
|
||||
// revision should be loaded instead!
|
||||
|
|
@ -523,7 +529,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -565,7 +571,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -593,7 +599,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
@ -638,7 +644,7 @@ class RenderedRevisionTest extends MediaWikiIntegrationTestCase {
|
|||
$rr = new RenderedRevision(
|
||||
$rev,
|
||||
$options,
|
||||
$this->getServiceContainer()->getContentRenderer(),
|
||||
$this->contentRenderer,
|
||||
$this->combinerCallback
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -456,7 +456,8 @@ class ContentHandlerTest extends MediaWikiIntegrationTestCase {
|
|||
$fields['testDataField'] = 'test content';
|
||||
} );
|
||||
|
||||
$output = $page->getContent()->getParserOutput( $title );
|
||||
$contentRenderer = $this->getServiceContainer()->getContentRenderer();
|
||||
$output = $contentRenderer->getParserOutput( $page->getContent(), $title );
|
||||
$data = $page->getContentHandler()->getDataForSearchIndex( $page, $output, $mockEngine );
|
||||
$this->assertArrayHasKey( 'text', $data );
|
||||
$this->assertArrayHasKey( 'text_bytes', $data );
|
||||
|
|
|
|||
|
|
@ -7,6 +7,26 @@
|
|||
*/
|
||||
class FallbackContentHandlerTest extends MediaWikiLangTestCase {
|
||||
|
||||
private const CONTENT_MODEL = 'xyzzy';
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
$this->mergeMwGlobalArrayValue(
|
||||
'wgContentHandlers',
|
||||
[ self::CONTENT_MODEL => FallbackContentHandler::class ]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $data
|
||||
* @param string $type
|
||||
*
|
||||
* @return FallbackContent
|
||||
*/
|
||||
public function newContent( $data, $type = self::CONTENT_MODEL ) {
|
||||
return new FallbackContent( $data, $type );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ContentHandler::getSlotDiffRenderer
|
||||
*/
|
||||
|
|
@ -24,4 +44,21 @@ class FallbackContentHandlerTest extends MediaWikiLangTestCase {
|
|||
$this->assertNotEmpty( $diff );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FallbackContentHandler::fillParserOutput
|
||||
*/
|
||||
public function testGetParserOutput() {
|
||||
$this->setUserLang( 'en' );
|
||||
$this->setContentLang( 'qqx' );
|
||||
|
||||
$title = Title::newFromText( 'Test' );
|
||||
$content = $this->newContent( 'Horkyporky' );
|
||||
$contentRenderer = $this->getServiceContainer()->getContentRenderer();
|
||||
$po = $contentRenderer->getParserOutput( $content, $title );
|
||||
$html = $po->getText();
|
||||
$html = preg_replace( '#<!--.*?-->#sm', '', $html ); // strip comments
|
||||
|
||||
$this->assertStringNotContainsString( 'Horkyporky', $html );
|
||||
$this->assertStringNotContainsString( '(unsupported-content-model)', $html );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,24 +25,6 @@ class FallbackContentTest extends MediaWikiLangTestCase {
|
|||
return new FallbackContent( $data, $type );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FallbackContent::getParserOutput
|
||||
*/
|
||||
public function testGetParserOutput() {
|
||||
$this->setUserLang( 'en' );
|
||||
$this->setContentLang( 'qqx' );
|
||||
|
||||
$title = Title::newFromText( 'Test' );
|
||||
$content = $this->newContent( 'Horkyporky' );
|
||||
|
||||
$po = $content->getParserOutput( $title );
|
||||
$html = $po->getText();
|
||||
$html = preg_replace( '#<!--.*?-->#sm', '', $html ); // strip comments
|
||||
|
||||
$this->assertStringNotContainsString( 'Horkyporky', $html );
|
||||
$this->assertStringNotContainsString( '(unsupported-content-model)', $html );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers FallbackContent::getRedirectTarget
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,12 +1,6 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* See also unit tests at \MediaWiki\Tests\Unit\JsonContentTest
|
||||
*
|
||||
* @author Addshore
|
||||
* @covers JsonContent
|
||||
*/
|
||||
class JsonContentTest extends MediaWikiLangTestCase {
|
||||
class JsonContentHandlerIntegrationTest extends MediaWikiLangTestCase {
|
||||
|
||||
public function provideDataAndParserText() {
|
||||
return [
|
||||
|
|
@ -55,10 +49,13 @@ class JsonContentTest extends MediaWikiLangTestCase {
|
|||
|
||||
/**
|
||||
* @dataProvider provideDataAndParserText
|
||||
* @covers JsonContentHandler::fillParserOutput
|
||||
*/
|
||||
public function testFillParserOutput( $data, $expected ) {
|
||||
$obj = new JsonContent( FormatJson::encode( $data ) );
|
||||
$parserOutput = $obj->getParserOutput(
|
||||
$content = new JsonContent( FormatJson::encode( $data ) );
|
||||
$contentRenderer = $this->getServiceContainer()->getContentRenderer();
|
||||
$parserOutput = $contentRenderer->getParserOutput(
|
||||
$content,
|
||||
$this->createMock( Title::class ),
|
||||
null,
|
||||
null,
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
class TextContentHandlerIntegrationTest extends MediaWikiLangTestCase {
|
||||
|
||||
public static function provideGetParserOutput() {
|
||||
yield 'Basic render' => [
|
||||
'title' => 'TextContentTest_testGetParserOutput',
|
||||
'model' => CONTENT_MODEL_TEXT,
|
||||
'text' => "hello ''world'' & [[stuff]]\n",
|
||||
'expectedHtml' => "hello ''world'' & [[stuff]]",
|
||||
'expectedFields' => [ 'Links' => [] ]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideGetParserOutput
|
||||
* @covers TextContentHandler::fillParserOutput
|
||||
*/
|
||||
public function testGetParserOutput( $title, $model, $text, $expectedHtml,
|
||||
$expectedFields = null
|
||||
) {
|
||||
$title = Title::newFromText( $title );
|
||||
$content = ContentHandler::makeContent( $text, $title, $model );
|
||||
$contentRenderer = $this->getServiceContainer()->getContentRenderer();
|
||||
$po = $contentRenderer->getParserOutput( $content, $title );
|
||||
|
||||
$html = $po->getText();
|
||||
$html = preg_replace( '#<!--.*?-->#sm', '', $html ); // strip comments
|
||||
|
||||
$this->assertEquals( $expectedHtml, trim( $html ) );
|
||||
|
||||
if ( $expectedFields ) {
|
||||
foreach ( $expectedFields as $field => $exp ) {
|
||||
$getter = 'get' . ucfirst( $field );
|
||||
$v = $po->$getter();
|
||||
|
||||
if ( is_array( $exp ) ) {
|
||||
$this->assertArrayEquals( $exp, $v );
|
||||
} else {
|
||||
$this->assertEquals( $exp, $v );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -44,53 +44,6 @@ class TextContentTest extends MediaWikiLangTestCase {
|
|||
return new TextContent( $text );
|
||||
}
|
||||
|
||||
public static function dataGetParserOutput() {
|
||||
return [
|
||||
[
|
||||
'TextContentTest_testGetParserOutput',
|
||||
CONTENT_MODEL_TEXT,
|
||||
"hello ''world'' & [[stuff]]\n", "hello ''world'' & [[stuff]]",
|
||||
[
|
||||
'Links' => []
|
||||
]
|
||||
],
|
||||
// TODO: more...?
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataGetParserOutput
|
||||
* @covers TextContent::getParserOutput
|
||||
*/
|
||||
public function testGetParserOutput( $title, $model, $text, $expectedHtml,
|
||||
$expectedFields = null
|
||||
) {
|
||||
$title = Title::newFromText( $title );
|
||||
$content = ContentHandler::makeContent( $text, $title, $model );
|
||||
|
||||
$po = $content->getParserOutput( $title );
|
||||
|
||||
$html = $po->getText();
|
||||
$html = preg_replace( '#<!--.*?-->#sm', '', $html ); // strip comments
|
||||
|
||||
$this->assertEquals( $expectedHtml, trim( $html ) );
|
||||
|
||||
if ( $expectedFields ) {
|
||||
foreach ( $expectedFields as $field => $exp ) {
|
||||
$getter = 'get' . ucfirst( $field );
|
||||
$v = $po->$getter();
|
||||
|
||||
if ( is_array( $exp ) ) {
|
||||
$this->assertArrayEquals( $exp, $v );
|
||||
} else {
|
||||
$this->assertEquals( $exp, $v );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: assert more properties
|
||||
}
|
||||
|
||||
public static function dataGetRedirectTarget() {
|
||||
return [
|
||||
[ '#REDIRECT [[Test]]',
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use MediaWiki\Page\PageReferenceValue;
|
||||
|
||||
/**
|
||||
* See also unit tests at \MediaWiki\Tests\Unit\WikitextContentHandlerTest
|
||||
|
|
@ -293,4 +294,25 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
|
|||
$this->assertEquals( 'This is file content', $data['file_text'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers WikitextContentHandler::fillParserOutput
|
||||
*/
|
||||
public function testHadSignature() {
|
||||
$services = $this->getServiceContainer();
|
||||
$contentTransformer = $services->getContentTransformer();
|
||||
$contentRenderer = $services->getContentRenderer();
|
||||
$this->hideDeprecated( 'AbstractContent::preSaveTransform' );
|
||||
|
||||
$pageObj = PageReferenceValue::localReference( NS_MAIN, __CLASS__ );
|
||||
|
||||
$content = new WikitextContent( '~~~~' );
|
||||
$pstContent = $contentTransformer->preSaveTransform(
|
||||
$content,
|
||||
$pageObj,
|
||||
$this->getTestUser()->getUser(),
|
||||
ParserOptions::newFromAnon()
|
||||
);
|
||||
|
||||
$this->assertTrue( $contentRenderer->getParserOutput( $pstContent, $pageObj )->getFlag( 'user-signature' ) );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -288,6 +288,7 @@ just a test"
|
|||
*/
|
||||
public function testRedirectParserOption() {
|
||||
$title = Title::newFromText( 'testRedirectParserOption' );
|
||||
$contentRenderer = $this->getServiceContainer()->getContentRenderer();
|
||||
|
||||
// Set up hook and its reporting variables
|
||||
$wikitext = null;
|
||||
|
|
@ -307,7 +308,7 @@ just a test"
|
|||
$content = $this->newContent( 'hello world.' );
|
||||
$options = ParserOptions::newCanonical( 'canonical' );
|
||||
$options->setRedirectTarget( $title );
|
||||
$content->getParserOutput( $title, null, $options );
|
||||
$contentRenderer->getParserOutput( $content, $title, null, $options );
|
||||
$this->assertEquals( 'hello world.', $wikitext,
|
||||
'Wikitext passed to hook was not as expected'
|
||||
);
|
||||
|
|
@ -323,7 +324,7 @@ just a test"
|
|||
"#REDIRECT [[TestRedirectParserOption/redir]]\nhello redirect."
|
||||
);
|
||||
$options = ParserOptions::newCanonical( 'canonical' );
|
||||
$content->getParserOutput( $title, null, $options );
|
||||
$contentRenderer->getParserOutput( $content, $title, null, $options );
|
||||
$this->assertEquals(
|
||||
'hello redirect.',
|
||||
$wikitext,
|
||||
|
|
@ -367,22 +368,4 @@ just a test"
|
|||
// @todo more...?
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers WikitextContent::fillParserOutput
|
||||
*/
|
||||
public function testHadSignature() {
|
||||
$this->hideDeprecated( 'AbstractContent::preSaveTransform' );
|
||||
|
||||
$titleObj = Title::newFromText( __CLASS__ );
|
||||
|
||||
$content = new WikitextContent( '~~~~' );
|
||||
$pstContent = $content->preSaveTransform(
|
||||
$titleObj,
|
||||
$this->getTestUser()->getUser(),
|
||||
ParserOptions::newFromAnon()
|
||||
);
|
||||
|
||||
$this->assertTrue( $pstContent->getParserOutput( $titleObj )->getFlag( 'user-signature' ) );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ class WikitextStructureTest extends MediaWikiLangTestCase {
|
|||
*/
|
||||
private function getStructure( $text ) {
|
||||
$content = new WikitextContent( $text );
|
||||
$parserOutput = $content->getParserOutput( Title::newFromText( 'TestTitle' ) );
|
||||
$contentRenderer = $this->getServiceContainer()->getContentRenderer();
|
||||
$parserOutput = $contentRenderer->getParserOutput( $content, Title::newFromText( 'TestTitle' ) );
|
||||
return new WikiTextStructure( $parserOutput );
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue