Windows NT DGPENSV2LPKMN 10.0 build 14393 (Windows Server 2016) AMD64
Apache/2.4.46 (Win64) OpenSSL/1.1.1h PHP/7.3.25
: 172.16.0.66 | : 172.16.0.254
Cant Read [ /etc/named.conf ]
7.3.25
SYSTEM
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
[ A ]
[ C ]
[ D ]
C: /
xampp7 /
php /
tests /
[ HOME SHELL ]
Name
Size
Permission
Action
Console_Getopt
[ DIR ]
drwxrwxrwx
Structures_Graph
[ DIR ]
drwxrwxrwx
XML_Util
[ DIR ]
drwxrwxrwx
beehiveforum082
[ DIR ]
drwxrwxrwx
emptyDir
[ DIR ]
drwxrwxrwx
kohana22
[ DIR ]
drwxrwxrwx
parseDir
[ DIR ]
drwxrwxrwx
parseFile
[ DIR ]
drwxrwxrwx
AllTests.php
3.97
KB
-rw-rw-rw-
PHP_CompatInfo_TestSuite_Bugs....
26.23
KB
-rw-rw-rw-
PHP_CompatInfo_TestSuite_Cli.p...
27.54
KB
-rw-rw-rw-
PHP_CompatInfo_TestSuite_Stand...
113.31
KB
-rw-rw-rw-
checkMax.php
1.29
KB
-rw-rw-rw-
sample_req6056.php
910
B
-rw-rw-rw-
Delete
Unzip
Zip
${this.title}
Close
Code Editor : 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(); } ?>
Close