Server : Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6 System : Windows NT USER-PC 6.1 build 7601 (Windows 7 Professional Edition Service Pack 1) AMD64 User : User ( 0) PHP Version : 7.4.6 Disable Function : NONE Directory : C:/xampp/php/tests/ |
<?php /** * Test suite for bugs declared in 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_Bugs.php,v 1.23 2008/12/18 23:06:45 farell Exp $ * @link http://pear.php.net/package/PHP_CompatInfo * @since File available since Release 1.6.0 */ if (!defined("PHPUnit_MAIN_METHOD")) { define("PHPUnit_MAIN_METHOD", "PHP_CompatInfo_TestSuite_Bugs::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_Bugs 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 Bugs 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); } /** * Regression test for bug #1626 * * @return void * @link http://pear.php.net/bugs/bug.php?id=1626 * Class calls are seen wrong * @covers PHP_CompatInfo::parseString * @group parseString */ public function testBug1626() { $str = '<?php include("File.php"); File::write("test", "test"); ?>'; $r = $this->pci->parseString($str); $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); } /** * Regression test for bug #2771 * * @return void * @link http://pear.php.net/bugs/bug.php?id=2771 * Substr($var,4) not working for SAPI_ extensions * @covers PHP_CompatInfo::parseString * @group parseString */ public function testBug2771() { $str = '<?php apache_request_headers(); apache_response_headers(); ?>'; $r = $this->pci->parseString($str); $exp = array('ignored_files' => array(), 'ignored_functions' => array(), 'ignored_extensions' => array(), 'ignored_constants' => array(), 'max_version' => '', 'version' => '4.3.0', 'classes' => array(), 'functions' => array('apache_request_headers', 'apache_response_headers'), 'extensions' => array(), 'constants' => array(), 'tokens' => array(), 'cond_code' => array(0)); $this->assertSame($exp, $r); } /** * Regression test for bug #7813 * * Parse source file of PEAR_PackageUpdate 0.5.0 * * @return void * @link http://pear.php.net/bugs/bug.php?id=7813 * wrong PHP minimum version detection * @covers PHP_CompatInfo::parseFile * @group parseFile */ public function testBug7813() { $ds = DIRECTORY_SEPARATOR; $fn = dirname(__FILE__) . $ds . 'parseFile' . $ds . 'PackageUpdate.php'; $opt = array('debug' => true, 'ignore_functions' => array('debug_backtrace')); $r = $this->pci->parseFile($fn, $opt); $exp = array('ignored_files' => array(), 'ignored_functions' => array('debug_backtrace'), 'ignored_extensions' => array(), 'ignored_constants' => array(), 'max_version' => '', 'version' => '4.3.0', 'classes' => array('PEAR_Config'), 'functions' => array('array_keys', 'array_shift', 'class_exists', 'count', 'debug_backtrace', 'define', 'explode', 'factory', 'fclose', 'file_exists', 'file_get_contents', 'fopen', 'function_exists', 'fwrite', 'get_class', 'get_include_path', 'getenv', 'is_array', 'is_int', 'is_readable', 'reset', 'serialize', 'settype', 'strlen', 'unserialize', 'version_compare'), 'extensions' => array(), 'constants' => array('DIRECTORY_SEPARATOR', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_CORE_ERROR', 'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', 'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', 'E_WARNING', 'FALSE', 'NULL', 'PATH_SEPARATOR', 'TRUE'), 'tokens' => array(), 'cond_code' => array(1, array(array('debug_backtrace'), array(), array())), '4.0.0' => array( 0 => array( 'function' => 'define', 'extension' => false, 'pecl' => false ), 1 => array ( 'function' => 'get_class', 'extension' => false, 'pecl' => false ), 2 => array ( 'function' => 'function_exists', 'extension' => false, 'pecl' => false ), 3 => array ( 'function' => 'count', 'extension' => false, 'pecl' => false ), 4 => array ( 'function' => 'class_exists', 'extension' => false, 'pecl' => false ), 5 => array ( 'function' => 'explode', 'extension' => false, 'pecl' => false ), 6 => array ( 'function' => 'file_exists', 'extension' => false, 'pecl' => false ), 7 => array ( 'function' => 'is_readable', 'extension' => false, 'pecl' => false ), 8 => array ( 'function' => 'unserialize', 'extension' => false, 'pecl' => false ), 9 => array ( 'function' => 'strlen', 'extension' => false, 'pecl' => false ), 10 => array ( 'function' => 'getenv', 'extension' => false, 'pecl' => false ), 11 => array ( 'function' => 'reset', 'extension' => false, 'pecl' => false ), 12 => array ( 'function' => 'array_keys', 'extension' => false, 'pecl' => false ), 13 => array ( 'function' => 'fopen', 'extension' => false, 'pecl' => false ), 14 => array ( 'function' => 'serialize', 'extension' => false, 'pecl' => false ), 15 => array ( 'function' => 'fwrite', 'extension' => false, 'pecl' => false ), 16 => array ( 'function' => 'fclose', 'extension' => false, 'pecl' => false ), 17 => array ( 'function' => 'settype', 'extension' => false, 'pecl' => false ), 18 => array ( 'function' => 'is_int', 'extension' => false, 'pecl' => false ), 19 => array ( 'function' => 'is_array', 'extension' => false, 'pecl' => false, ), 20 => array ( 'function' => 'array_shift', 'extension' => false, 'pecl' => false ) ), '4.0.7' => array ( 0 => array ( 'function' => 'version_compare', 'extension' => false, 'pecl' => false ) ), '4.3.0' => array ( 0 => array ( 'function' => 'get_include_path', 'extension' => false, 'pecl' => false, ), 1 => array ( 'function' => 'file_get_contents', 'extension' => false, 'pecl' => false ) )); $this->assertSame($exp, $r); } /** * Regression test for bug #8559 * * @return void * @link http://pear.php.net/bugs/bug.php?id=8559 * PHP_CompatInfo fails to scan if it finds empty file in path * @covers PHP_CompatInfo::parseDir * @group parseDir */ public function testBug8559() { $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'emptyDir'; $r = $this->pci->parseDir($dir); $this->assertFalse($r); } /** * Regression test for bug #10100 * * @return void * @link http://pear.php.net/bugs/bug.php?id=10100 * Wrong parsing of possible attributes in strings * @covers PHP_CompatInfo::parseString * @group parseString * @group bugs */ public function testBug10100() { $str = '<?php $test = "public$link"; ?>'; $r = $this->pci->parseString($str); $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); } /** * Regression test for bug #13873 * * @return void * @link http://pear.php.net/bugs/bug.php?id=13873 * PHP_CompatInfo fails to scan conditional code * if it finds other than encapsed string * @covers PHP_CompatInfo::parseFolder * @group parseDir * @group bugs */ public function testBug13873() { $resources = array('date', 'pcre'); $testSkipped = array(); if (!$this->isResourceAvailable($resources, $testSkipped)) { foreach ($testSkipped as $reason) { $this->markTestSkipped($reason); } } $ds = DIRECTORY_SEPARATOR; $dir = dirname(__FILE__) . $ds . 'beehiveforum082' . $ds . 'forum'; $opt = array(); $r = $this->pci->parseFolder($dir, $opt); $exp = array('ignored_files' => $this->getIgnoredFileList($dir, $opt), 'ignored_functions' => array(), 'ignored_extensions' => array(), 'ignored_constants' => array(), 'max_version' => '', 'version' => '4.0.6', 'classes' => array(), 'functions' => array('_htmlentities', '_stripslashes', 'array_map', 'array_merge', 'basename', 'bh_session_check_perm', 'bh_session_get_value', 'bh_setcookie', 'db_affected_rows', 'db_connect', 'db_escape_string', 'db_fetch_array', 'db_insert_id', 'db_num_rows', 'db_query', 'db_trigger_error', 'defined', 'delete_attachment_by_aid', 'explode', 'fclose', 'file_exists', 'filesize', 'fix_html', 'floor', 'folder_get_available_by_forum', 'fopen', 'form_checkbox', 'form_input_hidden', 'form_input_password', 'form_submit', 'forum_apply_user_permissions', 'forum_check_global_setting_name', 'forum_check_password', 'forum_check_setting_name', 'forum_closed_message', 'forum_delete', 'forum_delete_tables', 'forum_get_all_prefixes', 'forum_get_global_settings', 'forum_get_password', 'forum_get_saved_password', 'forum_get_setting', 'forum_get_settings_by_fid', 'forum_process_unread_cutoff', 'forum_restricted_message', 'forum_search', 'forum_start_page_get_html', 'fread', 'function_exists', 'fwrite', 'get_forum_data', 'get_request_uri', 'get_table_prefix', 'get_webtag', 'header', 'html_display_error_msg', 'html_display_warning_msg', 'html_draw_bottom', 'html_draw_top', 'html_get_top_frame_name', 'implode', 'in_array', 'install_get_table_conflicts', 'intval', 'is_array', 'is_dir', 'is_md5', 'is_null', 'is_numeric', 'load_language_file', 'md5', 'mkdir', 'mt_rand', 'ob_end_clean', 'ob_get_contents', 'ob_start', 'perm_group_get_users', 'preg_match', 'sizeof', 'sprintf', 'str_replace', 'stristr', 'strlen', 'strtoupper', 'time', 'trim', 'user_get_logon', 'word_filter_rem_ob_tags'), 'extensions' => array('date', 'pcre'), 'constants' => array('FALSE', 'TRUE', '__FILE__'), 'tokens' => array(), 'cond_code' => array(4) ); $this->assertSame($exp, $r); } /** * Regression test for bug #14696 * * @return void * @link http://pear.php.net/bugs/bug.php?id=14696 * PHP_CompatInfo fails to scan code line when not ended with ; * @covers PHP_CompatInfo::parseFile * @group parseFile * @group bugs */ public function testBug14696() { $ds = DIRECTORY_SEPARATOR; $fn = dirname(__FILE__) . $ds . 'kohana22' . $ds . 'modules' . $ds . 'gmaps' . $ds . 'javascript.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('substr'), 'extensions' => array(), 'constants' => array(), 'tokens' => array(), 'cond_code' => array(0) ); $this->assertSame($exp, $r); } } // Call PHP_CompatInfo_TestSuite_Bugs::main() if file is executed directly. if (PHPUnit_MAIN_METHOD == "PHP_CompatInfo_TestSuite_Bugs::main") { PHP_CompatInfo_TestSuite_Bugs::main(); } ?>