Mini Kabibi Habibi
Current Path : C:/xampp/php/tests/ |
|
Current File : C:/xampp/php/tests/PHP_CompatInfo_TestSuite_Standard.php |
<?php
/**
* Test suite for the PHP_CompatInfo 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_Standard.php,v 1.54 2008/12/31 14:32:28 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_Standard::main");
}
require_once "PHPUnit/Framework/TestCase.php";
require_once "PHPUnit/Framework/TestSuite.php";
require_once 'PHP/CompatInfo.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: 1.9.0
* @link http://pear.php.net/package/PHP_CompatInfo
* @since File available since Release 1.6.0
*/
class PHP_CompatInfo_TestSuite_Standard extends PHPUnit_Framework_TestCase
{
/**
* A PCI object
* @var object
*/
protected $pci;
/**
* Filename where to write results of debug pci events notification
* @var string
* @since 1.8.0RC1
*/
private $destLogFile;
/**
* 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 Standard 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->destLogFile = dirname(__FILE__) . DIRECTORY_SEPARATOR .
__CLASS__ . '.log';
$this->pci = new PHP_CompatInfo('null');
$this->pci->addListener(array(&$this, 'debugNotify'));
}
/**
* Tears down the fixture.
* This method is called after a test is executed.
*
* @return void
*/
protected function tearDown()
{
unset($this->pci);
}
/**
* PCI Events notification observer for debug purpose only
*
* @param object &$auditEvent Instance of Event_Notification object
*
* @return void
*/
public function debugNotify(&$auditEvent)
{
$notifyName = $auditEvent->getNotificationName();
$notifyInfo = $auditEvent->getNotificationInfo();
if ($notifyName == PHP_COMPATINFO_EVENT_AUDITSTARTED) {
$dbt = debug_backtrace();
error_log('backtrace: '. $dbt[7]['function'] . PHP_EOL,
3, $this->destLogFile);
error_log($notifyName.':'. PHP_EOL .
var_export($notifyInfo, true) . PHP_EOL,
3, $this->destLogFile);
} elseif ($notifyName == PHP_COMPATINFO_EVENT_AUDITFINISHED) {
error_log($notifyName.':'. PHP_EOL .
var_export($notifyInfo, true) . PHP_EOL,
3, $this->destLogFile);
}
}
/**
* Retrieve files list to be ignore by parsing process
*
* @param string $dir Directory to parse
* @param array $options Parser options
*
* @return array
* @since version 1.8.0RC1
*/
private function getIgnoredFileList($dir, $options)
{
$files = $this->pci->parser->getFileList($dir, $options);
$ff = new File_Find();
$ff->dirsep = DIRECTORY_SEPARATOR;
list(, $allfiles) = $ff->maptree($dir);
$ignored_files = PHP_CompatInfo_Parser::_arrayDiff($allfiles, $files);
return $ignored_files;
}
/**
* 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);
}
/**
* Tests tokenizer with a single file and empty contents
*
* @return void
* @group standard
*/
public function testTokenizerWithEmptyFile()
{
if (token_name(311) !== 'T_INLINE_HTML') {
$this->markTestSkipped('Tokens values of Tokenizer have changed');
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'empty.php';
$r = $this->pci->parser->_tokenize($fn, false);
$empty = array(0 =>
array (
0 => 311,
1 => "\n",
2 => 1));
$this->assertSame($empty, $r);
$r = $this->pci->parser->_tokenize($fn, false, true);
$empty = array(0 =>
array (
0 => 311,
1 => "\n",
2 => 1,
3 => 'T_INLINE_HTML'));
$this->assertSame($empty, $r);
}
/**
* Tests parsing a single file that does not exists
*
* @return void
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseInvalidFile()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'nothere.php';
$r = $this->pci->parseFile($fn);
$this->assertFalse($r);
}
/**
* Tests parsing a single file with empty contents
*
* @return void
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseEmptyFile()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'empty.php';
$r = $this->pci->parseFile($fn);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.0.0',
'classes' => array(),
'functions' => array(),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file
*
* @return void
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseNotEmptyFile()
{
$resources = array('bcmath', 'pcre');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'math.php';
$r = $this->pci->parseFile($fn);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.0.0',
'classes' => array(),
'functions' => array('bcsub', 'preg_match'),
'extensions' => array('bcmath', 'pcre'),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_functions' option
*
* @return void
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreFunctions()
{
$resources = array('date');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$opt = array('ignore_functions' => array('simplexml_load_file'));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array('simplexml_load_file'),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.1.1',
'classes' => array(),
'functions' => array('basename',
'date',
'debug_backtrace',
'define',
'defined',
'dirname',
'function_exists',
'phpversion',
'simplexml_load_file',
'strtoupper',
'substr',
'version_compare'),
'extensions' => array('date'),
'constants' => array('DATE_W3C',
'DIRECTORY_SEPARATOR',
'FALSE',
'PHP_EOL',
'PHP_OS',
'__FILE__'),
'tokens' => array(),
'cond_code' => array(5));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_constants' option
*
* @return void
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreConstants()
{
$resources = array('date', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$opt = array('ignore_constants' => array('PHP_EOL'));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array('PHP_EOL'),
'max_version' => '',
'version' => '5.1.1',
'classes' => array(),
'functions' => array('basename',
'date',
'debug_backtrace',
'define',
'defined',
'dirname',
'function_exists',
'phpversion',
'simplexml_load_file',
'strtoupper',
'substr',
'version_compare'),
'extensions' => array('date', 'SimpleXML'),
'constants' => array('DATE_W3C',
'DIRECTORY_SEPARATOR',
'FALSE',
'PHP_EOL',
'PHP_OS',
'__FILE__'),
'tokens' => array(),
'cond_code' => array(5));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_extensions' option
*
* @return void
* @link http://www.php.net/zip
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreExtensions()
{
$resources = array('zip');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'zip.php';
$opt = array('ignore_extensions' => array('zip'));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array('zip_close',
'zip_entry_compressedsize',
'zip_entry_compressionmethod',
'zip_entry_filesize',
'zip_entry_name',
'zip_open',
'zip_read'),
'ignored_extensions' => array('zip'),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.0.0',
'classes' => array(),
'functions' => array('zip_close',
'zip_entry_compressedsize',
'zip_entry_compressionmethod',
'zip_entry_filesize',
'zip_entry_name',
'zip_open',
'zip_read'),
'extensions' => array('zip'),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_versions' option
* Ignored all PHP functions between 4.3.10 and 4.4.8
*
* @return void
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreVersions()
{
$resources = array('date', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$opt = array('ignore_versions' => array('4.3.10', '4.4.8'));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.1.1',
'classes' => array(),
'functions' => array('basename',
'date',
'debug_backtrace',
'define',
'defined',
'dirname',
'function_exists',
'phpversion',
'simplexml_load_file',
'strtoupper',
'substr',
'version_compare'),
'extensions' => array('date', 'SimpleXML'),
'constants' => array('DATE_W3C',
'DIRECTORY_SEPARATOR',
'FALSE',
'PHP_OS',
'__FILE__'),
'tokens' => array(),
'cond_code' => array(5));
$this->assertSame($exp, $r);
}
/**
* Tests parsing an invalid input
*
* @return void
* @covers PHP_CompatInfo::parseString
* @group parseString
* @group standard
*/
public function testParseInvalidString()
{
$in = array();
$r = $this->pci->parseString($in);
$this->assertFalse($r);
}
/**
* Tests parsing a string
*
* @return void
* @covers PHP_CompatInfo::parseString
* @group parseString
* @group standard
*/
public function testParseNotEmptyString()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'sample_req6056.php';
$str = file_get_contents($fn);
$r = $this->pci->parseString($str);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '5.0.4',
'version' => '5.1.0',
'classes' => array(),
'functions' => array('array_diff_key',
'php_check_syntax'),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing string DATE constants
*
* @return void
* @link http://php.net/manual/en/ref.datetime.php Predefined Date Constants
* @covers PHP_CompatInfo::parseString
* @group parseString
* @group standard
*/
public function testParseDate511String()
{
$str = '<?php
$nl = "\n";
echo "$nl Atom = " . DATE_ATOM;
echo "$nl Cookie = " . DATE_COOKIE;
echo "$nl Iso8601 = " . DATE_ISO8601;
echo "$nl Rfc822 = " . DATE_RFC822;
echo "$nl Rfc850 = " . DATE_RFC850;
echo "$nl Rfc1036 = " . DATE_RFC1036;
echo "$nl Rfc1123 = " . DATE_RFC1123;
echo "$nl Rfc2822 = " . DATE_RFC2822;
echo "$nl RSS = " . DATE_RSS;
echo "$nl W3C = " . DATE_W3C;
?>';
$r = $this->pci->parseString($str);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.1.1',
'classes' => array(),
'functions' => array(),
'extensions' => array(),
'constants' => array('DATE_ATOM', 'DATE_COOKIE',
'DATE_ISO8601',
'DATE_RFC1036', 'DATE_RFC1123',
'DATE_RFC2822',
'DATE_RFC822', 'DATE_RFC850',
'DATE_RSS', 'DATE_W3C'),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing string DATE constants
*
* @return void
* @link http://php.net/manual/en/ref.datetime.php Predefined Date Constants
* @covers PHP_CompatInfo::parseString
* @group parseString
* @group standard
*/
public function testParseDate513String()
{
$str = '<?php
$nl = "\n";
echo "$nl Rfc3339 = " . DATE_RFC3339;
echo "$nl RSS = " . DATE_RSS;
?>';
$r = $this->pci->parseString($str);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.1.3',
'classes' => array(),
'functions' => array(),
'extensions' => array(),
'constants' => array('DATE_RFC3339', 'DATE_RSS'),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing string UPLOAD_ERR constants
*
* @return void
* @link http://www.php.net/features.file-upload.errors
* File Upload Error specific Constants
* @covers PHP_CompatInfo::parseString
* @group parseString
* @group standard
*/
public function testParseUploadErrString()
{
$str = '<?php
$uploadErrors = array(
UPLOAD_ERR_INI_SIZE => "The uploaded file exceeds the upload_max_filesize directive in php.ini.",
UPLOAD_ERR_FORM_SIZE => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.",
UPLOAD_ERR_PARTIAL => "The uploaded file was only partially uploaded.",
UPLOAD_ERR_NO_FILE => "No file was uploaded.",
UPLOAD_ERR_NO_TMP_DIR => "Missing a temporary folder.",
UPLOAD_ERR_CANT_WRITE => "Failed to write file to disk.",
UPLOAD_ERR_EXTENSION => "File upload stopped by extension.",
);
$errorCode = $_FILES["myUpload"]["error"];
if ($errorCode !== UPLOAD_ERR_OK) {
if (isset($uploadErrors[$errorCode])) {
throw new Exception($uploadErrors[$errorCode]);
} else {
throw new Exception("Unknown error uploading file.");
}
}
?>';
$r = $this->pci->parseString($str);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.2.0',
'classes' => array('Exception'),
'functions' => array(),
'extensions' => array(),
'constants' => array('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'),
'tokens' => array('throw'),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory that does not exists
*
* @return void
* @covers PHP_CompatInfo::parseFolder
* @group parseDir
* @group standard
*/
public function testParseInvalidDirectory()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds . 'nothere';
$r = $this->pci->parseFolder($dir);
$this->assertFalse($r);
}
/**
* Tests parsing a directory without recursive 'recurse_dir' option
*
* @return void
* @covers PHP_CompatInfo::parseDir
* @group parseDir
* @group standard
*/
public function testParseNoRecursiveDirectory()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir';
$opt = array('recurse_dir' => false);
$r = $this->pci->parseDir($dir, $opt);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.3.2',
'classes' => array(),
'functions' => array('apache_get_modules',
'dl',
'extension_loaded',
'imageantialias',
'imagecreate',
'phpinfo',
'print_r',
'sqlite_libversion',
'xdebug_start_trace',
'xdebug_stop_trace'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE'),
'tokens' => array(),
'cond_code' => array(2),
$dir . $ds . 'extensions.php' =>
array('ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.3.2',
'classes' => array(),
'functions' => array('apache_get_modules',
'dl',
'extension_loaded',
'imageantialias',
'imagecreate',
'print_r',
'sqlite_libversion',
'xdebug_start_trace',
'xdebug_stop_trace'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE'),
'tokens' => array(),
'cond_code' => array(2)),
$dir . $ds . 'phpinfo.php' =>
array('ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.0.0',
'classes' => array(),
'functions' => array('phpinfo'),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0)));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory with 'recurse_dir' option active
* and filter files by extension with 'file_ext' option
*
* @return void
* @covers PHP_CompatInfo::parseDir
* @group parseDir
* @group standard
*/
public function testParseRecursiveDirectory()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$r = $this->pci->parseDir($dir, $opt);
$exp = array('ignored_files' => $this->getIgnoredFileList($dir, $opt),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.2.0',
'classes' => array('Exception'),
'functions' => array('apache_get_modules',
'dl',
'extension_loaded',
'imageantialias',
'imagecreate',
'phpinfo',
'print_r',
'sqlite_libversion',
'str_replace',
'xdebug_start_trace',
'xdebug_stop_trace'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE',
'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'),
'tokens' => array('abstract',
'catch',
'clone',
'final',
'implements',
'instanceof',
'interface',
'private',
'protected',
'public',
'throw',
'try'),
'cond_code' => array(2),
$dir . 'extensions.php' =>
array('ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.3.2',
'classes' => array(),
'functions' => array('apache_get_modules',
'dl',
'extension_loaded',
'imageantialias',
'imagecreate',
'print_r',
'sqlite_libversion',
'xdebug_start_trace',
'xdebug_stop_trace'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE'),
'tokens' => array(),
'cond_code' => array(2)),
$dir . 'phpinfo.php' =>
array('ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.0.0',
'classes' => array(),
'functions' => array('phpinfo'),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0)),
$dir . 'PHP5' . $ds . 'tokens.php5' =>
array('ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.0.0',
'classes' => array('Exception'),
'functions' => array('str_replace'),
'extensions' => array(),
'constants' => array(),
'tokens' => array('abstract',
'catch',
'clone',
'final',
'implements',
'instanceof',
'interface',
'private',
'protected',
'public',
'throw',
'try'),
'cond_code' => array(0)),
$dir . 'PHP5' . $ds . 'upload_error.php' =>
array('ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.2.0',
'classes' => array('Exception'),
'functions' => array(),
'extensions' => array(),
'constants' => array('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'),
'tokens' => array('throw'),
'cond_code' => array(0)));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory with 'recurse_dir' option active
* with 'ignore_files' options
*
* @return void
* @covers PHP_CompatInfo::parseDir
* @group parseDir
* @group standard
*/
public function testParseRecursiveDirectoryWithIgnoreFiles()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('recurse_dir' => true,
'ignore_files' => array($dir . 'phpinfo.php'),
'file_ext' => array('php'));
$r = $this->pci->parseDir($dir, $opt);
$exp = array('ignored_files' => $this->getIgnoredFileList($dir, $opt),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.2.0',
'classes' => array('Exception'),
'functions' => array('apache_get_modules',
'dl',
'extension_loaded',
'imageantialias',
'imagecreate',
'print_r',
'sqlite_libversion',
'xdebug_start_trace',
'xdebug_stop_trace'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE',
'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'),
'tokens' => array('throw'),
'cond_code' => array(2),
$dir . 'extensions.php' =>
array('ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.3.2',
'classes' => array(),
'functions' => array('apache_get_modules',
'dl',
'extension_loaded',
'imageantialias',
'imagecreate',
'print_r',
'sqlite_libversion',
'xdebug_start_trace',
'xdebug_stop_trace'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE'),
'tokens' => array(),
'cond_code' => array(2)),
$dir . 'PHP5' . $ds . 'upload_error.php' =>
array('ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.2.0',
'classes' => array('Exception'),
'functions' => array(),
'extensions' => array(),
'constants' => array('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'),
'tokens' => array('throw'),
'cond_code' => array(0)));
$this->assertSame($exp, $r);
}
/**
* Tests parsing multiple file data sources reference
*
* @return void
* @covers PHP_CompatInfo::parseArray
* @group parseArray
* @group standard
*/
public function testParseArrayFile()
{
$resources = array('pcre');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseFile';
$src = array($dir . $ds . 'File_Find-1.3.0__Find.php');
$r = $this->pci->parseArray($src);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.3.0',
'classes' => array('File_Find'),
'functions' => array('_file_find_match_shell_get_pattern',
'addcslashes',
'array_merge',
'array_pop',
'array_push',
'basename',
'closedir',
'count',
'define',
'defined',
'each',
'explode',
'glob',
'implode',
'is_a',
'is_array',
'is_dir',
'is_readable',
'maptree',
'maptreemultiple',
'opendir',
'preg_match',
'preg_replace',
'preg_split',
'print_r',
'readdir',
'reset',
'search',
'sizeof',
'str_replace',
'strcasecmp',
'strlen',
'strpos',
'substr',
'substr_count'),
'extensions' => array('pcre'),
'constants' => array('FALSE',
'NULL',
'PREG_SPLIT_DELIM_CAPTURE',
'PREG_SPLIT_NO_EMPTY',
'TRUE'),
'tokens' => array(),
'cond_code' => array(4));
$this->assertSame($exp, $r);
}
/**
* Tests parsing multiple file data sources reference
* with option 'ignore_files'
*
* @return void
* @covers PHP_CompatInfo::parseArray
* @group parseArray
* @group standard
*/
public function testParseArrayFileWithIgnoreFiles()
{
$resources = array('pcre');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$inc = get_included_files();
$dir = dirname(__FILE__) . $ds . 'parseFile';
$src = array($dir . $ds . 'File_Find-1.3.0__Find.php');
$excl = array();
foreach ($inc as $file) {
if (basename($file) == 'PEAR.php') {
$excl[] = $file;
$src[] = $file;
}
}
$opt = array('ignore_files' => $excl);
$r = $this->pci->parseArray($src, $opt);
$exp = array('ignored_files' => $excl,
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.3.0',
'classes' => array('File_Find'),
'functions' => array('_file_find_match_shell_get_pattern',
'addcslashes',
'array_merge',
'array_pop',
'array_push',
'basename',
'closedir',
'count',
'define',
'defined',
'each',
'explode',
'glob',
'implode',
'is_a',
'is_array',
'is_dir',
'is_readable',
'maptree',
'maptreemultiple',
'opendir',
'preg_match',
'preg_replace',
'preg_split',
'print_r',
'readdir',
'reset',
'search',
'sizeof',
'str_replace',
'strcasecmp',
'strlen',
'strpos',
'substr',
'substr_count'),
'extensions' => array('pcre'),
'constants' => array('FALSE',
'NULL',
'PREG_SPLIT_DELIM_CAPTURE',
'PREG_SPLIT_NO_EMPTY',
'TRUE'),
'tokens' => array(),
'cond_code' => array(4));
$this->assertSame($exp, $r);
}
/**
* Tests parsing multiple strings (chunk of code)
*
* @return void
* @covers PHP_CompatInfo::parseArray
* @group parseArray
* @group standard
*/
public function testParseArrayString()
{
$code1 = "<?php
php_check_syntax('somefile.php');
?>";
$code2 = "<?php
\$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
\$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
\$diff = array_diff_key(\$array1, \$array2);
?>";
$data = array($code1, $code2);
$opt = array('is_string' => true);
$r = $this->pci->parseArray($data, $opt);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '5.0.4',
'version' => '5.1.0',
'classes' => array(),
'functions' => array('array_diff_key', 'php_check_syntax'),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0),
'string_1' => array(
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '5.0.4',
'version' => '5.0.0',
'classes' => array(),
'functions' => array('php_check_syntax'),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0)),
'string_2' => array(
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.1.0',
'classes' => array(),
'functions' => array('array_diff_key'),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0))
);
$this->assertSame($exp, $r);
}
/**
* Tests parsing nothing (all files are excluded from scope)
*
* @return void
* @covers PHP_CompatInfo::parseArray
* @group parseArray
* @group standard
*/
public function testParseArrayWithNoFiles()
{
$files = get_included_files();
$opt = array('ignore_files' => $files);
$r = $this->pci->parseArray($files, $opt);
$this->assertFalse($r);
}
/**
* Tests loading functions list for a PHP version
*
* @return void
* @covers PHP_CompatInfo::loadVersion
* @group loadVersion
* @group standard
*/
public function testLoadVersion()
{
$resources = array('date', 'filter', 'gd', 'gmp', 'mbstring', 'ming',
'mysql', 'openssl', 'pgsql',
'posix', 'snmp', 'spl');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$r = $this->pci->loadVersion('5.2.0');
$exp = array('array_fill_keys',
'error_get_last',
'filter_has_var',
'filter_id',
'filter_input',
'filter_input_array',
'filter_list',
'filter_var',
'filter_var_array',
'gmp_nextprime',
'imagegrabscreen',
'imagegrabwindow',
'iterator_apply',
'mb_list_encodings_alias_names',
'mb_list_mime_names',
'mb_stripos',
'mb_stristr',
'mb_strrchr',
'mb_strrichr',
'mb_strripos',
'mb_strstr',
'memory_get_peak_usage',
'ming_setswfcompression',
'mysql_set_charset',
'openssl_csr_get_public_key',
'openssl_csr_get_subject',
'openssl_pkcs12_export',
'openssl_pkcs12_export_to_file',
'openssl_pkcs12_read',
'openssl_pkey_get_details',
'pg_field_table',
'php_ini_loaded_file',
'posix_initgroups',
'preg_last_error',
'snmp_set_oid_output_format',
'spl_object_hash',
'stream_is_local',
'stream_socket_shutdown',
'sys_get_temp_dir',
'timezone_transitions_get');
$this->assertSame($exp, $r);
}
/**
* Tests loading functions list for a PHP version range
*
* @return void
* @covers PHP_CompatInfo::loadVersion
* @group loadVersion
* @group standard
*/
public function testLoadVersionRange()
{
$resources = array('date', 'filter', 'gd', 'gmp', 'mbstring', 'ming',
'openssl', 'pgsql',
'posix', 'snmp', 'spl');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$r = $this->pci->loadVersion('5.2.0', '5.2.2');
$exp = array('array_fill_keys',
'error_get_last',
'filter_has_var',
'filter_id',
'filter_input',
'filter_input_array',
'filter_list',
'filter_var',
'filter_var_array',
'gmp_nextprime',
'imagegrabscreen',
'imagegrabwindow',
'iterator_apply',
'mb_list_encodings_alias_names',
'mb_list_mime_names',
'mb_stripos',
'mb_stristr',
'mb_strrchr',
'mb_strrichr',
'mb_strripos',
'mb_strstr',
'memory_get_peak_usage',
'ming_setswfcompression',
'openssl_csr_get_public_key',
'openssl_csr_get_subject',
'openssl_pkcs12_export',
'openssl_pkcs12_export_to_file',
'openssl_pkcs12_read',
'openssl_pkey_get_details',
'pg_field_table',
'posix_initgroups',
'preg_last_error',
'snmp_set_oid_output_format',
'spl_object_hash',
'stream_socket_shutdown',
'sys_get_temp_dir',
'timezone_transitions_get');
$this->assertSame($exp, $r);
}
/**
* Tests loading function list for a range of PHP version,
* group by version number
*
* What's new with versions 4.3.2 to 4.4.0 : 13 + 30 + 5 functions
*
* @return void
* @covers PHP_CompatInfo::loadVersion
* @group loadVersion
* @group standard
*/
public function testLoadVersionRangeGroupByVersion()
{
$resources = array('bz2', 'gd', 'imap', 'oci8', 'snmp', 'zlib');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$r = $this->pci->loadVersion('4.3.2', '4.4.0', false, true);
$exp = array('4.3.2' => array('apache_get_modules',
'apache_get_version',
'domxml_attr_set_value',
'domxml_doc_free_doc',
'imageantialias',
'imagecolorallocatealpha',
'imageistruecolor',
'imagesavealpha',
'memory_get_usage',
'ocipasswordchange',
'session_regenerate_id',
'stream_wrapper_register',
'zlib_get_coding_type'),
'4.3.3' => array('bzclose',
'bzcompress',
'bzdecompress',
'bzerrno',
'bzerror',
'bzerrstr',
'bzflush',
'bzopen',
'bzread',
'bzwrite',
'imap_timeout',
'nsapi_request_headers',
'nsapi_response_headers',
'nsapi_virtual',
'snmp_get_valueretrieval',
'snmp_set_valueretrieval',
'solid_fetch_prev',
'swfmovie_add',
'swfmovie_init',
'swfmovie_labelframe',
'swfmovie_nextframe',
'swfmovie_output',
'swfmovie_save',
'swfmovie_savetofile',
'swfmovie_setbackground',
'swfmovie_setdimension',
'swfmovie_setframes',
'swfmovie_setrate',
'swfmovie_streammp3',
'swfsprite_labelframe'),
'4.4.0' => array('session_commit',
'snmp2_get',
'snmp2_real_walk',
'snmp2_set',
'snmp2_walk'));
$this->assertSame($exp, $r);
}
/**
* Tests loading function+constant list for a single PHP version
*
* What's new with version 4.3.10 : 0 functions and 2 new constants
*
* @return void
* @covers PHP_CompatInfo::loadVersion
* @group loadVersion
* @group standard
*/
public function testLoadVersionRangeWithConstant()
{
$r = $this->pci->loadVersion('4.3.10', '4.3.10', true);
$exp = array('functions' => array(),
'constants' => array('PHP_EOL',
'UPLOAD_ERR_NO_TMP_DIR'));
$this->assertSame($exp, $r);
}
/**
* Tests loading function list for a range of PHP version,
* group by version number
*
* What's new with versions 4.3.2 to 4.4.0 : 13 + 30 + 5 functions
*
* @return void
* @covers PHP_CompatInfo::loadVersion
* @group loadVersion
* @group standard
*/
public function testLoadVersionRangeWithConstantGroupByVersion()
{
$resources = array('bz2', 'gd', 'imap', 'oci8', 'snmp', 'zlib');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$r = $this->pci->loadVersion('4.3.2', '4.4.0', true, true);
$exp = array('functions' => array(
'4.3.2' => array('apache_get_modules',
'apache_get_version',
'domxml_attr_set_value',
'domxml_doc_free_doc',
'imageantialias',
'imagecolorallocatealpha',
'imageistruecolor',
'imagesavealpha',
'memory_get_usage',
'ocipasswordchange',
'session_regenerate_id',
'stream_wrapper_register',
'zlib_get_coding_type'),
'4.3.3' => array('bzclose',
'bzcompress',
'bzdecompress',
'bzerrno',
'bzerror',
'bzerrstr',
'bzflush',
'bzopen',
'bzread',
'bzwrite',
'imap_timeout',
'nsapi_request_headers',
'nsapi_response_headers',
'nsapi_virtual',
'snmp_get_valueretrieval',
'snmp_set_valueretrieval',
'solid_fetch_prev',
'swfmovie_add',
'swfmovie_init',
'swfmovie_labelframe',
'swfmovie_nextframe',
'swfmovie_output',
'swfmovie_save',
'swfmovie_savetofile',
'swfmovie_setbackground',
'swfmovie_setdimension',
'swfmovie_setframes',
'swfmovie_setrate',
'swfmovie_streammp3',
'swfsprite_labelframe'),
'4.4.0' => array('session_commit',
'snmp2_get',
'snmp2_real_walk',
'snmp2_set',
'snmp2_walk')),
'constants' => array(
'4.3.10' => array('PHP_EOL',
'UPLOAD_ERR_NO_TMP_DIR')
));
$this->assertSame($exp, $r);
}
/**
* Tests loading function+constant list for a PHP version range
*
* What's new with since version 5.2.1 : 24 new functions and 0 constant
*
* @return void
* @covers PHP_CompatInfo::loadVersion
* @group loadVersion
* @group standard
*/
public function testLoadVersionWithConstant()
{
$resources = array('gd', 'ming', 'openssl');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$r = $this->pci->loadVersion('5.2.1', false, true);
$exp = array('functions' => array('imagegrabscreen',
'imagegrabwindow',
'ming_setswfcompression',
'mysql_set_charset',
'openssl_pkcs12_export',
'openssl_pkcs12_export_to_file',
'openssl_pkcs12_read',
'php_ini_loaded_file',
'stream_is_local',
'stream_socket_shutdown',
'sys_get_temp_dir'),
'constants' => array('PCRE_VERSION',
'PREG_BAD_UTF8_OFFSET_ERROR'));
$this->assertSame($exp, $r);
}
/**
* Tests the PHP Method chaining feature introduced with PHP5
* Sample #1
*
* @link http://cowburn.info/php/php5-method-chaining/
* @return void
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testPHP5MethodChainingSamp1()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds
. 'php5_method_chaining.php';
$r = $this->pci->parseFile($fn);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.0.0',
'classes' => array('Person'),
'functions' => array('printf'),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests the PHP Method chaining feature introduced with PHP5.
* Sample #2
*
* @return void
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testPHP5MethodChainingSamp2()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds
. 'php5_method_chaining_samp2.php';
$r = $this->pci->parseFile($fn);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.0.0',
'classes' => array(),
'functions' => array(),
'extensions' => array(),
'constants' => array(),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_functions_match' option
* Sample #1
*
* Exclude all functions that are referenced by php function_exists(),
* and match regular expressions :
* - word file_put_contents (case insensitive)
* - beginning with debug (case sensitive)
*
* @return void
* @since version 1.7.0
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreFunctionsMatchSamp1()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds
. 'ignore_functions_match.php';
$opt = array('ignore_functions_match' =>
array('function_exists', array('/^File_put_contents$/i',
'/^debug/')));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array('debug_backtrace', 'file_put_contents'),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.0.0',
'classes' => array(),
'functions' => array('debug_backtrace',
'debug_print_backtrace',
'fclose',
'file_put_contents',
'fopen',
'fwrite'),
'extensions' => array(),
'constants' => array('FALSE'),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_functions_match' option
* Sample #2
*
* Exclude (from scope) all functions that are 'debug' prefixed (case sensitive).
*
* If you want a case-insensitive search add an "i" after the pattern delimiter,
* like that: '/^debug/i'
*
* @return void
* @since version 1.7.0
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreFunctionsMatchSamp2()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'ignore_functions_match.php';
$opt = array('ignore_functions_match' => array('preg_match', array('/^debug/')));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array('debug_backtrace', 'debug_print_backtrace'),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.0.0',
'classes' => array(),
'functions' => array('debug_backtrace',
'debug_print_backtrace',
'fclose',
'file_put_contents',
'fopen',
'function_exists',
'fwrite'),
'extensions' => array(),
'constants' => array('FALSE'),
'tokens' => array(),
'cond_code' => array(1));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_functions_match' option
* Sample #3
*
* When I don't know the script to parse (most case), I would really
* exclude from scope all functions that are conditionned by function_exists().
*
* @return void
* @since version 1.7.0
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreFunctionsMatchSamp3()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'ignore_functions_match.php';
$opt = array('ignore_functions_match' => array('function_exists', array('/.*/')));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array('debug_backtrace', 'file_put_contents'),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.0.0',
'classes' => array(),
'functions' => array('debug_backtrace',
'debug_print_backtrace',
'fclose',
'file_put_contents',
'fopen',
'fwrite'),
'extensions' => array(),
'constants' => array('FALSE'),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_extensions_match' option
* Sample #1
*
* Exclude all extensions (and their functions) that are referenced by
* php extension_loaded(), and match regular expressions
*
* @return void
* @since version 1.7.0
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreExtensionsMatchSamp1()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseDir' . $ds . 'extensions.php';
$opt = array('ignore_extensions_match' =>
array('extension_loaded', array('/^SQLite$/')));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array('sqlite_libversion'),
'ignored_extensions' => array('SQLite'),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.3.2',
'classes' => array(),
'functions' => array('apache_get_modules',
'dl',
'imageantialias',
'imagecreate',
'print_r',
'sqlite_libversion',
'xdebug_start_trace',
'xdebug_stop_trace'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE'),
'tokens' => array(),
'cond_code' => array(0));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_extensions_match' option
* Sample #2
*
* Exclude all extensions (and their functions) that are referenced freely by
* preg_match clause, and match regular expression:
* - beginning with 'xdebug' (case sensitive)
*
* @return void
* @since version 1.7.0
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreExtensionsMatchSamp2()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseDir' . $ds . 'extensions.php';
$opt = array('ignore_extensions_match' =>
array('preg_match', array('/^xdebug/')));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array('xdebug_start_trace',
'xdebug_stop_trace'),
'ignored_extensions' => array('xdebug'),
'ignored_constants' => array(),
'max_version' => '',
'version' => '4.3.2',
'classes' => array(),
'functions' => array('apache_get_modules',
'dl',
'extension_loaded',
'imageantialias',
'imagecreate',
'print_r',
'sqlite_libversion',
'xdebug_start_trace',
'xdebug_stop_trace'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE'),
'tokens' => array(),
'cond_code' => array(2));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_constants_match' option
* Sample #1
*
* Exclude all constants that are referenced by php defined(),
* and match regular expressions
*
* @return void
* @since version 1.7.0
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreConstantsMatchSamp1()
{
$resources = array('date', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$opt = array('ignore_constants_match' =>
array('defined', array('/^directory/i')));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array('DIRECTORY_SEPARATOR'),
'max_version' => '',
'version' => '5.1.1',
'classes' => array(),
'functions' => array('basename',
'date',
'debug_backtrace',
'define',
'dirname',
'function_exists',
'phpversion',
'simplexml_load_file',
'strtoupper',
'substr',
'version_compare'),
'extensions' => array( 'date', 'SimpleXML'),
'constants' => array('DATE_W3C',
'DIRECTORY_SEPARATOR',
'FALSE',
'PHP_EOL',
'PHP_OS',
'__FILE__'),
'tokens' => array(),
'cond_code' => array(1));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file with 'ignore_constants_match' option
* Sample #2
*
* Exclude all constants that freely match regular expressions
*
* @return void
* @since version 1.7.0
* @covers PHP_CompatInfo::parseFile
* @group parseFile
* @group standard
*/
public function testParseFileWithIgnoreConstantsMatchSamp2()
{
$resources = array('date', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$opt = array('ignore_constants_match' =>
array('preg_match', array('/^dir/i', '/^DATE_W3C$/')));
$r = $this->pci->parseFile($fn, $opt);
$this->assertType('array', $r);
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array('DATE_W3C',
'DIRECTORY_SEPARATOR'),
'max_version' => '',
'version' => '5.0.0',
'classes' => array(),
'functions' => array('basename',
'date',
'debug_backtrace',
'define',
'defined',
'dirname',
'function_exists',
'phpversion',
'simplexml_load_file',
'strtoupper',
'substr',
'version_compare'),
'extensions' => array('date', 'SimpleXML'),
'constants' => array('DATE_W3C',
'DIRECTORY_SEPARATOR',
'FALSE',
'PHP_EOL',
'PHP_OS',
'__FILE__'),
'tokens' => array(),
'cond_code' => array(5));
$this->assertSame($exp, $r);
}
/**
* Tests parsing multiple strings (chunk of code)
* and return minimum PHP version required
*
* @return void
* @covers PHP_CompatInfo::getVersion
* @group getVersion
* @group standard
*/
public function testGetVersion()
{
$code1 = "<?php
php_check_syntax('somefile.php');
?>";
$code2 = "<?php
\$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
\$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
\$diff = array_diff_key(\$array1, \$array2);
?>";
$data = array($code1, $code2);
$opt = array('is_string' => true);
$this->pci->parseArray($data, $opt);
$r = $this->pci->getVersion();
$exp = '5.1.0';
$this->assertEquals($exp, $r);
}
/**
* Tests parsing multiple strings (chunk of code)
* and return maximum PHP version
*
* @return void
* @covers PHP_CompatInfo::getVersion
* @group getVersion
* @group standard
*/
public function testGetVersionWithMax()
{
$code1 = "<?php
php_check_syntax('somefile.php');
?>";
$code2 = "<?php
\$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
\$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
\$diff = array_diff_key(\$array1, \$array2);
?>";
$data = array($code1, $code2);
$opt = array('is_string' => true);
$this->pci->parseArray($data, $opt);
$r = $this->pci->getVersion(false, true);
$exp = '5.0.4';
$this->assertEquals($exp, $r);
}
/**
* Tests parsing a file and get classes declared (end-user defined)
*
* @return void
* @covers PHP_CompatInfo::getClasses
* @group getClasses
* @group standard
*/
public function testGetClasses()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds
. 'php5_method_chaining.php';
$this->pci->parseFile($fn);
$r = $this->pci->getClasses();
$exp = array('Person');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and get classes declared (internal)
*
* @return void
* @covers PHP_CompatInfo::getClasses
* @group getClasses
* @group standard
*/
public function testGetClassesInternal()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'PHP5' . $ds . 'tokens.php5';
$r = $this->pci->getClasses($f);
$exp = array('Exception');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a file and get functions declared
* (internal and end-user defined)
*
* @return void
* @covers PHP_CompatInfo::getFunctions
* @group getFunctions
* @group standard
*/
public function testGetFunctions()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseFile';
$src = $dir . $ds . 'File_Find-1.3.0__Find.php';
$this->pci->parseFile($src);
$r = $this->pci->getFunctions();
$exp = array('_file_find_match_shell_get_pattern',
'addcslashes',
'array_merge',
'array_pop',
'array_push',
'basename',
'closedir',
'count',
'define',
'defined',
'each',
'explode',
'glob',
'implode',
'is_a',
'is_array',
'is_dir',
'is_readable',
'maptree',
'maptreemultiple',
'opendir',
'preg_match',
'preg_replace',
'preg_split',
'print_r',
'readdir',
'reset',
'search',
'sizeof',
'str_replace',
'strcasecmp',
'strlen',
'strpos',
'substr',
'substr_count');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and get functions declared
* (internal and end-user defined) for a specific file
*
* @return void
* @covers PHP_CompatInfo::getFunctions
* @group getFunctions
* @group standard
*/
public function testGetFunctionsByFile()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'extensions.php';
$r = $this->pci->getFunctions($f);
$exp = array('apache_get_modules',
'dl',
'extension_loaded',
'imageantialias',
'imagecreate',
'print_r',
'sqlite_libversion',
'xdebug_start_trace',
'xdebug_stop_trace');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a file and get constants declared
* (internal and end-user defined)
*
* @return void
* @covers PHP_CompatInfo::getConstants
* @group getConstants
* @group standard
*/
public function testGetConstants()
{
$ds = DIRECTORY_SEPARATOR;
$src = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$this->pci->parseFile($src);
$r = $this->pci->getConstants();
$exp = array('DATE_W3C',
'DIRECTORY_SEPARATOR',
'FALSE',
'PHP_EOL',
'PHP_OS',
'__FILE__');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and get constants declared
* (internal and end-user defined) for a specific file
*
* @return void
* @covers PHP_CompatInfo::getConstants
* @group getConstants
* @group standard
*/
public function testGetConstantsByFile()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'PHP5' . $ds . 'upload_error.php';
$r = $this->pci->getConstants($f);
$exp = array('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');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a file and get tokens declared
*
* @return void
* @covers PHP_CompatInfo::getTokens
* @group getTokens
* @group standard
*/
public function testGetTokens()
{
$ds = DIRECTORY_SEPARATOR;
$src = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$this->pci->parseFile($src);
$r = $this->pci->getTokens();
$exp = array();
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and get tokens declared
* for a specific file
*
* @return void
* @covers PHP_CompatInfo::getTokens
* @group getTokens
* @group standard
*/
public function testGetTokensByFile()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'PHP5' . $ds . 'tokens.php5';
$r = $this->pci->getTokens($f);
$exp = array('abstract',
'catch',
'clone',
'final',
'implements',
'instanceof',
'interface',
'private',
'protected',
'public',
'throw',
'try');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and retrieve the Code Condition level
*
* @return void
* @covers PHP_CompatInfo::getConditions
* @group getConditions
* @group standard
*/
public function testGetConditionsWithoutContext()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('debug' => true,
'recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseDir($dir, $opt);
$r = $this->pci->getConditions(false, true);
$exp = 2; // extension condition code level
$this->assertEquals($exp, $r);
}
/**
* Tests parsing a directory and retrieve the Code Condition
* contextual data
*
* @return void
* @covers PHP_CompatInfo::getConditions
* @group getConditions
* @group standard
*/
public function testGetConditionsWithContext()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('debug' => true,
'recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseDir($dir, $opt);
$r = $this->pci->getConditions();
$exp = array(2, array(array(), array('SQLite'), array()));
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and retrieve the Code Condition
* of a specific file
*
* @return void
* @covers PHP_CompatInfo::getConditions
* @group getConditions
* @group standard
*/
public function testGetConditionsByFile()
{
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('debug' => false,
'recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'phpinfo.php';
$r = $this->pci->getConditions($f);
$exp = array(0); // no condition code
$this->assertSame($exp, $r);
}
/**
* Tests parsing a file and get extensions used
*
* @return void
* @covers PHP_CompatInfo::getExtensions
* @group getExtensions
* @group standard
*/
public function testGetExtensions()
{
$resources = array('date', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$this->pci->parseFile($fn);
$r = $this->pci->getExtensions();
$exp = array('date', 'SimpleXML');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and get extensions used
* for a specific file
*
* @return void
* @covers PHP_CompatInfo::getExtensions
* @group getExtensions
* @group standard
*/
public function testGetExtensionsByFile()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'extensions.php';
$r = $this->pci->getExtensions($f);
$exp = array('gd',
'SQLite',
'xdebug');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file and get list of ignored functions
*
* @return void
* @covers PHP_CompatInfo::getIgnoredFunctions
* @group getIgnoredFunctions
* @group standard
*/
public function testGetIgnoredFunctions()
{
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'ignore_functions_match.php';
$opt = array('ignore_functions_match' => array('preg_match', array('/^debug/')));
$this->pci->parseFile($fn, $opt);
$r = $this->pci->getIgnoredFunctions();
$exp = array('debug_backtrace', 'debug_print_backtrace');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and get list of ignored functions
* for a specific file
*
* @return void
* @covers PHP_CompatInfo::getIgnoredFunctions
* @group getIgnoredFunctions
* @group standard
*/
public function testGetIgnoredFunctionsByFile()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('ignore_functions_match' => array('preg_match', array('/debug/')));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'extensions.php';
$r = $this->pci->getIgnoredFunctions($f);
$exp = array('xdebug_start_trace', 'xdebug_stop_trace');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file and get list of ignored extensions
*
* @return void
* @covers PHP_CompatInfo::getIgnoredExtensions
* @group getIgnoredExtensions
* @group standard
*/
public function testGetIgnoredExtensions()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseDir' . $ds . 'extensions.php';
$opt = array('ignore_extensions_match' => array('preg_match', array('/SQL/')));
$this->pci->parseFile($fn, $opt);
$r = $this->pci->getIgnoredExtensions();
$exp = array('SQLite');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and get list of ignored extensions
* for a specific file
*
* @return void
* @covers PHP_CompatInfo::getIgnoredExtensions
* @group getIgnoredExtensions
* @group standard
*/
public function testGetIgnoredExtensionsByFile()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('ignore_extensions' => array('gd'));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'extensions.php';
$r = $this->pci->getIgnoredExtensions($f);
$exp = array('gd');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a single file and get list of ignored constants
*
* @return void
* @covers PHP_CompatInfo::getIgnoredConstants
* @group getIgnoredConstants
* @group standard
*/
public function testGetIgnoredConstants()
{
$resources = array('date', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'conditional.php';
$opt = array('ignore_constants' => array('PHP_EOL', '__LINE__'));
$this->pci->parseFile($fn, $opt);
$r = $this->pci->getIgnoredConstants();
$exp = array('PHP_EOL');
$this->assertSame($exp, $r);
}
/**
* Tests parsing a directory and get list of ignored constants
* for a specific file
*
* @return void
* @covers PHP_CompatInfo::getIgnoredConstants
* @group getIgnoredConstants
* @group standard
*/
public function testGetIgnoredConstantsByFile()
{
$resources = array('bcmath', 'date', 'pcre', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseFile' . $ds;
$opt = array('ignore_constants' => array('PHP_EOL', '__LINE__'));
$this->pci->parseDir($dir, $opt);
$f = $dir . 'conditional.php';
$r = $this->pci->getIgnoredConstants($f);
$exp = array('PHP_EOL');
$this->assertSame($exp, $r);
}
/**
* Tests parsing multiple data sources and get only the summary result
* without the function list returns only by debug mode
*
* @return void
* @covers PHP_CompatInfo::getSummary
* @group getSummary
* @group standard
*/
public function testGetSummaryWithoutFunctionsForArrayFile()
{
$resources = array('date', 'pcre', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseFile';
$fn1 = $dir . $ds . 'File_Find-1.3.0__Find.php';
$fn2 = $dir . $ds . 'conditional.php';
$opt = array('debug' => false);
$this->pci->parseData(array($fn1, $fn2), $opt);
$r = $this->pci->getSummary();
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.1.1',
'classes' => array('File_Find'),
'extensions' => array('date', 'pcre', 'SimpleXML'),
'constants' => array('DATE_W3C',
'DIRECTORY_SEPARATOR',
'FALSE',
'NULL',
'PHP_EOL',
'PHP_OS',
'PREG_SPLIT_DELIM_CAPTURE',
'PREG_SPLIT_NO_EMPTY',
'TRUE',
'__FILE__'),
'tokens' => array(),
'cond_code' => array(5));
$this->assertSame($exp, $r);
}
/**
* Tests parsing multiple data sources and get only the summary result
* including the function list returns by debug mode
*
* @return void
* @covers PHP_CompatInfo::getSummary
* @group getSummary
* @group standard
*/
public function testGetSummaryWithFunctionsForArrayFile()
{
$resources = array('date', 'pcre', 'SimpleXML');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseFile';
$fn1 = $dir . $ds . 'File_Find-1.3.0__Find.php';
$fn2 = $dir . $ds . 'conditional.php';
$opt = array('debug' => true);
$this->pci->parseData(array($fn1, $fn2), $opt);
$r = $this->pci->getSummary();
$exp = array('ignored_files' => array(),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.1.1',
'classes' => array('File_Find'),
'functions' => array('_file_find_match_shell_get_pattern',
'addcslashes',
'array_merge',
'array_pop',
'array_push',
'basename',
'closedir',
'count',
'date',
'debug_backtrace',
'define',
'defined',
'dirname',
'each',
'explode',
'function_exists',
'glob',
'implode',
'is_a',
'is_array',
'is_dir',
'is_readable',
'maptree',
'maptreemultiple',
'opendir',
'phpversion',
'preg_match',
'preg_replace',
'preg_split',
'print_r',
'readdir',
'reset',
'search',
'simplexml_load_file',
'sizeof',
'str_replace',
'strcasecmp',
'strlen',
'strpos',
'strtoupper',
'substr',
'substr_count',
'version_compare'),
'extensions' => array('date', 'pcre', 'SimpleXML'),
'constants' => array('DATE_W3C',
'DIRECTORY_SEPARATOR',
'FALSE',
'NULL',
'PHP_EOL',
'PHP_OS',
'PREG_SPLIT_DELIM_CAPTURE',
'PREG_SPLIT_NO_EMPTY',
'TRUE',
'__FILE__'),
'tokens' => array(),
'cond_code' => array(5,
array(
array('debug_backtrace',
'simplexml_load_file'),
array(),
array('DIRECTORY_SEPARATOR',
'FILE_FIND_DEBUG'),
))
);
$this->assertSame($exp, $r);
}
/**
* Tests parsing directory and get only the summary result
* without the function list returns only by debug mode
*
* @return void
* @covers PHP_CompatInfo::getSummary
* @group getSummary
* @group standard
*/
public function testGetSummaryForDirectory()
{
$resources = array('gd', 'SQLite', 'xdebug');
$testSkipped = array();
if (!$this->isResourceAvailable($resources, $testSkipped)) {
foreach ($testSkipped as $reason) {
$this->markTestSkipped($reason);
}
}
$ds = DIRECTORY_SEPARATOR;
$dir = dirname(__FILE__) . $ds . 'parseDir' . $ds;
$opt = array('recurse_dir' => true,
'file_ext' => array('php', 'php5'));
$this->pci->parseData($dir, $opt);
$r = $this->pci->getSummary();
$exp = array('ignored_files' => $this->getIgnoredFileList($dir, $opt),
'ignored_functions' => array(),
'ignored_extensions' => array(),
'ignored_constants' => array(),
'max_version' => '',
'version' => '5.2.0',
'classes' => array('Exception'),
'extensions' => array('gd',
'SQLite',
'xdebug'),
'constants' => array('PHP_SHLIB_SUFFIX',
'TRUE',
'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'),
'tokens' => array('abstract',
'catch',
'clone',
'final',
'implements',
'instanceof',
'interface',
'private',
'protected',
'public',
'throw',
'try'),
'cond_code' => array(2));
$this->assertSame($exp, $r);
}
}
// Call PHP_CompatInfo_TestSuite_Standard::main() if file is executed directly.
if (PHPUnit_MAIN_METHOD == "PHP_CompatInfo_TestSuite_Standard::main") {
PHP_CompatInfo_TestSuite_Standard::main();
}
?>