diff options
author | Tim Starling <tstarling@wikimedia.org> | 2023-07-03 18:27:47 +1000 |
---|---|---|
committer | Tim Starling <tstarling@wikimedia.org> | 2023-07-19 12:38:18 +1000 |
commit | 2aa87cdf2c21570f170ea5f4961b10e2da35b013 (patch) | |
tree | b32557b1fba5504f5e28379585189487f1484207 /tests/phpunit/includes/diff/TextSlotDiffRendererTest.php | |
parent | b42062e7d068a8b01af3fb72a7885d23379bc0e6 (diff) | |
download | mediawikicore-2aa87cdf2c21570f170ea5f4961b10e2da35b013.tar.gz mediawikicore-2aa87cdf2c21570f170ea5f4961b10e2da35b013.zip |
Factor out TextDiffer hierarchy from TextSlotDiffRenderer
* Follow the TODO comment in TextSlotDiffRenderer
::getTextDiffInternal() by moving the code out to three parallel
implementations, namely ExternalTextDiffer, PhpTextDiffer and
Wikidiff2TextDiffer.
* Add a container/factory class ManifoldTextDiffer to glue them
together and collate available formats.
* Move the inline legend to Wikidiff2TextDiffer. Not the toggle since
the ability to toggle depends on the available format, not the current
format.
* Update the diff cache keys so that ManifoldTextDiffer can store the
engine=>format map it used to generate the diff.
* Drop support for the second parameter to TextSlotDiffRenderer
::setEngine(), since nothing used it anymore.
* Provide a format batch API, since some engines are able to efficiently
generate multiple formats. This might be used by DifferenceEngine in
future.
Needs risky change notification for the cache key change.
Bug: T339184
Depends-On: I8a35b9b8ec1622c9a36d2496bdd24f51bc52c85f
Change-Id: I5c506e39162855aff53dd420dd8145156739059c
Diffstat (limited to 'tests/phpunit/includes/diff/TextSlotDiffRendererTest.php')
-rw-r--r-- | tests/phpunit/includes/diff/TextSlotDiffRendererTest.php | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/tests/phpunit/includes/diff/TextSlotDiffRendererTest.php b/tests/phpunit/includes/diff/TextSlotDiffRendererTest.php index bca75dbf2e8f..ac3d93de2771 100644 --- a/tests/phpunit/includes/diff/TextSlotDiffRendererTest.php +++ b/tests/phpunit/includes/diff/TextSlotDiffRendererTest.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\Diff\TextDiffer\ManifoldTextDiffer; +use MediaWiki\Diff\TextDiffer\Wikidiff2TextDiffer; use MediaWiki\MainConfigNames; use Wikimedia\Assert\ParameterTypeException; @@ -8,13 +10,31 @@ use Wikimedia\Assert\ParameterTypeException; */ class TextSlotDiffRendererTest extends MediaWikiIntegrationTestCase { + public function setUp(): void { + Wikidiff2TextDiffer::$fakeVersionForTesting = '1.14.1'; + } + + public function tearDown(): void { + Wikidiff2TextDiffer::$fakeVersionForTesting = null; + } + public function testGetExtraCacheKeys() { $slotDiffRenderer = $this->getTextSlotDiffRenderer(); $key = $slotDiffRenderer->getExtraCacheKeys(); $slotDiffRenderer->setEngine( TextSlotDiffRenderer::ENGINE_WIKIDIFF2_INLINE ); $inlineKey = $slotDiffRenderer->getExtraCacheKeys(); - $this->assertSame( [], $key ); - $this->assertSame( $inlineKey, [ phpversion( 'wikidiff2' ), 'inline' ] ); + + ksort( $key ); + ksort( $inlineKey ); + + $this->assertSame( [ '10-formats-and-engines' => 'php=table' ], $key ); + $this->assertSame( + [ + '10-formats-and-engines' => 'wikidiff2=inline', + '20-wikidiff2-version' => '1.14.1' + ], + $inlineKey + ); } /** @@ -91,14 +111,24 @@ class TextSlotDiffRendererTest extends MediaWikiIntegrationTestCase { // no separate test for getTextDiff() as getDiff() is just a thin wrapper around it /** + * @param string $langCode * @return TextSlotDiffRenderer */ - private function getTextSlotDiffRenderer() { + private function getTextSlotDiffRenderer( $langCode = 'en' ) { $slotDiffRenderer = new TextSlotDiffRenderer(); $slotDiffRenderer->setStatsdDataFactory( new NullStatsdDataFactory() ); - $slotDiffRenderer->setLanguage( - $this->getServiceContainer()->getLanguageFactory()->getLanguage( 'en' ) ); - $slotDiffRenderer->setEngine( TextSlotDiffRenderer::ENGINE_PHP ); + $lang = $this->getServiceContainer()->getLanguageFactory()->getLanguage( $langCode ); + $context = new RequestContext; + $context->setLanguage( $lang ); + $differ = new ManifoldTextDiffer( + $context, + $lang, + 'php', + null, + [] + ); + $slotDiffRenderer->setTextDiffer( $differ ); + $slotDiffRenderer->setFormat( 'table' ); return $slotDiffRenderer; } @@ -166,7 +196,7 @@ class TextSlotDiffRendererTest extends MediaWikiIntegrationTestCase { OOUI\Theme::setSingleton( new OOUI\BlankTheme() ); $this->overrideConfigValue( MainConfigNames::ShowDiffToggleSwitch, true ); - $slotDiffRenderer = $this->getTextSlotDiffRenderer(); + $slotDiffRenderer = $this->getTextSlotDiffRenderer( 'qqx' ); $slotDiffRenderer->setHookContainer( $this->createHookContainer() ); $slotDiffRenderer->setEngine( $engine ); |