We introduced a new type for "ParserTestMode" and then uniformly pass this around alongside the ParserTest object itself. (We started by using a string for the $mode but the "explicit changetree" mode requires more structured data. We *could* encode this in JSON just to keep the string type around, but it seems cleaner and more future proof to wrap this in a proper class type.) Removed the old TestFileReader wrapper class, which served only as a thunk to convert the new Test class into the same sort of array which the legacy parser test runner code expected. There's still some remaining ::testToArray() usage here for the TestRecorder framework, but that will be cleaned up in a future patch. Also updated the TestRecorder with stronger types: use the same <Test,TestMode> pair when invoking the TestRecorder, instead of the loosely typed array we'd used previously. Change-Id: Iec4c0c7972a655b4faccacc67bdc3ca66d4c163d
59 lines
1.4 KiB
PHP
59 lines
1.4 KiB
PHP
<?php
|
|
|
|
use MediaWiki\Tests\TestMode as ParserTestMode;
|
|
use Wikimedia\Parsoid\ParserTests\Test as ParserTest;
|
|
|
|
/**
|
|
* This is a TestRecorder representing a collection of other TestRecorders.
|
|
* It proxies calls to all constituent objects.
|
|
*/
|
|
class MultiTestRecorder extends TestRecorder {
|
|
/** @var TestRecorder[] */
|
|
private $recorders = [];
|
|
|
|
public function addRecorder( TestRecorder $recorder ) {
|
|
$this->recorders[] = $recorder;
|
|
}
|
|
|
|
private function proxy( $funcName, $args ) {
|
|
foreach ( $this->recorders as $recorder ) {
|
|
$recorder->$funcName( ...$args );
|
|
}
|
|
}
|
|
|
|
public function start() {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
|
|
public function startTest( ParserTest $test, ParserTestMode $mode ) {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
|
|
public function startSuite( string $path ) {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
|
|
public function endSuite( string $path ) {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
|
|
public function record( ParserTestResult $result ) {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
|
|
public function warning( string $message ) {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
|
|
public function skipped( ParserTest $test, ParserTestMode $mode, string $reason ) {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
|
|
public function report() {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
|
|
public function end() {
|
|
$this->proxy( __FUNCTION__, func_get_args() );
|
|
}
|
|
}
|