mediawiki-extensions-Math/tests/MathDatabaseTest.php
physikerwelt 5245d0f555 Introduce getter and setter for the MathRenderer
Adds a new method isChanged() for determining if a value was changed.
This is done in preparation for a more elaborated caching method that is
handled inside the abstract base class.

Change-Id: Ica15f77d96453d30edd3a117c7185c694ad3691e
2013-05-03 21:12:36 +00:00

106 lines
3.4 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Test the database access and core functionallity of MathRenderer.
*
* @group Math
* @group Database //Used by needsDB
*/
class MathDatabaseTest extends MediaWikiTestCase {
var $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_STATUSCODE = 2;
const SOME_TIMESTAMP = 1272509157;
const SOME_VALIDXML = true;
const NUM_BASIC_FIELDS = 5;
/**
* 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 datbase explictly
* function addDBData() {
* $this->tablesUsed[] = 'math';
* }
* was not sufficant.
*/
protected function setup() {
global $wgDebugMath;
parent::setUp();
// TODO:figure out why this is neccessary
$this->db = wfGetDB( DB_MASTER );
// Create a new instance of MathSource
$this->renderer = $this->getMockForAbstractClass( 'MathRenderer', array ( self::SOME_TEX ) );
$this->tablesUsed[] = 'math';
self::setupTestDB( $this->db, "mathtest" );
$wgDebugMath = FALSE;
}
/**
* 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 istance to the test values
*/
public function setValues() {
// set some values
$this->renderer->setTex( self::SOME_TEX );
$this->renderer->setHtml( self::SOME_HTML );
$this->renderer->setMathml( self::SOME_MATHML );
}
/**
* Checks database access. Writes an etry and reads it back.
* @convers MathRenderer::writeDatabaseEntry()
* @convers MathRenderer::readDatabaseEntry()
*/
public function testDBBasics() {
// ;
$this->setValues();
$wgDebugMath = false;
$this->renderer->writeToDatabase();
$renderer2 = $this->getMockForAbstractClass( 'MathRenderer', array ( self::SOME_TEX ) );
$renderer2->readFromDatabase();
// comparing the class object does now work due to null values etc.
// $this->assertEquals($this->renderer,$renderer2);
$this->assertEquals( $this->renderer->getTex(), $renderer2->getTex(), "test if tex is the same" );
$this->assertEquals( $this->renderer->mathml, $renderer2->mathml, "Check MathML encoding" );
$this->assertEquals( $this->renderer->html, $renderer2->html );
}
/**
* Checks the creation of the math table without debugging endabled.
* @covers MathHooks::onLoadExtensionSchemaUpdates
*/
public function testBasicCreateTable() {
if( $this->db->getType() === 'sqlite' ) {
$this->markTestSkipped( "SQLite has global indices. We cannot " .
"create the `unitest_math` table, its math_inputhash index " .
"would conflict with the one from the real `math` table."
);
}
global $wgDebugMath;
$this->db->dropTable( "math", __METHOD__ );
$wgDebugMath = false;
$dbu = DatabaseUpdater::newForDB( $this->db );
$dbu->doUpdates( array( "extensions" ) );
$this->expectOutputRegex( '/(.*)Creating math table(.*)/' );
$this->setValues();
$this->renderer->writeToDatabase();
$res = $this->db->select( "math", "*" );
$row = $res->fetchRow();
$this->assertEquals( sizeof( $row ), 2 * self::NUM_BASIC_FIELDS );
}
}