setLanguage( 'qqx' ); $differ->setLocalizer( $localizer ); TestingAccessWrapper::newFromObject( $differ )->haveMoveSupport = true; return $differ; } public static function provideRenderBatch() { return [ [ false ], [ true ] ]; } /** * @requires extension wikidiff2 * @dataProvider provideRenderBatch * @param bool $useMultiFormat */ public function testRenderBatch( $useMultiFormat ) { if ( !function_exists( 'wikidiff2_multi_format_diff' ) && $useMultiFormat ) { $this->markTestSkipped( 'Need wikidiff2 1.14.0+' ); } $oldText = 'foo'; $newText = 'bar'; $differ = new Wikidiff2TextDiffer( [ 'useMultiFormat' => $useMultiFormat ] ); // Should not need a MessageLocalizer $result = $differ->renderBatch( $oldText, $newText, [ 'table', 'inline' ] ); $this->assertSame( [ 'table' => TextDifferData::WIKIDIFF2_TABLE, 'inline' => TextDifferData::WIKIDIFF2_INLINE ], $result ); } public function testGetName() { $differ = new Wikidiff2TextDiffer( [] ); $this->assertSame( 'wikidiff2', $differ->getName() ); } public function testGetFormatContext() { $differ = new Wikidiff2TextDiffer( [] ); $this->assertSame( TextDiffer::CONTEXT_ROW, $differ->getFormatContext( 'table' ) ); } public static function provideGetTablePrefixes() { return [ [ 'table', 'class="mw-diff-inline-legend oo-ui-element-hidden".*\(diff-inline-tooltip-ins\)' ], [ 'inline', 'class="mw-diff-inline-legend".*\(diff-inline-tooltip-ins\)' ], ]; } /** * @dataProvider provideGetTablePrefixes * @param string $format * @param string $pattern */ public function testGetTablePrefixes( $format, $pattern ) { $differ = $this->createDiffer(); $result = $differ->getTablePrefixes( $format ); $this->assertMatchesRegularExpression( '{' . $pattern . '}s', $result[TextSlotDiffRenderer::INLINE_LEGEND_KEY] ); } public static function provideLocalize() { return [ 'normal table' => [ 'table', TextDifferData::WIKIDIFF2_TABLE, [], '\(lineno: 1\)' ], 'table with move tooltip' => [ 'table', // From wikidiff2 001.phpt '', [], 'title="\(diff-paragraph-moved-tonew\)"' ], 'table with reduced line numbers' => [ 'table', TextDifferData::WIKIDIFF2_TABLE, [ 'reducedLineNumbers' => true ], '' ], 'inline tooltip' => [ 'inline', TextDifferData::WIKIDIFF2_INLINE, [], '' ], ]; } /** * @dataProvider provideLocalize * @param string $format * @param string $input * @param array $options * @param string $pattern */ public function testLocalize( $format, $input, $options, $pattern ) { $differ = $this->createDiffer(); $result = $differ->localize( $format, $input, $options ); $this->assertMatchesRegularExpression( '{' . $pattern . '}s', $result ); } public static function provideAddLocalizedTitleTooltips() { return [ 'moved paragraph left shoud get new location title' => [ '', '', ], 'moved paragraph right shoud get old location title' => [ '', '', ], 'nothing changed when key not hit' => [ '', '', ], ]; } /** * @dataProvider provideAddLocalizedTitleTooltips */ public function testAddLocalizedTitleTooltips( $input, $expected ) { $differ = TestingAccessWrapper::newFromObject( $this->createDiffer() ); $this->assertEquals( $expected, $differ->addLocalizedTitleTooltips( 'table', $input ) ); } }