overrideConfigValue( 'UsePigLatinVariant', true ); } public static function provideConvertPageBundleVariant() { yield 'No source or base, rely on page language (en)' => [ new PageBundle( '

test language conversion

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [] ), null, 'en-x-piglatin', null, '>esttay anguagelay onversioncay<' ]; yield 'Source variant is base language' => [ new PageBundle( '

test language conversion

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [ 'content-language' => 'en' ] ), null, 'en-x-piglatin', 'en', '>esttay anguagelay onversioncay<' ]; yield 'Source language is null' => [ new PageBundle( '

Бутун инсанлар сербестлик, менлик ве укъукъларда мусавий олып дунйагъа келелер.

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [ 'content-language' => 'crh' ] ), null, 'crh-Latn', null, '>Butun insanlar serbestlik, menlik ve uquqlarda musaviy olıp dunyağa keleler. [ new PageBundle( '

Бутун инсанлар сербестлик, менлик ве укъукъларда мусавий олып дунйагъа келелер.

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [ 'content-language' => 'crh' ] ), null, 'crh-Latn', 'crh-Cyrl', '>Butun insanlar serbestlik, menlik ve uquqlarda musaviy olıp dunyağa keleler. [ new PageBundle( '

Бутун инсанлар сербестлик, менлик ве укъукъларда мусавий олып дунйагъа келелер.

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [ 'content-language' => 'crh-Cyrl' ] ), 'crh', 'crh-Latn', 'crh-Cyrl', '>Butun insanlar serbestlik, menlik ve uquqlarda musaviy olıp dunyağa keleler. [ new PageBundle( '

Бутун инсанлар сербестлик, менлик ве укъукъларда мусавий олып дунйагъа келелер.

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [] ), 'crh-Cyrl', 'crh-Latn', null, '>Butun insanlar serbestlik, menlik ve uquqlarda musaviy olıp dunyağa keleler. [ new PageBundle( '

Бутун инсанлар сербестлик, менлик ве укъукъларда мусавий олып дунйагъа келелер.

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [] ), null, 'crh-Latn', 'crh-Cyrl', '>Butun insanlar serbestlik, menlik ve uquqlarda musaviy olıp dunyağa keleler. [ new PageBundle( '

Бутун инсанлар сербестлик, менлик ве укъукъларда мусавий олып дунйагъа келелер.

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [] ), null, 'crh-Latn', 'crh', '>Butun insanlar serbestlik, menlik ve uquqlarda musaviy olıp dunyağa keleler. [ new PageBundle( '

Hallo Wereld

', [ 'parsoid-data' ], [ 'mw-data' ], Parsoid::defaultHTMLVersion(), [] ), 'nl', 'nl-be', null, '>Hallo Wereld<', false // The output language is currently not indicated. Should be expected to be 'nl' in the future. ]; } /** * @dataProvider provideConvertPageBundleVariant */ public function testConvertPageBundleVariant( PageBundle $pageBundle, $contentLanguage, $target, $source, $expected, $expectedLanguage = null ) { if ( $expectedLanguage === null ) { $expectedLanguage = $target; } $page = $this->getExistingTestPage(); $languageVariantConverter = $this->getLanguageVariantConverter( $page ); if ( $contentLanguage ) { $contentLanguage = $this->getLanguageBcp47( $contentLanguage ); $languageVariantConverter->setPageLanguageOverride( $contentLanguage ); } $target = $this->getLanguageBcp47( $target ); if ( $source ) { $source = $this->getLanguageBcp47( $source ); } $outputPageBundle = $languageVariantConverter->convertPageBundleVariant( $pageBundle, $target, $source ); $html = $outputPageBundle->toHtml(); $stripped = preg_replace( ':]*>:', '', $html ); $this->assertStringContainsString( $expected, $stripped ); if ( $expectedLanguage !== false ) { $this->assertMatchesRegularExpression( "@@i", $html ); $this->assertMatchesRegularExpression( "@^$expectedLanguage@i", $outputPageBundle->headers['content-language'] ); } $this->assertEquals( Parsoid::defaultHTMLVersion(), $outputPageBundle->version ); } public function provideConvertParserOutputVariant() { foreach ( $this->provideConvertPageBundleVariant() as $name => $case ) { $case[0] = PageBundleParserOutputConverter::parserOutputFromPageBundle( $case[0] ); yield $name => $case; } } /** * @dataProvider provideConvertParserOutputVariant */ public function testConvertParserOutputVariant( ParserOutput $parserOutput, $contentLanguage, $target, $source, $expected, $expectedLanguage = null ) { if ( $expectedLanguage === null ) { $expectedLanguage = $target; } $page = $this->getExistingTestPage(); $languageVariantConverter = $this->getLanguageVariantConverter( $page ); if ( $contentLanguage ) { $contentLanguage = $this->getLanguageBcp47( $contentLanguage ); $languageVariantConverter->setPageLanguageOverride( $contentLanguage ); } $target = $this->getLanguageBcp47( $target ); if ( $source ) { $source = $this->getLanguageBcp47( $source ); } // Set some misc metadata in $parserOutput so we can verify it was // preserved. $parserOutput->setExtensionData( 'my-key', 'my-data' ); $modifiedParserOutput = $languageVariantConverter ->convertParserOutputVariant( $parserOutput, $target, $source ); $this->assertSame( 'my-data', $modifiedParserOutput->getExtensionData( 'my-key' ) ); $html = $modifiedParserOutput->getRawText(); $stripped = preg_replace( ':]*>:', '', $html ); $this->assertStringContainsString( $expected, $stripped ); if ( $expectedLanguage !== false ) { $this->assertMatchesRegularExpression( "@@i", $html ); } $extensionData = $modifiedParserOutput ->getExtensionData( PageBundleParserOutputConverter::PARSOID_PAGE_BUNDLE_KEY ); $this->assertEquals( Parsoid::defaultHTMLVersion(), $extensionData['version'] ); if ( $expectedLanguage !== false ) { $this->assertMatchesRegularExpression( "@^$expectedLanguage@i", $extensionData['headers']['content-language'] ); $this->assertSame( $expectedLanguage, (string)$modifiedParserOutput->getLanguage() ); } } private function getLanguageBcp47( $bcp47Code ): Language { $languageFactory = $this->getServiceContainer()->getLanguageFactory(); return $languageFactory->getLanguage( new Bcp47CodeValue( $bcp47Code ) ); } private function getLanguageVariantConverter( PageIdentity $pageIdentity ): LanguageVariantConverter { return new LanguageVariantConverter( $pageIdentity, $this->getServiceContainer()->getParsoidPageConfigFactory(), $this->getServiceContainer()->getService( '_Parsoid' ), $this->getServiceContainer()->getParsoidSiteConfig(), $this->getServiceContainer()->getTitleFactory(), $this->getServiceContainer()->getLanguageConverterFactory(), $this->getServiceContainer()->getLanguageFactory() ); } }