0
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2024-12-23 17:01:51 +00:00
htmlpurifier/tests/multitest.php

156 lines
4.9 KiB
PHP
Raw Normal View History

<?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
$aliases = array(
'f' => 'file',
'q' => 'quiet',
);
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 TextReporter();
}
// 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);