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
58 lines
1.5 KiB
PHP
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 );
|
|
}
|
|
}
|
|
}
|