Created
November 13, 2011 16:32
-
-
Save anonymous/1362297 to your computer and use it in GitHub Desktop.
Patch for the PEAR DocTest Parser to support a shorthand syntax
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*** Default.php 2011-10-25 18:16:52.499473219 +0200 | |
--- TripleSlashParser.php 2011-10-25 19:28:02.027472030 +0200 | |
*************** | |
*** 86,91 **** | |
--- 86,96 ---- | |
const KW_DOCTEST_EXPECTS = 'expects'; | |
/** | |
+ * Short keyword for the doctest expected result | |
+ */ | |
+ const KW_DOCTEST_SHORT_EXPECTS = '/'; | |
+ | |
+ /** | |
* Keyword for the doctest expected file | |
*/ | |
const KW_DOCTEST_EXPECTS_FILE = 'expects-file'; | |
*************** | |
*** 182,194 **** | |
public function parse(array $files) | |
{ | |
$ret = array(); | |
! $kw = preg_quote(self::KW_DOCTEST_NAME, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_FLAGS, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_SKIP_IF, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_INI_SET, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_SETUP, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_CLEAN, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_EXPECTS, '/') . '|' | |
. preg_quote(self::KW_DOCTEST_EXPECTS_FILE, '/'); | |
foreach ($files as $file) { | |
$testCaseArray = $this->_parseFile($file); | |
--- 187,200 ---- | |
public function parse(array $files) | |
{ | |
$ret = array(); | |
! $kw = preg_quote(self::KW_DOCTEST_NAME, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_FLAGS, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_SKIP_IF, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_INI_SET, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_SETUP, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_CLEAN, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_EXPECTS, '/') . '|' | |
! . preg_quote(self::KW_DOCTEST_SHORT_EXPECTS, '/') . '|' | |
. preg_quote(self::KW_DOCTEST_EXPECTS_FILE, '/'); | |
foreach ($files as $file) { | |
$testCaseArray = $this->_parseFile($file); | |
*************** | |
*** 212,242 **** | |
// remove spaces and * at the beginning | |
$l = preg_replace('/^\s*\*\s?/', '', $l); | |
$p = preg_quote(self::SYNTAX_PREFIX, '/'); | |
! if (preg_match("/^\s*$p\s?($kw):\s*(.*)$/", $l, $m)) { | |
! switch ($m[1]) { | |
case self::KW_DOCTEST_NAME: | |
! $this->_handleDoctestLine($m[2]); | |
break; | |
case self::KW_DOCTEST_FLAGS: | |
! $this->_handleFlagsLine($m[2]); | |
break; | |
case self::KW_DOCTEST_SKIP_IF: | |
! $this->_handleFlagsLine($m[2]); | |
break; | |
case self::KW_DOCTEST_INI_SET: | |
! $this->_handleIniSetLine($m[2]); | |
break; | |
case self::KW_DOCTEST_EXPECTS: | |
! $this->_handleExpectsLine($m[2]); | |
break; | |
case self::KW_DOCTEST_EXPECTS_FILE: | |
! $this->_handleExpectsFileLine($m[2]); | |
break; | |
case self::KW_DOCTEST_CLEAN: | |
! $this->_handleCleanLine($m[2]); | |
break; | |
case self::KW_DOCTEST_SETUP: | |
! $this->_handleSetupLine($m[2]); | |
break; | |
} | |
} else if (preg_match('/^\s*'.$p.'\s?(.*)$/', $l, $m)) { | |
--- 218,254 ---- | |
// remove spaces and * at the beginning | |
$l = preg_replace('/^\s*\*\s?/', '', $l); | |
$p = preg_quote(self::SYNTAX_PREFIX, '/'); | |
! if (preg_match("/^(.*)$p\s?($kw):?\s*(.*)$/", $l, $m)) { | |
! switch ($m[2]) { | |
case self::KW_DOCTEST_NAME: | |
! $this->_handleDoctestLine($m[3]); | |
break; | |
case self::KW_DOCTEST_FLAGS: | |
! $this->_handleFlagsLine($m[3]); | |
break; | |
case self::KW_DOCTEST_SKIP_IF: | |
! $this->_handleFlagsLine($m[3]); | |
break; | |
case self::KW_DOCTEST_INI_SET: | |
! $this->_handleIniSetLine($m[3]); | |
break; | |
case self::KW_DOCTEST_EXPECTS: | |
! $this->_handleExpectsLine($m[3]); | |
! break; | |
! case self::KW_DOCTEST_SHORT_EXPECTS: | |
! if (trim($m[1])) { | |
! $this->_handleCodeLine($m[1]); | |
! } | |
! $this->_handleExpectsLine($m[3]); | |
break; | |
case self::KW_DOCTEST_EXPECTS_FILE: | |
! $this->_handleExpectsFileLine($m[3]); | |
break; | |
case self::KW_DOCTEST_CLEAN: | |
! $this->_handleCleanLine($m[3]); | |
break; | |
case self::KW_DOCTEST_SETUP: | |
! $this->_handleSetupLine($m[3]); | |
break; | |
} | |
} else if (preg_match('/^\s*'.$p.'\s?(.*)$/', $l, $m)) { | |
*************** | |
*** 367,373 **** | |
$data = file_get_contents($file); | |
// speed improvement, don't bother tokenizing file if it does not | |
// contain any doctest | |
! if (false === strstr($data, self::KW_DOCTEST_EXPECTS)) { | |
return array(); | |
} | |
return token_get_all($data); | |
--- 379,387 ---- | |
$data = file_get_contents($file); | |
// speed improvement, don't bother tokenizing file if it does not | |
// contain any doctest | |
! if (false === | |
! (strstr($data, self::KW_DOCTEST_EXPECTS) | |
! | strstr($data, self::KW_DOCTEST_SHORT_EXPECTS))) { | |
return array(); | |
} | |
return token_get_all($data); | |
*************** | |
*** 474,481 **** | |
private function _hasDocTest($data) | |
{ | |
$p = preg_quote(self::SYNTAX_PREFIX, '/'); | |
! $k = preg_quote(self::KW_DOCTEST_EXPECTS, '/'); | |
! return preg_match("/$p\s?$k/m", $data); | |
} | |
// }}} | |
--- 488,494 ---- | |
private function _hasDocTest($data) | |
{ | |
$p = preg_quote(self::SYNTAX_PREFIX, '/'); | |
! return preg_match("/$p/m", $data); | |
} | |
// }}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ | |
/** | |
* This file is part of the PEAR Testing_DocTest package. | |
* | |
* <code> | |
* echo "Foo!"; | |
* /// Foo! | |
* </code> | |
* | |
* <code> | |
* echo "Foo!"; /// Foo! | |
* </code> | |
* | |
* <code> | |
* echo "Multiline\n"; | |
* echo "Output"; | |
* /// Multiline | |
* /// Output | |
* </code> | |
* | |
*/ | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment