Hoo man has uploaded a new change for review.
https://gerrit.wikimedia.org/r/71571
Change subject: Allow running the AbuseFilter parser tests via phpunit
......................................................................
Allow running the AbuseFilter parser tests via phpunit
I've also added myself to the credits file as I'm the only
maintainer of this extension for a while now.
Change-Id: Id998172ea2abd70b8243de9db1a96cc2cfa47a64
---
M AbuseFilter.hooks.php
M AbuseFilter.php
R tests/legacyParserTest.php
R tests/parserTests/arith.r
R tests/parserTests/arith.t
R tests/parserTests/arrays.r
R tests/parserTests/arrays.t
R tests/parserTests/bug25373.r
R tests/parserTests/bug25373.t
R tests/parserTests/cast.r
R tests/parserTests/cast.t
R tests/parserTests/ccnorm.r
R tests/parserTests/ccnorm.t
R tests/parserTests/comment.r
R tests/parserTests/comment.t
R tests/parserTests/count.r
R tests/parserTests/count.t
R tests/parserTests/eq.r
R tests/parserTests/eq.t
R tests/parserTests/float.r
R tests/parserTests/float.t
R tests/parserTests/ifthen.r
R tests/parserTests/ifthen.t
R tests/parserTests/in.r
R tests/parserTests/in.t
R tests/parserTests/lcase.r
R tests/parserTests/lcase.t
R tests/parserTests/length.r
R tests/parserTests/length.t
R tests/parserTests/like.r
R tests/parserTests/like.t
R tests/parserTests/norm.r
R tests/parserTests/norm.t
R tests/parserTests/numbers.r
R tests/parserTests/numbers.t
R tests/parserTests/ord.r
R tests/parserTests/ord.t
R tests/parserTests/prec.r
R tests/parserTests/prec.t
R tests/parserTests/regex.r
R tests/parserTests/regex.t
R tests/parserTests/rmdoubles.r
R tests/parserTests/rmdoubles.t
R tests/parserTests/rmspecials.r
R tests/parserTests/rmspecials.t
R tests/parserTests/specialratio.r
R tests/parserTests/specialratio.t
R tests/parserTests/string.r
R tests/parserTests/string.t
R tests/parserTests/tern.r
R tests/parserTests/tern.t
R tests/parserTests/ucase.r
R tests/parserTests/ucase.t
R tests/parserTests/utf8.r
R tests/parserTests/utf8.t
R tests/parserTests/vars.r
R tests/parserTests/vars.t
R tests/parserTests/whitespace.r
R tests/parserTests/whitespace1.r
R tests/parserTests/whitespace1.t
R tests/parserTests/wptest1.r
R tests/parserTests/wptest1.t
R tests/parserTests/wptest2.r
R tests/parserTests/wptest2.t
R tests/parserTests/wptest3.r
R tests/parserTests/wptest3.t
A tests/phpunit/parserTest.php
67 files changed, 97 insertions(+), 4 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/AbuseFilter
refs/changes/71/71571/1
diff --git a/AbuseFilter.hooks.php b/AbuseFilter.hooks.php
index 96b421c..31e7871 100644
--- a/AbuseFilter.hooks.php
+++ b/AbuseFilter.hooks.php
@@ -560,4 +560,23 @@
}
return true;
}
+
+ /**
+ * Hook to add PHPUnit test cases.
+ * @see https://www.mediawiki.org/wiki/Manual:Hooks/UnitTestsList
+ *
+ * @param array $files
+ *
+ * @return bool
+ */
+ public static function onUnitTestsList( array &$files ) {
+ $testDir = __DIR__ . '/tests/phpunit';
+
+ $files = array_merge(
+ $files,
+ glob( $testDir . '/*Test.php' )
+ );
+
+ return true;
+ }
}
diff --git a/AbuseFilter.php b/AbuseFilter.php
index 67ceddc..aa79051 100644
--- a/AbuseFilter.php
+++ b/AbuseFilter.php
@@ -18,7 +18,7 @@
$wgExtensionCredits['antispam'][] = array(
'path' => __FILE__,
'name' => 'Abuse Filter',
- 'author' => array( 'Andrew Garrett', 'River Tarnell', 'Victor Vasiliev'
),
+ 'author' => array( 'Andrew Garrett', 'River Tarnell', 'Victor
Vasiliev', 'Marius Hoch' ),
'descriptionmsg' => 'abusefilter-desc',
'url' => 'https://www.mediawiki.org/wiki/Extension:AbuseFilter',
);
@@ -87,6 +87,7 @@
$wgHooks['UploadVerifyFile'][] = 'AbuseFilterHooks::onUploadVerifyFile';
$wgHooks['MakeGlobalVariablesScript'][] =
'AbuseFilterHooks::onMakeGlobalVariablesScript';
$wgHooks['ArticleSaveComplete'][] = 'AbuseFilterHooks::onArticleSaveComplete';
+$wgHooks['UnitTestsList'][] = 'AbuseFilterHooks::onUnitTestsList';
$wgAvailableRights[] = 'abusefilter-modify';
$wgAvailableRights[] = 'abusefilter-log-detail';
diff --git a/phpTest.php b/tests/legacyParserTest.php
similarity index 86%
rename from phpTest.php
rename to tests/legacyParserTest.php
index 97ae897..36efd08 100644
--- a/phpTest.php
+++ b/tests/legacyParserTest.php
@@ -5,11 +5,11 @@
require_once ( getenv( 'MW_INSTALL_PATH' ) !== false
? getenv( 'MW_INSTALL_PATH' ) . "/maintenance/commandLine.inc"
- : __DIR__ . '/../../maintenance/commandLine.inc' );
+ : __DIR__ . '/../../../maintenance/commandLine.inc' );
$tester = new AbuseFilterParser;
-$test_path = __DIR__ . "/tests";
+$test_path = __DIR__ . "/parserTests";
$tests = glob( $test_path . "/*.t" );
$check = 0;
@@ -19,7 +19,7 @@
$result = substr( $test, 0, - 2 ) . ".r";
$rule = trim( file_get_contents( $test ) );
- $output = ( $cont = trim( file_get_contents( $result ) ) ) == 'MATCH';
+ $output = trim( file_get_contents( $result ) ) == 'MATCH';
$testname = basename( $test );
diff --git a/tests/arith.r b/tests/parserTests/arith.r
similarity index 100%
rename from tests/arith.r
rename to tests/parserTests/arith.r
diff --git a/tests/arith.t b/tests/parserTests/arith.t
similarity index 100%
rename from tests/arith.t
rename to tests/parserTests/arith.t
diff --git a/tests/arrays.r b/tests/parserTests/arrays.r
similarity index 100%
rename from tests/arrays.r
rename to tests/parserTests/arrays.r
diff --git a/tests/arrays.t b/tests/parserTests/arrays.t
similarity index 100%
rename from tests/arrays.t
rename to tests/parserTests/arrays.t
diff --git a/tests/bug25373.r b/tests/parserTests/bug25373.r
similarity index 100%
rename from tests/bug25373.r
rename to tests/parserTests/bug25373.r
diff --git a/tests/bug25373.t b/tests/parserTests/bug25373.t
similarity index 100%
rename from tests/bug25373.t
rename to tests/parserTests/bug25373.t
diff --git a/tests/cast.r b/tests/parserTests/cast.r
similarity index 100%
rename from tests/cast.r
rename to tests/parserTests/cast.r
diff --git a/tests/cast.t b/tests/parserTests/cast.t
similarity index 100%
rename from tests/cast.t
rename to tests/parserTests/cast.t
diff --git a/tests/ccnorm.r b/tests/parserTests/ccnorm.r
similarity index 100%
rename from tests/ccnorm.r
rename to tests/parserTests/ccnorm.r
diff --git a/tests/ccnorm.t b/tests/parserTests/ccnorm.t
similarity index 100%
rename from tests/ccnorm.t
rename to tests/parserTests/ccnorm.t
diff --git a/tests/comment.r b/tests/parserTests/comment.r
similarity index 100%
rename from tests/comment.r
rename to tests/parserTests/comment.r
diff --git a/tests/comment.t b/tests/parserTests/comment.t
similarity index 100%
rename from tests/comment.t
rename to tests/parserTests/comment.t
diff --git a/tests/count.r b/tests/parserTests/count.r
similarity index 100%
rename from tests/count.r
rename to tests/parserTests/count.r
diff --git a/tests/count.t b/tests/parserTests/count.t
similarity index 100%
rename from tests/count.t
rename to tests/parserTests/count.t
diff --git a/tests/eq.r b/tests/parserTests/eq.r
similarity index 100%
rename from tests/eq.r
rename to tests/parserTests/eq.r
diff --git a/tests/eq.t b/tests/parserTests/eq.t
similarity index 100%
rename from tests/eq.t
rename to tests/parserTests/eq.t
diff --git a/tests/float.r b/tests/parserTests/float.r
similarity index 100%
rename from tests/float.r
rename to tests/parserTests/float.r
diff --git a/tests/float.t b/tests/parserTests/float.t
similarity index 100%
rename from tests/float.t
rename to tests/parserTests/float.t
diff --git a/tests/ifthen.r b/tests/parserTests/ifthen.r
similarity index 100%
rename from tests/ifthen.r
rename to tests/parserTests/ifthen.r
diff --git a/tests/ifthen.t b/tests/parserTests/ifthen.t
similarity index 100%
rename from tests/ifthen.t
rename to tests/parserTests/ifthen.t
diff --git a/tests/in.r b/tests/parserTests/in.r
similarity index 100%
rename from tests/in.r
rename to tests/parserTests/in.r
diff --git a/tests/in.t b/tests/parserTests/in.t
similarity index 100%
rename from tests/in.t
rename to tests/parserTests/in.t
diff --git a/tests/lcase.r b/tests/parserTests/lcase.r
similarity index 100%
rename from tests/lcase.r
rename to tests/parserTests/lcase.r
diff --git a/tests/lcase.t b/tests/parserTests/lcase.t
similarity index 100%
rename from tests/lcase.t
rename to tests/parserTests/lcase.t
diff --git a/tests/length.r b/tests/parserTests/length.r
similarity index 100%
rename from tests/length.r
rename to tests/parserTests/length.r
diff --git a/tests/length.t b/tests/parserTests/length.t
similarity index 100%
rename from tests/length.t
rename to tests/parserTests/length.t
diff --git a/tests/like.r b/tests/parserTests/like.r
similarity index 100%
rename from tests/like.r
rename to tests/parserTests/like.r
diff --git a/tests/like.t b/tests/parserTests/like.t
similarity index 100%
rename from tests/like.t
rename to tests/parserTests/like.t
diff --git a/tests/norm.r b/tests/parserTests/norm.r
similarity index 100%
rename from tests/norm.r
rename to tests/parserTests/norm.r
diff --git a/tests/norm.t b/tests/parserTests/norm.t
similarity index 100%
rename from tests/norm.t
rename to tests/parserTests/norm.t
diff --git a/tests/numbers.r b/tests/parserTests/numbers.r
similarity index 100%
rename from tests/numbers.r
rename to tests/parserTests/numbers.r
diff --git a/tests/numbers.t b/tests/parserTests/numbers.t
similarity index 100%
rename from tests/numbers.t
rename to tests/parserTests/numbers.t
diff --git a/tests/ord.r b/tests/parserTests/ord.r
similarity index 100%
rename from tests/ord.r
rename to tests/parserTests/ord.r
diff --git a/tests/ord.t b/tests/parserTests/ord.t
similarity index 100%
rename from tests/ord.t
rename to tests/parserTests/ord.t
diff --git a/tests/prec.r b/tests/parserTests/prec.r
similarity index 100%
rename from tests/prec.r
rename to tests/parserTests/prec.r
diff --git a/tests/prec.t b/tests/parserTests/prec.t
similarity index 100%
rename from tests/prec.t
rename to tests/parserTests/prec.t
diff --git a/tests/regex.r b/tests/parserTests/regex.r
similarity index 100%
rename from tests/regex.r
rename to tests/parserTests/regex.r
diff --git a/tests/regex.t b/tests/parserTests/regex.t
similarity index 100%
rename from tests/regex.t
rename to tests/parserTests/regex.t
diff --git a/tests/rmdoubles.r b/tests/parserTests/rmdoubles.r
similarity index 100%
rename from tests/rmdoubles.r
rename to tests/parserTests/rmdoubles.r
diff --git a/tests/rmdoubles.t b/tests/parserTests/rmdoubles.t
similarity index 100%
rename from tests/rmdoubles.t
rename to tests/parserTests/rmdoubles.t
diff --git a/tests/rmspecials.r b/tests/parserTests/rmspecials.r
similarity index 100%
rename from tests/rmspecials.r
rename to tests/parserTests/rmspecials.r
diff --git a/tests/rmspecials.t b/tests/parserTests/rmspecials.t
similarity index 100%
rename from tests/rmspecials.t
rename to tests/parserTests/rmspecials.t
diff --git a/tests/specialratio.r b/tests/parserTests/specialratio.r
similarity index 100%
rename from tests/specialratio.r
rename to tests/parserTests/specialratio.r
diff --git a/tests/specialratio.t b/tests/parserTests/specialratio.t
similarity index 100%
rename from tests/specialratio.t
rename to tests/parserTests/specialratio.t
diff --git a/tests/string.r b/tests/parserTests/string.r
similarity index 100%
rename from tests/string.r
rename to tests/parserTests/string.r
diff --git a/tests/string.t b/tests/parserTests/string.t
similarity index 100%
rename from tests/string.t
rename to tests/parserTests/string.t
diff --git a/tests/tern.r b/tests/parserTests/tern.r
similarity index 100%
rename from tests/tern.r
rename to tests/parserTests/tern.r
diff --git a/tests/tern.t b/tests/parserTests/tern.t
similarity index 100%
rename from tests/tern.t
rename to tests/parserTests/tern.t
diff --git a/tests/ucase.r b/tests/parserTests/ucase.r
similarity index 100%
rename from tests/ucase.r
rename to tests/parserTests/ucase.r
diff --git a/tests/ucase.t b/tests/parserTests/ucase.t
similarity index 100%
rename from tests/ucase.t
rename to tests/parserTests/ucase.t
diff --git a/tests/utf8.r b/tests/parserTests/utf8.r
similarity index 100%
rename from tests/utf8.r
rename to tests/parserTests/utf8.r
diff --git a/tests/utf8.t b/tests/parserTests/utf8.t
similarity index 100%
rename from tests/utf8.t
rename to tests/parserTests/utf8.t
diff --git a/tests/vars.r b/tests/parserTests/vars.r
similarity index 100%
rename from tests/vars.r
rename to tests/parserTests/vars.r
diff --git a/tests/vars.t b/tests/parserTests/vars.t
similarity index 100%
rename from tests/vars.t
rename to tests/parserTests/vars.t
diff --git a/tests/whitespace.r b/tests/parserTests/whitespace.r
similarity index 100%
rename from tests/whitespace.r
rename to tests/parserTests/whitespace.r
diff --git a/tests/whitespace1.r b/tests/parserTests/whitespace1.r
similarity index 100%
rename from tests/whitespace1.r
rename to tests/parserTests/whitespace1.r
diff --git a/tests/whitespace1.t b/tests/parserTests/whitespace1.t
similarity index 100%
rename from tests/whitespace1.t
rename to tests/parserTests/whitespace1.t
diff --git a/tests/wptest1.r b/tests/parserTests/wptest1.r
similarity index 100%
rename from tests/wptest1.r
rename to tests/parserTests/wptest1.r
diff --git a/tests/wptest1.t b/tests/parserTests/wptest1.t
similarity index 100%
rename from tests/wptest1.t
rename to tests/parserTests/wptest1.t
diff --git a/tests/wptest2.r b/tests/parserTests/wptest2.r
similarity index 100%
rename from tests/wptest2.r
rename to tests/parserTests/wptest2.r
diff --git a/tests/wptest2.t b/tests/parserTests/wptest2.t
similarity index 100%
rename from tests/wptest2.t
rename to tests/parserTests/wptest2.t
diff --git a/tests/wptest3.r b/tests/parserTests/wptest3.r
similarity index 100%
rename from tests/wptest3.r
rename to tests/parserTests/wptest3.r
diff --git a/tests/wptest3.t b/tests/parserTests/wptest3.t
similarity index 100%
rename from tests/wptest3.t
rename to tests/parserTests/wptest3.t
diff --git a/tests/phpunit/parserTest.php b/tests/phpunit/parserTest.php
new file mode 100644
index 0000000..8d1f6a2
--- /dev/null
+++ b/tests/phpunit/parserTest.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Tests for the AbuseFilter parser
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ *
+ * @group Test
+ * @group AbuseFilter
+ *
+ * @licence GNU GPL v2+
+ * @author Marius Hoch < [email protected] >
+ */
+class AbuseFilterParserTest extends \MediaWikiTestCase {
+ /**
+ * @return AbuseFilterParser
+ */
+ static function getParser() {
+ static $parser = null;
+ if ( !$parser ) {
+ $parser = new AbuseFilterParser();
+ }
+ return $parser;
+ }
+
+ /**
+ * @dataProvider readTests
+ */
+ public function testParser( $testName, $rule, $expected ) {
+ $parser = self::getParser();
+ $actual = $parser->parse( $rule );
+ $this->assertEquals( $expected, $actual, 'Running parser test '
. $testName );
+ }
+
+ /**
+ * @return array
+ */
+ public function readTests() {
+ $tests = array();
+ $testPath = __DIR__ . "/../parserTests";
+ $testFiles = glob( $testPath . "/*.t" );
+
+ foreach ( $testFiles as $testFile ) {
+ $testName = substr( $testFile, 0, - 2 );
+
+ $resultFile = $testName . '.r';
+ $rule = trim( file_get_contents( $testFile ) );
+ $result = trim( file_get_contents( $resultFile ) ) ==
'MATCH';
+
+ $tests[] = array(
+ basename( $testName ),
+ $rule,
+ $result
+ );
+ }
+
+ return $tests;
+ }
+}
--
To view, visit https://gerrit.wikimedia.org/r/71571
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id998172ea2abd70b8243de9db1a96cc2cfa47a64
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/AbuseFilter
Gerrit-Branch: master
Gerrit-Owner: Hoo man <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits