mediawiki-extensions-Math/tests/phpunit/unit/TexVC/MMLRenderTest.php
Stegmujo 426a67fbd7
Fix P rendered as pilcrow
* contains a minor fix for spacings, so that they are rendered by spacer
* and some minor fixes for section sign
* MMLFullCoverageTest cases: 216

Bug: T327391
Change-Id: I124e7aec5552dec98a8292e5bdb9449a3009560a
2023-03-22 14:28:57 +01:00

110 lines
4.1 KiB
PHP

<?php
namespace MediaWiki\Extension\Math\Tests\TexVC;
use MediaWiki\Extension\Math\TexVC\MMLmappings\Util\MMLTestUtil;
use MediaWiki\Extension\Math\TexVC\TexVC;
use MediaWikiUnitTestCase;
/**
* These are some specific testcases by MML-Rendering by TexVC.
* They are explicitly described here instead of in JSON files because
* Mathoid or LaTeXML do not generate suitable results for reference.
* @covers \MediaWiki\Extension\Math\TexVC\TexVC
*/
class MMLRenderTest extends MediaWikiUnitTestCase {
public function testSidesetError() {
$input = "\\sideset{_1^2}{_3^4}";
$mathMLtexVC = $this->generateMML( $input );
$this->assertTrue( str_contains( $mathMLtexVC, "merror" ) );
}
public function testSidesetSum() {
$input = "\\sideset{_1^2}{_3^4}\\sum";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringNotContainsString( "merror", $mathMLtexVC );
$this->assertStringContainsString( "mmultiscripts", $mathMLtexVC );
$this->assertStringContainsString( "<mprescripts/>", $mathMLtexVC );
$this->assertStringContainsString( ">&#x2211;", $mathMLtexVC );
}
public function testSidesetProd() {
$input = "\\sideset{_1^2}{_3^4}\\prod";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringNotContainsString( "merror", $mathMLtexVC );
$this->assertStringContainsString( "mmultiscripts", $mathMLtexVC );
$this->assertStringContainsString( "<mprescripts/>", $mathMLtexVC );
$this->assertStringContainsString( ">&#x220F;", $mathMLtexVC );
}
public function testSidesetFQ() {
$input = "\\sideset{_1^2}{_3^4}\prod_a^b";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringNotContainsString( "merror", $mathMLtexVC );
$this->assertStringContainsString( "mmultiscripts", $mathMLtexVC );
$this->assertStringContainsString( "<mprescripts/>", $mathMLtexVC );
$this->assertStringContainsString( ">&#x220F;", $mathMLtexVC );
$this->assertStringContainsString( "<mi>a</mi>", $mathMLtexVC );
$this->assertStringContainsString( "<mi>b</mi>", $mathMLtexVC );
$this->assertStringContainsString( "movablelimits", $mathMLtexVC );
}
public function testLimitsProd() {
$input = "\\prod\\limits_{j=1}^k A_{\\alpha_j}";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringContainsString( "munderover", $mathMLtexVC );
$this->assertStringContainsString( "&#x220F;", $mathMLtexVC, );
$this->assertStringContainsString( "msub", $mathMLtexVC, );
}
public function testLimitsSum() {
$input = "\\sum\\limits_{j=1}^k A_{\\alpha_j}";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringContainsString( "munderover", $mathMLtexVC );
$this->assertStringContainsString( "&#x2211;", $mathMLtexVC, );
$this->assertStringContainsString( "msub", $mathMLtexVC, );
}
public function testLimitsLim() {
$input = "\\lim_{x \\to 2}";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringContainsString( "lim", $mathMLtexVC );
$this->assertStringContainsString( "munder", $mathMLtexVC, );
}
public function testRenderSpaceSemicolon() {
$input = "{\\;}";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringContainsString( "mstyle", $mathMLtexVC );
$this->assertStringContainsString( "mspace", $mathMLtexVC, );
}
public function testSpacesAndCommas() {
$input = "{a}{b , c}\\,";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringContainsString( "<mo>,", $mathMLtexVC );
$this->assertStringContainsString( "mspace", $mathMLtexVC, );
}
public function testPilcrowAndSectionSign() {
$input = "\\P P \\S S";
$mathMLtexVC = $this->generateMML( $input );
$this->assertStringContainsString( "<mi>P", $mathMLtexVC );
$this->assertStringContainsString( "<mi>S", $mathMLtexVC, );
$this->assertStringContainsString( "&#xB6;", $mathMLtexVC, );
$this->assertStringContainsString( "&#xA7;", $mathMLtexVC, );
}
private function generateMML( $input, $chem = false ) {
$texVC = new TexVC();
$resultT = $texVC->check( $input, [
'debug' => false,
'usemathrm' => false,
'oldtexvc' => false,
'usemhchem' => $chem
] );
return MMLTestUtil::getMMLwrapped( $resultT["input"] ) ?? "<math> error texvc </math>";
}
}