160 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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
 | 
