wiki.techinc.nl/tests/phpunit/suites/ParserTestFileSuite.php
C. Scott Ananian 71aa8e0e0d Add support for running parsertests with Parsoid in integrated mode
This allows us to move Parsoid-specific extension code from the
Parsoid repo into the extension's own repository and still have
Parsoid parser tests run on it via core's mechanism for running
extension tests.

Factored out some common ParserOptions setup into a common helper
function.  There are a number of features still missing from the
Parsoid test runner, which are marked with @todo comments and
phab task numbers.

Bug: T254181
Change-Id: Ifaf53862b96e9127d8f375ad8dd0cc362cba9f5b
2020-12-23 15:50:50 -05:00

58 lines
1.5 KiB
PHP

<?php
use PHPUnit\Framework\TestSuite;
use Wikimedia\ScopedCallback;
/**
* This is the suite class for running tests with the legacy parser
* within a single .txt source file.
* It is not invoked directly. Use --filter to select files, or
* use parserTests.php.
*/
class ParserTestFileSuite extends TestSuite {
use SuiteEventsTrait;
private $ptRunner;
private $ptFileName;
private $ptFileInfo;
/** @var ScopedCallback */
private $ptTeardownScope;
public function __construct( $runner, $name, $fileName ) {
parent::__construct( $name );
$this->ptRunner = $runner;
$this->ptFileName = $fileName;
try {
$this->ptFileInfo = TestFileReader::read( $this->ptFileName );
} catch ( \Exception $e ) {
// Friendlier wrapping for any syntax errors that might occur.
throw new MWException(
$fileName . ': ' . $e->getMessage()
);
}
if ( !$this->ptRunner->meetsRequirements( $this->ptFileInfo['fileOptions']['requirements'] ?? [] ) ) {
$skipMessage = 'required extension not enabled';
} else {
$skipMessage = null;
}
foreach ( $this->ptFileInfo['tests'] as $test ) {
$test['parsoid'] = false;
$this->addTest( new ParserIntegrationTest( $runner, $fileName, $test, $skipMessage ),
[ 'Database', 'Parser', 'ParserTests' ] );
}
}
protected function setUp() : void {
$this->ptTeardownScope = $this->ptRunner->addArticles(
$this->ptFileInfo[ 'articles']
);
}
protected function tearDown() : void {
if ( $this->ptTeardownScope ) {
ScopedCallback::consume( $this->ptTeardownScope );
}
}
}