mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Math
synced 2024-11-27 17:01:07 +00:00
Add Tests and Downloader for Chem Input Types
Bug: T321262 Change-Id: I4e0af8ab0eaa02829dffb7ff5fccc4564ed5c1ba
This commit is contained in:
parent
caf3a1e26b
commit
d2bd2f4554
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -5,6 +5,7 @@ vendor
|
|||
composer.lock
|
||||
/tests/selenium/log
|
||||
en-wiki-formulae.json
|
||||
chem-regression.json
|
||||
# Editors
|
||||
*.kate-swp
|
||||
*~
|
||||
|
|
17
maintenance/downloadMoreTexVCtests.sh
Executable file
17
maintenance/downloadMoreTexVCtests.sh
Executable file
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Downloads files which contain input and supposed output for some tests of TexVC within this extension.
|
||||
|
||||
# The tests are deactivated by default. They can be found and activated with a flag in:
|
||||
# - EnWikiFormulaeTest.php
|
||||
# - ChemRegressionTest.php
|
||||
|
||||
# Downloads the file containing all english wikipedia formula to the testfolder
|
||||
FILEPATH=../tests/phpunit/unit/TexVC/en-wiki-formulae.json
|
||||
URL=https://raw.githubusercontent.com/wikimedia/mediawiki-services-texvcjs/fb56991251b8889b554fc42ef9fe4825bc35d0ed/test/en-wiki-formulae.json
|
||||
curl $URL -o $FILEPATH
|
||||
|
||||
# Downloads the file containing for chem-regression tests to the testfolder
|
||||
FILEPATH=../tests/phpunit/unit/TexVC/chem-regression.json
|
||||
URL=https://raw.githubusercontent.com/wikimedia/mediawiki-services-texvcjs/fb56991251b8889b554fc42ef9fe4825bc35d0ed/test/chem-regression.json
|
||||
curl $URL -o $FILEPATH
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/bash
|
||||
# Downloads the file containing all english wikipedia formula to the testfolder
|
||||
# this is required for running the corresponding tests in EnWikiFormulaeTest.php locally.
|
||||
# Mind that the tests have to be activated in the php file.
|
||||
FILEPATH=../tests/phpunit/unit/TexVC/en-wiki-formulae.json
|
||||
URL=https://raw.githubusercontent.com/wikimedia/mediawiki-services-texvcjs/fb56991251b8889b554fc42ef9fe4825bc35d0ed/test/en-wiki-formulae.json
|
||||
curl $URL -o $FILEPATH
|
98
tests/phpunit/unit/TexVC/ChemRegressionTest.php
Normal file
98
tests/phpunit/unit/TexVC/ChemRegressionTest.php
Normal file
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\Math\Tests\TexVC;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use MediaWiki\Extension\Math\TexVC\TexVC;
|
||||
use MediaWikiUnitTestCase;
|
||||
|
||||
/**
|
||||
* @covers \MediaWiki\Extension\Math\TexVC\TexVC
|
||||
* @covers \MediaWiki\Extension\Math\TexVC\Parser
|
||||
* @group Stub
|
||||
*/
|
||||
class ChemRegressionTest extends MediaWikiUnitTestCase {
|
||||
private $texVC;
|
||||
private $ACTIVE = true; # indicate whether this test is active
|
||||
private $FILENAME = "chem-regression.json";
|
||||
private $CHUNKSIZE = 100;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
$this->texVC = new TexVC();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the json file to an object
|
||||
* @throws InvalidArgumentException File with testcases does not exists.
|
||||
* @return array json with testcases
|
||||
*/
|
||||
private function getJSON() {
|
||||
$filePath = __DIR__ . '/' . $this->FILENAME;
|
||||
if ( !file_exists( $filePath ) ) {
|
||||
throw new InvalidArgumentException( "No testfile found at specified path: " . $filePath );
|
||||
}
|
||||
$file = file_get_contents( $filePath );
|
||||
$json = json_decode( $file, true );
|
||||
return $json;
|
||||
}
|
||||
|
||||
private function mkgroups( $arr, $n ) {
|
||||
$result = [];
|
||||
$group = [];
|
||||
$seen = [];
|
||||
foreach ( $arr as $elem ) {
|
||||
if ( array_key_exists( $elem["input"], $seen ) ) {
|
||||
continue;
|
||||
} else {
|
||||
$seen[$elem["input"]] = true;
|
||||
}
|
||||
array_push( $group, $elem );
|
||||
if ( count( $group ) >= $n ) {
|
||||
array_push( $result, $group );
|
||||
$group = [];
|
||||
}
|
||||
}
|
||||
if ( count( $group ) > 0 ) {
|
||||
array_push( $result, $group );
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function testAllChemRegression() {
|
||||
if ( !$this->ACTIVE ) {
|
||||
$this->markTestSkipped( "Chem-Regression test not active and skipped. Can be activated in test-flag." );
|
||||
return;
|
||||
}
|
||||
|
||||
$texVC = new TexVC();
|
||||
$groups = $this->mkgroups( $this->getJSON(), $this->CHUNKSIZE );
|
||||
foreach ( $groups as $group ) {
|
||||
foreach ( $group as $testcase ) {
|
||||
$testHash = $testcase["inputhash"];
|
||||
$f = $testcase["input"];
|
||||
$type = $testcase["type"];
|
||||
try {
|
||||
$options = [
|
||||
"debug" => false,
|
||||
"usemathrm" => false,
|
||||
"oldtexvc" => false
|
||||
];
|
||||
|
||||
if ( $type === "chem" ) {
|
||||
$options["usemhchem"] = true;
|
||||
}
|
||||
|
||||
$result = $texVC->check( $testcase["input"], $options );
|
||||
$this->assertEquals( '+', $result["status"], $testHash . " with input: " . $f );
|
||||
} catch ( PhpPegJs\SyntaxError $ex ) {
|
||||
$message = "Syntax error: " . $ex->getMessage() .
|
||||
' at line ' . $ex->grammarLine . ' column ' .
|
||||
$ex->grammarColumn . ' offset ' . $ex->grammarOffset;
|
||||
|
||||
$this->assertTrue( false, $message );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -11,7 +11,7 @@ use MediaWikiUnitTestCase;
|
|||
* All assertions are currently deactivated, cause high memory load on CI.
|
||||
* These tests can be run locally by enabling the ACTIVE flag.
|
||||
* File download of the json-input can be done by running:
|
||||
* $ cd maintenance && ./downloadWikipediaEnFormulae.sh
|
||||
* $ cd maintenance && ./downloadMoreTexVCtests.sh
|
||||
* @covers \MediaWiki\Extension\Math\TexVC\Parser
|
||||
* @group Stub
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue