Skip to content

Instantly share code, notes, and snippets.

Created November 13, 2011 16:32
Show Gist options
  • Save anonymous/1362297 to your computer and use it in GitHub Desktop.
Save anonymous/1362297 to your computer and use it in GitHub Desktop.
Patch for the PEAR DocTest Parser to support a shorthand syntax
*** 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);
}
// }}}
<?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