aboutsummaryrefslogtreecommitdiffstats
path: root/lib/htmlpurifier/tests/multitest.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/htmlpurifier/tests/multitest.php')
-rw-r--r--lib/htmlpurifier/tests/multitest.php159
1 files changed, 159 insertions, 0 deletions
diff --git a/lib/htmlpurifier/tests/multitest.php b/lib/htmlpurifier/tests/multitest.php
new file mode 100644
index 000000000..ef296cdda
--- /dev/null
+++ b/lib/htmlpurifier/tests/multitest.php
@@ -0,0 +1,159 @@
+<?php
+
+/** @file
+ * Multiple PHP Versions test
+ *
+ * This file tests HTML Purifier in all versions of PHP. Arguments
+ * are specified like --arg=opt, allowed arguments are:
+ * - quiet (q), if specified no informative messages are enabled (please use
+ * this if you're outputting XML)
+ * - distro, allowed values 'normal' or 'standalone', by default all
+ * distributions are tested. "--standalone" is a shortcut for
+ * "--distro=standalone".
+ * - quick, run only the most recent versions of each release series
+ * - disable-flush, by default flush is run, this disables it
+ * - file (f), xml, type: these correspond to the parameters in index.php
+ *
+ * @note
+ * It requires a script called phpv that takes an extra argument (the
+ * version number of PHP) before all other arguments. Contact me if you'd
+ * like to set up a similar script. The name of the script can be
+ * edited with $phpv
+ *
+ * @note
+ * Also, configuration must be set up with a variable called
+ * $versions_to_test specifying version numbers to pass to $phpv
+ */
+
+define('HTMLPurifierTest', 1);
+chdir(dirname(__FILE__));
+$php = 'php'; // for safety
+
+require_once 'common.php';
+
+if (!SimpleReporter::inCli()) {
+ echo 'Multitest only available from command line';
+ exit;
+}
+
+$AC = array(); // parameters
+$AC['file'] = '';
+$AC['xml'] = false;
+$AC['quiet'] = false;
+$AC['php'] = $php;
+$AC['disable-phpt'] = false;
+$AC['disable-flush'] = false;
+$AC['type'] = '';
+$AC['distro'] = ''; // valid values are normal/standalone
+$AC['quick'] = false; // run the latest version on each release series
+$AC['standalone'] = false; // convenience for --distro=standalone
+// Legacy parameters
+$AC['only-phpt'] = false; // --type=phpt
+$AC['exclude-normal'] = false; // --distro=standalone
+$AC['exclude-standalone'] = false; // --distro=normal
+$AC['verbose'] = false;
+$aliases = array(
+ 'f' => 'file',
+ 'q' => 'quiet',
+ 'v' => 'verbose',
+);
+htmlpurifier_parse_args($AC, $aliases);
+
+// Backwards compat extra parsing
+if ($AC['only-phpt']) {
+ $AC['type'] = 'phpt';
+}
+if ($AC['exclude-normal']) $AC['distro'] = 'standalone';
+elseif ($AC['exclude-standalone']) $AC['distro'] = 'normal';
+elseif ($AC['standalone']) $AC['distro'] = 'standalone';
+
+if ($AC['xml']) {
+ $reporter = new XmlReporter();
+} else {
+ $reporter = new HTMLPurifier_SimpleTest_TextReporter($AC);
+}
+
+// Regenerate any necessary files
+if (!$AC['disable-flush']) htmlpurifier_flush($AC['php'], $reporter);
+
+$file_arg = '';
+require 'test_files.php';
+if ($AC['file']) {
+ $test_files_lookup = array_flip($test_files);
+ if (isset($test_files_lookup[$AC['file']])) {
+ $file_arg = '--file=' . $AC['file'];
+ } else {
+ throw new Exception("Invalid file passed");
+ }
+}
+// This allows us to get out of having to do dry runs.
+$size = count($test_files);
+
+$type_arg = '';
+if ($AC['type']) $type_arg = '--type=' . $AC['type'];
+
+if ($AC['quick']) {
+ $seriesArray = array();
+ foreach ($versions_to_test as $version) {
+ $series = substr($version, 0, strpos($version, '.', strpos($version, '.') + 1));
+ if (!isset($seriesArray[$series])) {
+ $seriesArray[$series] = $version;
+ continue;
+ }
+ if (version_compare($version, $seriesArray[$series], '>')) {
+ $seriesArray[$series] = $version;
+ }
+ }
+ $versions_to_test = array_values($seriesArray);
+}
+
+// Setup the test
+$test = new TestSuite('HTML Purifier Multiple Versions Test');
+foreach ($versions_to_test as $version) {
+ // Support for arbitrarily forcing flushes by wrapping the suspect
+ // version name in an array()
+ $flush_arg = '';
+ if (is_array($version)) {
+ $version = $version[0];
+ $flush_arg = '--flush';
+ }
+ if ($AC['type'] !== 'phpt') {
+ $break = true;
+ switch ($AC['distro']) {
+ case '':
+ $break = false;
+ case 'normal':
+ $test->add(
+ new CliTestCase(
+ "$phpv $version index.php --xml $flush_arg $type_arg --disable-phpt $file_arg",
+ $AC['quiet'], $size
+ )
+ );
+ if ($break) break;
+ case 'standalone':
+ $test->add(
+ new CliTestCase(
+ "$phpv $version index.php --xml $flush_arg $type_arg --standalone --disable-phpt $file_arg",
+ $AC['quiet'], $size
+ )
+ );
+ if ($break) break;
+ }
+ }
+ if (!$AC['disable-phpt'] && (!$AC['type'] || $AC['type'] == 'phpt')) {
+ $test->add(
+ new CliTestCase(
+ $AC['php'] . " index.php --xml --php \"$phpv $version\" --type=phpt",
+ $AC['quiet'], $size
+ )
+ );
+ }
+}
+
+// This is the HTML Purifier website's test XML file. We could
+// add more websites, i.e. more configurations to test.
+// $test->add(new RemoteTestCase('http://htmlpurifier.org/dev/tests/?xml=1', 'http://htmlpurifier.org/dev/tests/?xml=1&dry=1&flush=1'));
+
+$test->run($reporter);
+
+// vim: et sw=4 sts=4