svn: /pear/pear-core/trunk/ PEAR/PackageFile/v2/Validator.php tests/PEAR_PackageFile_v2_Validator/test_analyzeSourceCode_bug18218.phpt

[email protected] (Helgi Þormar Þorbjörnsson) Sun, 27 Feb 2011 18:58:02 +0000
Newsgroups php.pear.cvs,php.pear.core
Message-ID <[email protected]>
dufuz                                    Sun, 27 Feb 2011 18:58:02 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=308728

Log:
Fixed Bug #18218: "pear package" does not allow the use of late static binding [dufuz and Christer Edvartsen]

Bug: http://pear.php.net/bugs/18218 (unknown) 
      
Changed paths:
    U   pear/pear-core/trunk/PEAR/PackageFile/v2/Validator.php
    A   pear/pear-core/trunk/tests/PEAR_PackageFile_v2_Validator/test_analyzeSourceCode_bug18218.phpt

Modified: pear/pear-core/trunk/PEAR/PackageFile/v2/Validator.php
===================================================================
--- pear/pear-core/trunk/PEAR/PackageFile/v2/Validator.php	2011-02-27 18:06:38 UTC (rev 308727)
+++ pear/pear-core/trunk/PEAR/PackageFile/v2/Validator.php	2011-02-27 18:58:02 UTC (rev 308728)
@@ -2044,7 +2044,8 @@
                     }
                     continue 2;
                 case T_DOUBLE_COLON:
-                    if (!($tokens[$i - 1][0] == T_WHITESPACE || $tokens[$i - 1][0] == T_STRING)) {
+                    $token = $tokens[$i - 1][0];
+                    if (!($token == T_WHITESPACE || $token == T_STRING || $token == T_STATIC)) {
                         if (isset($this->_stack)) {
                             $this->_stack->push(__FUNCTION__, 'warning', array('file' => $file),
                                 'Parser error: invalid PHP found in file "%file%"');

Added: pear/pear-core/trunk/tests/PEAR_PackageFile_v2_Validator/test_analyzeSourceCode_bug18218.phpt
===================================================================
--- pear/pear-core/trunk/tests/PEAR_PackageFile_v2_Validator/test_analyzeSourceCode_bug18218.phpt	                        (rev 0)
+++ pear/pear-core/trunk/tests/PEAR_PackageFile_v2_Validator/test_analyzeSourceCode_bug18218.phpt	2011-02-27 18:58:02 UTC (rev 308728)
@@ -0,0 +1,94 @@
+--TEST--
+PEAR_PackageFile_Parser_v2_Validator->analyzeSourceCode test
+--SKIPIF--
+<?php
+if (!getenv('PHP_PEAR_RUNTESTS')) {
+    echo 'skip';
+}
+if (!function_exists('token_get_all')) {
+    echo 'skip';
+}
+?>
+--FILE--
+<?php
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'setup.php.inc';
+
+require_once 'PEAR/PackageFile/v2/Validator.php';
+$validator = new PEAR_PackageFile_v2_Validator;
+$validator->_stack = new PEAR_ErrorStack('PEAR_PackageFile_v2', false, null);
+
+$testdir = $statedir;
+@mkdir($testdir);
+
+
+$test6 = <<<'TEST'
+<?php
+class SqlDiff_Version {
+    /**
+     * The current version
+     *
+     * @var string
+     */
+    static protected $id = '@package_version@';
+
+    /**
+     * Get the version number only
+     *
+     * @return string
+     */
+    static public function getVersionNumber() {
+        if (strpos(static::$id, '@package_version') === 0) {
+            return 'dev';
+        }
+
+        return static::$id;
+    }
+
+    /**
+     * Get the version string
+     *
+     * @return string
+     */
+    static public function getVersionString() {
+        return 'SqlDiff-' . static::getVersionNumber() . ' by Christer Edvartsen.' . PHP_EOL;
+    }
+}
+?>
+TEST;
+$fp = fopen($testdir . DIRECTORY_SEPARATOR . 'test6.php', 'w');
+fwrite($fp, $test6);
+fclose($fp);
+
+$ret = $validator->analyzeSourceCode($testdir . DIRECTORY_SEPARATOR . 'test6.php');
+unlink($testdir . DIRECTORY_SEPARATOR . 'test6.php');
+
+$phpunit->assertNoErrors('1st valid PHP');
+$phpunit->showall();
+$phpunit->assertEquals(array(
+  "source_file" => $testdir . DIRECTORY_SEPARATOR . 'test6.php',
+  "declared_classes"=> array(
+    0 => "SqlDiff_Version"
+  ),
+  "declared_interfaces" => array(),
+  "declared_methods" => array(
+    "SqlDiff_Version" => array(
+      0 => "getVersionNumber",
+      1 => "getVersionString"
+    ),
+  ),
+  "declared_functions" => array(),
+  "used_classes" => array(
+    0 => "static"
+  ),
+  "inheritance" => array(),
+  "implements" => array(),
+), $ret, 'LSB, 1st valid PHP test');
+
+echo 'tests done';
+?>
+--CLEAN--
+<?php
+require_once dirname(__FILE__) . '/teardown.php.inc';
+?>
+--EXPECT--
+tests done