|
- <?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
|