mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Math
synced 2024-12-03 19:56:55 +00:00
a429c8cc35
Actual changes: * Let the special page accept the subpage parameter, e.g. [[Special:MathWikibase/Q6203]]. * Fix some of the message escaping issues in SpecialMathWikibase. Messages that are just plain text and not supposed to contain any parameters, wikitext, HTML, or something like this should be properly escaped, either via Html::rawElement( $msg->escaped() ) or better Html::element( $msg->plain ). The later approach is cheaper. Other code cleanups that don't affect production: * Reduce the amount of duplicate code in SpecialMathWikibase. * Make use of the preg_match() return value. * Remove default parameters from parent::__construct() call. * Remove some auto-generated comments. * Remove some comments that don't add new information, but just repeat what the code already says. * Make use of PHPUnit's assertCount(). We can split this patch into smaller patches, if you prefer. This should especially be done if one of the changes is controversial, to not block the other changes. Please tell me. Change-Id: I8c20014435af3d2ac9c7381fe5fd00b9fe49b2c2
115 lines
3.3 KiB
PHP
115 lines
3.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @covers \MathLaTeXML
|
|
*
|
|
* @group Math
|
|
* @group Database
|
|
*
|
|
* @license GPL-2.0-or-later
|
|
*/
|
|
class MathLaTeXMLDatabaseTest extends MediaWikiTestCase {
|
|
public $renderer;
|
|
const SOME_TEX = "a+b";
|
|
const SOME_HTML = "a<sub>b</sub>";
|
|
const SOME_MATHML = "iℏ∂_tΨ=H^Ψ<mrow><\ci>";
|
|
const SOME_LOG = "Sample Log Text.";
|
|
const SOME_TIMESTAMP = 1272509157;
|
|
const SOME_SVG = "<?xml </svg >>%%LIKE;'\" DROP TABLE math;";
|
|
|
|
/**
|
|
* Helper function to test protected/private Methods
|
|
* @param string $name
|
|
* @return ReflectionMethod
|
|
*/
|
|
protected static function getMethod( $name ) {
|
|
$class = new ReflectionClass( MathLaTeXML::class );
|
|
$method = $class->getMethod( $name );
|
|
$method->setAccessible( true );
|
|
return $method;
|
|
}
|
|
|
|
/**
|
|
* creates a new database connection and a new math renderer
|
|
* TODO: Check if there is a way to get database access without creating
|
|
* the connection to the database explicitly
|
|
* function addDBData() {
|
|
* $this->tablesUsed[] = 'math';
|
|
* }
|
|
* was not sufficient.
|
|
*/
|
|
protected function setUp() : void {
|
|
parent::setUp();
|
|
// TODO: figure out why this is necessary
|
|
$this->db = wfGetDB( DB_MASTER );
|
|
$this->renderer = new MathLaTeXML( self::SOME_TEX );
|
|
self::setupTestDB( $this->db, "mathtest" );
|
|
}
|
|
|
|
/**
|
|
* Checks the tex and hash functions
|
|
* @covers \MathRenderer::getInputHash
|
|
*/
|
|
public function testInputHash() {
|
|
$expectedhash = $this->db->encodeBlob( pack( "H32", md5( self::SOME_TEX ) ) );
|
|
$this->assertEquals( $expectedhash, $this->renderer->getInputHash() );
|
|
}
|
|
|
|
/**
|
|
* Helper function to set the current state of the sample renderer instance to the test values
|
|
*/
|
|
public function setValues() {
|
|
// set some values
|
|
$this->renderer->setTex( self::SOME_TEX );
|
|
$this->renderer->setMathml( self::SOME_MATHML );
|
|
}
|
|
|
|
/**
|
|
* @covers \MathLaTeXML::getMathTableName
|
|
*/
|
|
public function testTableName() {
|
|
$fnGetMathTableName = self::getMethod( 'getMathTableName' );
|
|
$obj = new MathLaTeXML();
|
|
$tableName = $fnGetMathTableName->invokeArgs( $obj, [] );
|
|
$this->assertEquals( $tableName, "mathlatexml", "Wrong latexml table name" );
|
|
}
|
|
|
|
/**
|
|
* Checks the creation of the math table.
|
|
* @covers \MathHooks::onLoadExtensionSchemaUpdates
|
|
*/
|
|
public function testCreateTable() {
|
|
$this->setMwGlobals( 'wgMathValidModes', [ 'latexml' ] );
|
|
$this->db->dropTable( "mathlatexml", __METHOD__ );
|
|
$dbu = DatabaseUpdater::newForDB( $this->db );
|
|
$dbu->doUpdates( [ "extensions" ] );
|
|
$this->expectOutputRegex( '/(.*)Creating mathlatexml table(.*)/' );
|
|
$this->setValues();
|
|
$this->renderer->writeToDatabase();
|
|
$res = $this->db->select( "mathlatexml", "*" );
|
|
$row = $res->fetchRow();
|
|
$this->assertCount( 12, $row );
|
|
}
|
|
|
|
/**
|
|
* Checks database access. Writes an entry and reads it back.
|
|
* @depends testCreateTable
|
|
* @covers \MathRenderer::writeToDatabase
|
|
* @covers \MathRenderer::readFromDatabase
|
|
*/
|
|
public function testDBBasics() {
|
|
$this->setValues();
|
|
$this->renderer->writeToDatabase();
|
|
|
|
$renderer2 = $this->renderer = new MathLaTeXML( self::SOME_TEX );
|
|
$renderer2->readFromDatabase();
|
|
// comparing the class object does now work due to null values etc.
|
|
$this->assertEquals(
|
|
$this->renderer->getTex(), $renderer2->getTex(), "test if tex is the same"
|
|
);
|
|
$this->assertEquals(
|
|
$this->renderer->getMathml(), $renderer2->getMathml(), "Check MathML encoding"
|
|
);
|
|
}
|
|
}
|