494 lines
27 KiB
PHP
494 lines
27 KiB
PHP
<?php
|
|
/**
|
|
* Test suite for the PHP_CompatInfo_Cli class
|
|
*
|
|
* PHP version 5
|
|
*
|
|
* @category PHP
|
|
* @package PHP_CompatInfo
|
|
* @author Laurent Laville <pear@laurent-laville.org>
|
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD
|
|
* @version CVS: $Id: PHP_CompatInfo_TestSuite_Cli.php,v 1.26 2008/12/18 23:06:45 farell Exp $
|
|
* @link http://pear.php.net/package/PHP_CompatInfo
|
|
* @since File available since Release 1.6.0
|
|
*/
|
|
if (!defined("PHPUnit_MAIN_METHOD")) {
|
|
define("PHPUnit_MAIN_METHOD", "PHP_CompatInfo_TestSuite_Cli::main");
|
|
}
|
|
|
|
require_once "PHPUnit/Framework/TestCase.php";
|
|
require_once "PHPUnit/Framework/TestSuite.php";
|
|
|
|
require_once 'PHP/CompatInfo/Cli.php';
|
|
|
|
/**
|
|
* Test suite class to test standard PHP_CompatInfo API.
|
|
*
|
|
* @category PHP
|
|
* @package PHP_CompatInfo
|
|
* @author Laurent Laville <pear@laurent-laville.org>
|
|
* @license http://www.opensource.org/licenses/bsd-license.php BSD
|
|
* @version Release: @package_version@
|
|
* @link http://pear.php.net/package/PHP_CompatInfo
|
|
* @since File available since Release 1.6.0
|
|
*/
|
|
class PHP_CompatInfo_TestSuite_Cli extends PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* A PCI object
|
|
* @var object
|
|
*/
|
|
protected $pci;
|
|
|
|
/**
|
|
* Runs the test methods of this class.
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function main()
|
|
{
|
|
include_once "PHPUnit/TextUI/TestRunner.php";
|
|
|
|
$suite = new PHPUnit_Framework_TestSuite('PHP_CompatInfo CLI Tests');
|
|
PHPUnit_TextUI_TestRunner::run($suite);
|
|
}
|
|
|
|
/**
|
|
* Sets up the fixture.
|
|
* This method is called before a test is executed.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function setUp()
|
|
{
|
|
$this->pci = new PHP_CompatInfo_Cli();
|
|
}
|
|
|
|
/**
|
|
* Tears down the fixture.
|
|
* This method is called after a test is executed.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function tearDown()
|
|
{
|
|
unset($this->pci);
|
|
}
|
|
|
|
/**
|
|
* Test if a dictionary for an Extension is available or not
|
|
*
|
|
* @param array $resources List of Extension dictionaries
|
|
* that should be present to perform a unit test
|
|
* @param array &$testSkipped Reasons of tests skipped
|
|
*
|
|
* @return bool
|
|
* @since version 1.9.0b2
|
|
*/
|
|
private function isResourceAvailable($resources, &$testSkipped)
|
|
{
|
|
$dict = array();
|
|
foreach ($resources as $ext) {
|
|
if (!isset($GLOBALS['_PHP_COMPATINFO_FUNC_'.strtoupper($ext)])) {
|
|
$dict[] = $ext;
|
|
}
|
|
}
|
|
if (count($dict) == 1) {
|
|
$testSkipped[] = 'The '. $dict[0] .
|
|
' function dictionary is not available.';
|
|
} elseif (count($dict) > 1) {
|
|
$testSkipped[] = 'The '. implode(',', $dict) .
|
|
' function dictionaries are not available.';
|
|
}
|
|
return (count($testSkipped) == 0);
|
|
}
|
|
|
|
/**
|
|
* Assert results of php exec returns
|
|
*
|
|
* @param string $args Arguments list that will be pass to the 'pci' command
|
|
* @param array $exp PCI output results expected
|
|
*
|
|
* @return void
|
|
*/
|
|
private function assertPhpExec($args, $exp)
|
|
{
|
|
$command = '@php_bin@ '
|
|
. '-f @bin_dir@' . DIRECTORY_SEPARATOR . 'pci -- ';
|
|
|
|
$output = array();
|
|
$return = 0;
|
|
exec("$command $args", $output, $return);
|
|
if ($return == 0) {
|
|
$this->assertEquals($exp, $output);
|
|
} else {
|
|
$this->assertTrue($return);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Regression test for bug #3657
|
|
*
|
|
* @return void
|
|
* @link http://pear.php.net/bugs/bug.php?id=3657
|
|
* php5 clone constant/token in all sources
|
|
* @covers PHP_CompatInfo::parseFile
|
|
* @group parseFile
|
|
*/
|
|
public function testBug3657()
|
|
{
|
|
$ds = DIRECTORY_SEPARATOR;
|
|
$exp = array('+-----------------------------+---------+------------+--------------------+',
|
|
'| File | Version | Extensions | Constants/Tokens |',
|
|
'+-----------------------------+---------+------------+--------------------+',
|
|
'| ...File'.$ds.'phpweb-entities.php | 4.0.0 | | FALSE |',
|
|
'| | | | __FILE__ |',
|
|
'+-----------------------------+---------+------------+--------------------+');
|
|
|
|
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'phpweb-entities.php';
|
|
|
|
$args = '-o 30 -f ' . $fn;
|
|
$this->assertPhpExec($args, $exp);
|
|
}
|
|
|
|
/**
|
|
* Regression test for bug #6581
|
|
*
|
|
* @return void
|
|
* @link http://pear.php.net/bugs/bug.php?id=6581
|
|
* Functions missing in func_array.php
|
|
* @covers PHP_CompatInfo::parseFile
|
|
* @group parseFile
|
|
*/
|
|
public function testBug6581()
|
|
{
|
|
$resources = array('bcmath', 'pcre');
|
|
$testSkipped = array();
|
|
if (!$this->isResourceAvailable($resources, $testSkipped)) {
|
|
foreach ($testSkipped as $reason) {
|
|
$this->markTestSkipped($reason);
|
|
}
|
|
}
|
|
|
|
$ds = DIRECTORY_SEPARATOR;
|
|
$exp = array('+-----------------------------+---------+------------+--------------------+',
|
|
'| File | Version | Extensions | Constants/Tokens |',
|
|
'+-----------------------------+---------+------------+--------------------+',
|
|
'| ...tests'.$ds.'parseFile'.$ds.'math.php | 4.0.0 | bcmath | |',
|
|
'| | | pcre | |',
|
|
'+-----------------------------+---------+------------+--------------------+');
|
|
|
|
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'math.php';
|
|
|
|
$args = '-o 30 -f ' . $fn;
|
|
$this->assertPhpExec($args, $exp);
|
|
}
|
|
|
|
/**
|
|
* Tests parsing an empty directory
|
|
*
|
|
* Regression test for bug #8559
|
|
*
|
|
* @return void
|
|
* @link http://pear.php.net/bugs/bug.php?id=8559
|
|
* PHP_CompatInfo fails to scan if it finds empty file in path
|
|
* @see PHP_CompatInfo_TestSuite_Bugs::testBug8559()
|
|
* @covers PHP_CompatInfo::parseDir
|
|
* @group parseDir
|
|
*/
|
|
public function testBug8559()
|
|
{
|
|
$ds = DIRECTORY_SEPARATOR;
|
|
$dn = dirname(__FILE__) . $ds . 'emptyDir';
|
|
|
|
$exp = array('Usage: pci [options]',
|
|
'',
|
|
' -d --dir (optional)value Parse DIR to get its',
|
|
' compatibility info ()',
|
|
' -f --file (optional)value Parse FILE to get its',
|
|
' compatibility info ()',
|
|
' -s --string (optional)value Parse STRING to get its',
|
|
' compatibility info ()',
|
|
' -v --verbose (optional)value Set the verbose level (1)',
|
|
' -n --no-recurse Do not recursively parse files',
|
|
' when using --dir',
|
|
' -if --ignore-files (optional)value Data file name which contains',
|
|
' a list of file to ignore',
|
|
' (files.txt)',
|
|
' -id --ignore-dirs (optional)value Data file name which contains',
|
|
' a list of directory to ignore',
|
|
' (dirs.txt)',
|
|
' -in --ignore-functions (optional)value Data file name which contains',
|
|
' a list of php function to',
|
|
' ignore (functions.txt)',
|
|
' -ic --ignore-constants (optional)value Data file name which contains',
|
|
' a list of php constant to',
|
|
' ignore (constants.txt)',
|
|
' -ie --ignore-extensions (optional)value Data file name which contains',
|
|
' a list of php extension to',
|
|
' ignore (extensions.txt)',
|
|
' -iv --ignore-versions values(optional) PHP versions - functions to',
|
|
' exclude when parsing source',
|
|
' code (5.0.0)',
|
|
' -inm --ignore-functions-match (optional)value Data file name which contains',
|
|
' a list of php function pattern',
|
|
' to ignore',
|
|
' (functions-match.txt)',
|
|
' -iem --ignore-extensions-match (optional)value Data file name which contains',
|
|
' a list of php extension',
|
|
' pattern to ignore',
|
|
' (extensions-match.txt)',
|
|
' -icm --ignore-constants-match (optional)value Data file name which contains',
|
|
' a list of php constant pattern',
|
|
' to ignore',
|
|
' (constants-match.txt)',
|
|
' -fe --file-ext (optional)value A comma separated list of file',
|
|
' extensions to parse (only',
|
|
' valid if parsing a directory)',
|
|
' (php, php4, inc, phtml)',
|
|
' -r --report (optional)value Print either "xml" or "csv"',
|
|
' report (text)',
|
|
' -o --output-level (optional)value Print Path/File + Version with',
|
|
' additional data (31)',
|
|
' -t --tab (optional)value Columns width (29,12,20)',
|
|
' -p --progress (optional)value Show a wait message [text] or',
|
|
' a progress bar [bar] (bar)',
|
|
' -S --summarize Print only summary when',
|
|
' parsing directory',
|
|
' -V --version Print version information',
|
|
' -h --help Show this help',
|
|
'',
|
|
'No valid files into directory "'. $dn .
|
|
'". Please check your spelling and try again.',
|
|
'');
|
|
|
|
$args = '-d ' . $dn;
|
|
$this->assertPhpExec($args, $exp);
|
|
}
|
|
|
|
/**
|
|
* Regression test for bug #12350
|
|
*
|
|
* Be sure ( chdir() ) to check
|
|
* if file (checkMax.php) is in current directory ( dirname(__FILE__) )
|
|
*
|
|
* @return void
|
|
* @link http://pear.php.net/bugs/bug.php?id=12350
|
|
* file in current directory is not found
|
|
* @covers PHP_CompatInfo::parseFile
|
|
* @group parseFile
|
|
* @group cli
|
|
*/
|
|
public function testBug12350()
|
|
{
|
|
$exp = array('+-----------------------------+---------+------------+--------------------+',
|
|
'| File | Version | Extensions | Constants/Tokens |',
|
|
'+-----------------------------+---------+------------+--------------------+',
|
|
'| checkMax.php | 4.0.7 | | ...CTORY_SEPARATOR |',
|
|
'| | | | TRUE |',
|
|
'| | | | __FILE__ |',
|
|
'+-----------------------------+---------+------------+--------------------+');
|
|
|
|
chdir(dirname(__FILE__));
|
|
$args = '-o 30 -f checkMax.php';
|
|
$this->assertPhpExec($args, $exp);
|
|
}
|
|
|
|
/**
|
|
* Parsing string with -s | --string parameter
|
|
*
|
|
* @return void
|
|
* @covers PHP_CompatInfo::parseString
|
|
* @group parseString
|
|
* @group cli
|
|
*/
|
|
public function testParseString()
|
|
{
|
|
$exp = array('+-----------------------------+---------+---+------------+--------------------+',
|
|
'| Source code | Version | C | Extensions | Constants/Tokens |',
|
|
'+-----------------------------+---------+---+------------+--------------------+',
|
|
'| <?php ... ?> | 5.1.1 | 0 | | DATE_RSS |',
|
|
'+-----------------------------+---------+---+------------+--------------------+');
|
|
|
|
$str = "\"echo DATE_RSS;\"";
|
|
|
|
$args = '-s ' . $str;
|
|
$this->assertPhpExec($args, $exp);
|
|
}
|
|
|
|
/**
|
|
* Regression test for request#13147
|
|
*
|
|
* @return void
|
|
* @link http://pear.php.net/bugs/bug.php?id=13147
|
|
* CLI: add filter file extension option on parsing directory
|
|
* @covers PHP_CompatInfo::parseDir
|
|
* @group parseDir
|
|
* @group cli
|
|
*/
|
|
public function testRequest13147()
|
|
{
|
|
$resources = array('gd', 'SQLite', 'xdebug');
|
|
$testSkipped = array();
|
|
if (!$this->isResourceAvailable($resources, $testSkipped)) {
|
|
foreach ($testSkipped as $reason) {
|
|
$this->markTestSkipped($reason);
|
|
}
|
|
}
|
|
|
|
$ds = DIRECTORY_SEPARATOR;
|
|
$exp = array('+-----------------------------+---------+------------+--------------------+',
|
|
'| Files | Version | Extensions | Constants/Tokens |',
|
|
'+-----------------------------+---------+------------+--------------------+',
|
|
'| ...patInfo'.$ds.'tests'.$ds.'parseDir'.$ds.'* | 5.2.0 | gd | PHP_SHLIB_SUFFIX |',
|
|
'| | | SQLite | TRUE |',
|
|
'| | | xdebug | ..._ERR_CANT_WRITE |',
|
|
'| | | | ...D_ERR_EXTENSION |',
|
|
'| | | | ...D_ERR_FORM_SIZE |',
|
|
'| | | | ...AD_ERR_INI_SIZE |',
|
|
'| | | | UPLOAD_ERR_NO_FILE |',
|
|
'| | | | ..._ERR_NO_TMP_DIR |',
|
|
'| | | | UPLOAD_ERR_OK |',
|
|
'| | | | UPLOAD_ERR_PARTIAL |',
|
|
'| | | | abstract |',
|
|
'| | | | catch |',
|
|
'| | | | clone |',
|
|
'| | | | final |',
|
|
'| | | | implements |',
|
|
'| | | | instanceof |',
|
|
'| | | | interface |',
|
|
'| | | | private |',
|
|
'| | | | protected |',
|
|
'| | | | public |',
|
|
'| | | | throw |',
|
|
'| | | | try |',
|
|
'+-----------------------------+---------+------------+--------------------+',
|
|
'| ...'.$ds.'parseDir'.$ds.'extensions.php | 4.3.2 | gd | PHP_SHLIB_SUFFIX |',
|
|
'| | | SQLite | TRUE |',
|
|
'| | | xdebug | |',
|
|
'+-----------------------------+---------+------------+--------------------+',
|
|
'| ...sts'.$ds.'parseDir'.$ds.'phpinfo.php | 4.0.0 | | |',
|
|
'+-----------------------------+---------+------------+--------------------+',
|
|
'| ...arseDir'.$ds.'PHP5'.$ds.'tokens.php5 | 5.0.0 | | abstract |',
|
|
'| | | | catch |',
|
|
'| | | | clone |',
|
|
'| | | | final |',
|
|
'| | | | implements |',
|
|
'| | | | instanceof |',
|
|
'| | | | interface |',
|
|
'| | | | private |',
|
|
'| | | | protected |',
|
|
'| | | | public |',
|
|
'| | | | throw |',
|
|
'| | | | try |',
|
|
'+-----------------------------+---------+------------+--------------------+',
|
|
'| ...ir'.$ds.'PHP5'.$ds.'upload_error.php | 5.2.0 | | ..._ERR_CANT_WRITE |',
|
|
'| | | | ...D_ERR_EXTENSION |',
|
|
'| | | | ...D_ERR_FORM_SIZE |',
|
|
'| | | | ...AD_ERR_INI_SIZE |',
|
|
'| | | | UPLOAD_ERR_NO_FILE |',
|
|
'| | | | ..._ERR_NO_TMP_DIR |',
|
|
'| | | | UPLOAD_ERR_OK |',
|
|
'| | | | UPLOAD_ERR_PARTIAL |',
|
|
'| | | | throw |',
|
|
'+-----------------------------+---------+------------+--------------------+');
|
|
|
|
$dn = dirname(__FILE__) . $ds . 'parseDir';
|
|
$fe = 'php,php5';
|
|
|
|
$args = '-o 30 -fe '. $fe . ' -d '. $dn;
|
|
$this->assertPhpExec($args, $exp);
|
|
}
|
|
|
|
/**
|
|
* Regression test for request#13147
|
|
* with a better reading of Extensions and Constants/Tokens columns
|
|
*
|
|
* @return void
|
|
* @see testRequest13147()
|
|
* @link http://pear.php.net/bugs/bug.php?id=13147
|
|
* CLI: add filter file extension option on parsing directory
|
|
* @covers PHP_CompatInfo::parseDir
|
|
* @group parseDir
|
|
* @group cli
|
|
*/
|
|
public function testReq13147ImproveRender()
|
|
{
|
|
$resources = array('gd', 'SQLite', 'xdebug');
|
|
$testSkipped = array();
|
|
if (!$this->isResourceAvailable($resources, $testSkipped)) {
|
|
foreach ($testSkipped as $reason) {
|
|
$this->markTestSkipped($reason);
|
|
}
|
|
}
|
|
|
|
$ds = DIRECTORY_SEPARATOR;
|
|
$exp = array('+-----------------------------+---------+-------------+-----------------------+',
|
|
'| Files | Version | Extensions | Constants/Tokens |',
|
|
'+-----------------------------+---------+-------------+-----------------------+',
|
|
'| ...patInfo'.$ds.'tests'.$ds.'parseDir'.$ds.'* | 5.2.0 | gd | PHP_SHLIB_SUFFIX |',
|
|
'| | | SQLite | TRUE |',
|
|
'| | | xdebug | UPLOAD_ERR_CANT_WRITE |',
|
|
'| | | | UPLOAD_ERR_EXTENSION |',
|
|
'| | | | UPLOAD_ERR_FORM_SIZE |',
|
|
'| | | | UPLOAD_ERR_INI_SIZE |',
|
|
'| | | | UPLOAD_ERR_NO_FILE |',
|
|
'| | | | UPLOAD_ERR_NO_TMP_DIR |',
|
|
'| | | | UPLOAD_ERR_OK |',
|
|
'| | | | UPLOAD_ERR_PARTIAL |',
|
|
'| | | | abstract |',
|
|
'| | | | catch |',
|
|
'| | | | clone |',
|
|
'| | | | final |',
|
|
'| | | | implements |',
|
|
'| | | | instanceof |',
|
|
'| | | | interface |',
|
|
'| | | | private |',
|
|
'| | | | protected |',
|
|
'| | | | public |',
|
|
'| | | | throw |',
|
|
'| | | | try |',
|
|
'+-----------------------------+---------+-------------+-----------------------+',
|
|
'| ...'.$ds.'parseDir'.$ds.'extensions.php | 4.3.2 | gd | PHP_SHLIB_SUFFIX |',
|
|
'| | | SQLite | TRUE |',
|
|
'| | | xdebug | |',
|
|
'+-----------------------------+---------+-------------+-----------------------+',
|
|
'| ...sts'.$ds.'parseDir'.$ds.'phpinfo.php | 4.0.0 | | |',
|
|
'+-----------------------------+---------+-------------+-----------------------+',
|
|
'| ...arseDir'.$ds.'PHP5'.$ds.'tokens.php5 | 5.0.0 | | abstract |',
|
|
'| | | | catch |',
|
|
'| | | | clone |',
|
|
'| | | | final |',
|
|
'| | | | implements |',
|
|
'| | | | instanceof |',
|
|
'| | | | interface |',
|
|
'| | | | private |',
|
|
'| | | | protected |',
|
|
'| | | | public |',
|
|
'| | | | throw |',
|
|
'| | | | try |',
|
|
'+-----------------------------+---------+-------------+-----------------------+',
|
|
'| ...ir'.$ds.'PHP5'.$ds.'upload_error.php | 5.2.0 | | UPLOAD_ERR_CANT_WRITE |',
|
|
'| | | | UPLOAD_ERR_EXTENSION |',
|
|
'| | | | UPLOAD_ERR_FORM_SIZE |',
|
|
'| | | | UPLOAD_ERR_INI_SIZE |',
|
|
'| | | | UPLOAD_ERR_NO_FILE |',
|
|
'| | | | UPLOAD_ERR_NO_TMP_DIR |',
|
|
'| | | | UPLOAD_ERR_OK |',
|
|
'| | | | UPLOAD_ERR_PARTIAL |',
|
|
'| | | | throw |',
|
|
'+-----------------------------+---------+-------------+-----------------------+');
|
|
|
|
$dn = dirname(__FILE__) . $ds . 'parseDir';
|
|
$fe = 'php,php5';
|
|
|
|
$args = '-o 30 -t 29,13,23 -fe '. $fe . ' -d '. $dn;
|
|
$this->assertPhpExec($args, $exp);
|
|
}
|
|
}
|
|
|
|
// Call PHP_CompatInfo_TestSuite_Cli::main() if file is executed directly.
|
|
if (PHPUnit_MAIN_METHOD == "PHP_CompatInfo_TestSuite_Cli::main") {
|
|
PHP_CompatInfo_TestSuite_Cli::main();
|
|
}
|
|
?>
|