--- /dev/null
+<?php
+/**
+ * @todo document
+ * @package MediaWiki
+ * @subpackage Maintenance
+ */
+
+/** */
+require_once( 'commandLine.inc' );
+include_once( 'InitialiseMessages.inc' );
+
+$wgTitle = Title::newFromText( 'Parser test script' );
+
+class ParserTest {
+ function runTestsFromFile( $filename ) {
+ $infile = fopen( $filename, 'rt' );
+ if( !$infile ) {
+ die( "Couldn't open parserTests.txt\n" );
+ }
+
+ $data = array();
+ $section = null;
+ $success = 0;
+ $total = 0;
+ $n = 0;
+ while( false !== ($line = fgets( $infile ) ) ) {
+ $n++;
+ if( preg_match( '/^!!\s*(\w+)/', $line, $matches ) ) {
+ $section = strtolower( $matches[1] );
+ if( $section == 'end' ) {
+ if( !isset( $data['test'] ) ) {
+ die( "'end' without 'test' at line $n\n" );
+ }
+ if( !isset( $data['input'] ) ) {
+ die( "'end' without 'input' at line $n\n" );
+ }
+ if( !isset( $data['result'] ) ) {
+ die( "'end' without 'result' at line $n\n" );
+ }
+ if( $this->runTest(
+ rtrim( $data['test'] ),
+ rtrim( $data['input'] ),
+ rtrim( $data['result'] ) ) ) {
+ $success++;
+ }
+ $total++;
+ $data = array();
+ $section = null;
+ continue;
+ }
+ $data[$section] = '';
+ continue;
+ }
+ if( $section ) {
+ $data[$section] .= $line;
+ }
+ }
+ if( $total > 0 ) {
+ $ratio = IntVal( 100.0 * $success / $total );
+ print "\nPassed $success of $total tests ($ratio%)\n";
+ }
+ }
+
+ /**
+ * @param string $input Wikitext to try rendering
+ * @param string $result Result to output
+ * @return bool
+ */
+ function runTest( $desc, $input, $result ) {
+ print "Running test $desc...";
+
+ $user =& new User();
+ $options =& ParserOptions::newFromUser( $user );
+ $parser =& new Parser();
+ $title =& Title::makeTitle( NS_MAIN, 'Parser_test' );
+
+ $output =& $parser->parse( $input, $title, $options );
+
+ $html = $output->getText();
+ # $languageLinks = $output->getLanguageLinks();
+ # $categoryLinks = $output->getCategoryLinks();
+
+ if( $result == rtrim( $html ) ) {
+ return $this->showSuccess( $desc );
+ } else {
+ return $this->showFailure( $desc, $result, $html );
+ }
+ }
+
+ function showSuccess( $desc ) {
+ print "ok\n";
+ return true;
+ }
+
+ function showFailure( $desc, $result, $html ) {
+ print "FAILED\n";
+ print "!! Expected:\n$result\n";
+ print "!! Received:\n$html\n!!\n";
+ return false;
+ }
+}
+
+$tester =& new ParserTest();
+$tester->runTestsFromFile( 'maintenance/parserTests.txt' );
+
+?>
\ No newline at end of file
--- /dev/null
+!! test
+Blank input
+!! input
+!! result
+!! end
+
+!! test
+Simple paragraph
+!! input
+This is a simple paragraph.
+!! result
+<p>This is a simple paragraph.
+</p>
+!! end
+
+!! test
+Simple list
+!! input
+* Item 1
+* Item 2
+!! result
+<ul><li> Item 1
+</li><li> Item 2
+</li></ul>
+!! end
+
+!! test
+Italics and bold
+!! input
+* plain
+* plain''italic''plain
+* plain''italic''plain''italic''plain
+* plain'''bold'''plain
+* plain'''bold'''plain'''bold'''plain
+* plain''italic''plain'''bold'''plain
+* plain'''bold'''plain''italic''plain
+* plain''italic'''bold-italic'''italic''plain
+* plain'''bold''bold-italic''bold'''plain
+* plain'''''bold-italic'''italic''plain
+* plain'''''bold-italic''bold'''plain
+* plain''italic'''bold-italic'''''plain
+* plain'''bold''bold-italic'''''plain
+* plain l'''italic''plain
+!! result
+<ul><li> plain
+</li><li> plain<i>italic</i>plain
+</li><li> plain<i>italic</i>plain<i>italic</i>plain
+</li><li> plain<b>bold</b>plain
+</li><li> plain<b>bold</b>plain<b>bold</b>plain
+</li><li> plain<i>italic</i>plain<b>bold</b>plain
+</li><li> plain<b>bold</b>plain<i>italic</i>plain
+</li><li> plain<i>italic<b>bold-italic</b>italic</i>plain
+</li><li> plain<b>bold<i>bold-italic</i>bold</b>plain
+</li><li> plain<i><b>bold-italic</b>italic</i>plain
+</li><li> plain<b><i>bold-italic</i>bold</b>plain
+</li><li> plain<i>italic<b>bold-italic</b></i>plain
+</li><li> plain<b>bold<i>bold-italic</i></b>plain
+</li><li> plain l'<i>italic</i>plain
+</li></ul>
+!! end