Blame | Letzte Änderung | Log anzeigen | RSS feed
<?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 = "<?phpphp_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 = "<?phpphp_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 = "<?phpphp_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();}?>