We need the output content language when fetching HTML in VE so this needs to match whatever parsoid gives us. In order for this to happen, we need to loop in more data to the parser output after parsing. This patch adds that more relevant data and exposes it via a public method: `getHtmlOutputContentLanguage()` In addition, this patch fixes a bug that was introduced in the PageBundleParserOutputConverterTest when setting extension data on parser output (L#64). Follow-up: I33076c359ee45719c1c4ef63f77c1f1285951d0c (test fix) Change-Id: I06bf9f575ed5a2521cf4b2c42fc6e0e7faab6bc0
101 lines
3.2 KiB
PHP
101 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Parser\Parsoid;
|
|
|
|
use MediaWikiUnitTestCase;
|
|
use ParserOutput;
|
|
use Wikimedia\Parsoid\Core\PageBundle;
|
|
|
|
/**
|
|
* @covers MediaWiki\Parser\Parsoid\PageBundleParserOutputConverter
|
|
*/
|
|
class PageBundleParserOutputConverterTest extends MediaWikiUnitTestCase {
|
|
/** @dataProvider provideParserOutputFromPageBundle */
|
|
public function testParserOutputFromPageBundle( PageBundle $pageBundle ) {
|
|
$output = PageBundleParserOutputConverter::parserOutputFromPageBundle( $pageBundle );
|
|
$this->assertSame( $pageBundle->html, $output->getRawText() );
|
|
|
|
$extensionData = $output->getExtensionData( PageBundleParserOutputConverter::PARSOID_PAGE_BUNDLE_KEY );
|
|
$this->assertSame( $pageBundle->mw, $extensionData['mw'] );
|
|
$this->assertSame( $pageBundle->parsoid, $extensionData['parsoid'] );
|
|
$this->assertSame( $pageBundle->headers, $extensionData['headers'] );
|
|
$this->assertSame( $pageBundle->headers['content-language'], $extensionData['headers']['content-language'] );
|
|
$this->assertSame( $pageBundle->version, $extensionData['version'] );
|
|
}
|
|
|
|
public function provideParserOutputFromPageBundle() {
|
|
yield 'should convert PageBundle containing data-parsoid and data-mw' => [
|
|
new PageBundle(
|
|
'html content',
|
|
[ 'ids' => '1.33' ],
|
|
[ 'ids' => '1.33' ],
|
|
'1.x',
|
|
[ 'content-language' => 'abc' ]
|
|
)
|
|
];
|
|
|
|
yield 'should convert PageBundle that contains no data-parsoid or data-mw' => [
|
|
new PageBundle(
|
|
'html content',
|
|
[],
|
|
[],
|
|
'1.x',
|
|
[ 'content-language' => null ]
|
|
)
|
|
];
|
|
}
|
|
|
|
/** @dataProvider providePageBundleFromParserOutput */
|
|
public function testPageBundleFromParserOutput( ParserOutput $parserOutput ) {
|
|
$pageBundle = PageBundleParserOutputConverter::pageBundleFromParserOutput( $parserOutput );
|
|
|
|
$this->assertSame( $parserOutput->getRawText(), $pageBundle->html );
|
|
|
|
$extensionData = $parserOutput->getExtensionData(
|
|
PageBundleParserOutputConverter::PARSOID_PAGE_BUNDLE_KEY
|
|
);
|
|
$this->assertSame( $extensionData['parsoid'] ?? [], $pageBundle->parsoid );
|
|
$this->assertSame( $extensionData['mw'] ?? [], $pageBundle->mw );
|
|
$this->assertSame( $extensionData['version'] ?? null, $pageBundle->version );
|
|
$this->assertSame( $extensionData['headers'] ?? [], $pageBundle->headers );
|
|
$this->assertSame( $extensionData['headers']['content-language'], $pageBundle->headers['content-language'] );
|
|
}
|
|
|
|
public function providePageBundleFromParserOutput() {
|
|
yield 'should convert ParsoidOutput containing data-parsoid and data-mw' => [
|
|
$this->getParsoidOutput(
|
|
'hello world',
|
|
[
|
|
'parsoid' => [ 'ids' => '1.22' ],
|
|
'mw' => [],
|
|
'version' => '2.x',
|
|
'headers' => [ 'content-language' => 'xyz' ]
|
|
]
|
|
)
|
|
];
|
|
|
|
yield 'should convert ParsoidOutput that does not contain data-parsoid or data-mw' => [
|
|
$this->getParsoidOutput(
|
|
'hello world',
|
|
[
|
|
'parsoid' => null,
|
|
'mw' => null,
|
|
'version' => null,
|
|
'headers' => [ 'content-language' => null ]
|
|
]
|
|
)
|
|
];
|
|
}
|
|
|
|
private function getParsoidOutput(
|
|
string $rawText,
|
|
?array $pageBundleData
|
|
): ParserOutput {
|
|
$parserOutput = new ParserOutput( $rawText );
|
|
$parserOutput->setExtensionData(
|
|
PageBundleParserOutputConverter::PARSOID_PAGE_BUNDLE_KEY, $pageBundleData
|
|
);
|
|
|
|
return $parserOutput;
|
|
}
|
|
}
|