45 if ( !$this->db->tableExists(
'testrun', __METHOD__ )
46 || !$this->db->tableExists(
'testitem', __METHOD__ )
48 print "WARNING> `testrun` table not found in database.\n";
49 $this->prevRun =
false;
52 $this->prevRun = $this->db->selectField(
'testrun',
'MAX(tr_id)' );
59 $this->results[$test[
'desc']] = $result->isSuccess() ? 1 : 0;
63 if ( $this->prevRun ) {
67 'fp' =>
'previously failing test(s) now PASSING! :)',
68 'pn' =>
'previously PASSING test(s) removed o_O',
69 'np' =>
'new PASSING test(s) :)',
71 'pf' =>
'previously passing test(s) now FAILING! :(',
72 'fn' =>
'previously FAILING test(s) removed O_o',
73 'nf' =>
'new FAILING test(s) :(',
74 'ff' =>
'still FAILING test(s) :(',
79 $res = $this->db->select(
'testitem', [
'ti_name',
'ti_success' ],
80 [
'ti_run' => $this->prevRun ], __METHOD__ );
83 foreach (
$res as $row ) {
85 $prevResults[$row->ti_name] = $row->ti_success;
89 $combined = array_keys( $this->results + $prevResults );
91 # Determine breakdown by change type
93 foreach ( $combined as $test ) {
94 if ( !isset( $prevResults[$test] ) ) {
96 } elseif ( $prevResults[$test] == 1 ) {
102 if ( !isset( $this->results[$test] ) ) {
104 } elseif ( $this->results[$test] == 1 ) {
110 $code = $before . $after;
112 if ( isset( $table[
$code] ) ) {
118 foreach ( $table as
$code => $label ) {
119 if ( !empty( $breakdown[
$code] ) ) {
120 $count = count( $breakdown[
$code] );
121 printf(
"\n%4d %s\n", $count, $label );
123 foreach ( $breakdown[
$code] as $differing_test_name => $statusInfo ) {
124 print " * $differing_test_name [$statusInfo]\n";
129 print "No previous test runs to compare against.\n";
145 if ( $after ==
'n' ) {
146 $changedRun = $this->db->selectField(
'testitem',
148 [
'ti_name' => $testname ],
150 $appear = $this->db->selectRow(
'testrun',
151 [
'tr_date',
'tr_mw_version' ],
152 [
'tr_id' => $changedRun ],
155 return "First recorded appearance: "
156 . date(
"d-M-Y H:i:s", strtotime( $appear->tr_date ) )
157 .
", " . $appear->tr_mw_version;
163 'ti_name' => $testname,
164 'ti_success' => ( $after ==
'f' ?
"1" :
"0" ) ];
166 if ( $this->curRun ) {
167 $conds[] =
"ti_run != " . $this->db->addQuotes( $this->curRun );
170 $changedRun = $this->db->selectField(
'testitem',
'MAX(ti_run)', $conds, __METHOD__ );
173 if ( is_null( $changedRun ) ) {
174 if ( $after ==
"f" ) {
175 return "Has never passed";
177 return "Has never failed";
184 $pre = $this->db->selectRow(
'testrun',
185 [
'tr_date',
'tr_mw_version' ],
186 [
'tr_id' => $changedRun ],
188 $post = $this->db->selectRow(
'testrun',
189 [
'tr_date',
'tr_mw_version' ],
190 [
"tr_id > " . $this->db->addQuotes( $changedRun ) ],
192 [
"LIMIT" => 1,
"ORDER BY" =>
'tr_id' ]
196 $postDate = date(
"d-M-Y H:i:s", strtotime( $post->tr_date ) ) .
", {$post->tr_mw_version}";
201 return ( $after ==
"f" ?
"Introduced" :
"Fixed" ) .
" between "
202 . date(
"d-M-Y H:i:s", strtotime(
$pre->tr_date ) ) .
", " .
$pre->tr_mw_version
record( $test, ParserTestResult $result)
Called after each test.
getTestStatusInfo( $testname, $after)
Returns a string giving information about when a test last had a status change.
report()
Called before finishing the test run.
start()
Set up result recording; insert a record for the run with the date and all that fun stuff.
__construct( $db, $filter=false)
This should be called before the table prefix is changed.
Represent the result of a parser test.
Interface to record parser test results.
return true to allow those checks to and false if checking is done remove or add to the links of a group of changes in EnhancedChangesList Hook subscribers can return false to omit this line from recentchanges use this to change the tables headers change it to an object instance and return false override the list derivative used the name of the old file when set the default code will be skipped $pre
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that probably a stub it is not rendered in wiki pages or galleries in category pages allow injecting custom HTML after the section Any uses of the hook need to handle escaping see BaseTemplate::getToolbox and BaseTemplate::makeListItem for details on the format of individual items inside of this array or by returning and letting standard HTTP rendering take place modifiable or by returning false and taking over the output modifiable & $code