zoe Wed, 15 Jul 2009 10:35:04 +0000
URL: http://svn.php.net/viewvc?view=revision&revision=284111
Changed paths:
U php/phpruntests/trunk/src/taskScheduler/rtTaskSchedulerFile.php
U php/phpruntests/trunk/src/testcase/rtPhpRunner.php
U php/phpruntests/trunk/src/testcase/rtPhpTest.php
U php/phpruntests/trunk/src/testcase/rtPhpTestFile.php
U
php/phpruntests/trunk/src/testcase/sections/executablesections/rtCleanSection.php
U
php/phpruntests/trunk/src/testcase/sections/executablesections/rtFileSection.php
U
php/phpruntests/trunk/src/testcase/sections/executablesections/rtSkipIfSection.php
U php/phpruntests/trunk/src/testgroup/rtPhpTestGroup.php
U php/phpruntests/trunk/src/testrun/rtPhpTestRun.php
Log:
Fixing the parser to deal with empty sections
Modified: php/phpruntests/trunk/src/taskScheduler/rtTaskSchedulerFile.php
===================================================================
--- php/phpruntests/trunk/src/taskScheduler/rtTaskSchedulerFile.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/taskScheduler/rtTaskSchedulerFile.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -21,18 +21,6 @@
private $groupTasks = false; // are the tasks stored in groups?
- /**
- * the signal-handler is called by the interrupt- or quit-signal. this is
- * necessary to cleanup the tmp files and terminate the script correct.
- *
- * @param int $signal
- */
- public static function signalHandler($signal)
- {
- exit(0);
- }
-
-
/**
* sets the task-list which has to be an array of task-objects.
* it's also possible to use a multidimensional array. in this case the
@@ -88,9 +76,7 @@
if ($this->processCount > sizeof($this->taskList)) {
$this->processCount = sizeof($this->taskList);
}
-
-
// distribute the task to the children
$this->distributeTasks();
@@ -113,14 +99,7 @@
break;
}
}
-
-
- // register signal-handler
- /*
- pcntl_signal(SIGINT, "rtTaskSchedulerFile::signalHandler");
- pcntl_signal(SIGQUIT, "rtTaskSchedulerFile::signalHandler");
- */
-
+
// wait until all child-processes are terminated
for ($i=0; $i<$this->processCount; $i++) {
pcntl_waitpid($this->pidStore[$i], $status);
@@ -195,8 +174,6 @@
unlink(self::TMP_FILE.$cid);
}
-
- $this->pidStore = array();
}
Modified: php/phpruntests/trunk/src/testcase/rtPhpRunner.php
===================================================================
--- php/phpruntests/trunk/src/testcase/rtPhpRunner.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/testcase/rtPhpRunner.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -58,8 +58,6 @@
fclose($pipes[0]);
- $counter = 0;
-
while (true) {
/* hide errors from interrupted syscalls */
$r = $pipes;
@@ -69,19 +67,14 @@
$n = @stream_select($r, $w, $e, $this->timeOut);
if ($n === false) {
- throw new rtException('Stream select failure in rtPhpRunner');
+ throw new rtPhpRunnerException('Stream select failure in rtPhpRunner');
} else if ($n === 0) {
proc_terminate($proc);
- throw new rtException('The process running test code has timed out in rtPhpRunner');
+ throw new rtPhpRunnerException ('The process running test code has timed out in rtPhpRunner');
} else if ($n > 0) {
- $counter++;
- if ($counter > 100) {
- proc_terminate($proc);
- throw new rtException('The process running test code has timed out in rtPhpRunner');
- }
- $line = fread($pipes[1], 8192);
+ $line = fread($pipes[1], 8192);
if (strlen($line) == 0) {
- // EOF
+ /* EOF */
break;
}
$data .= (binary) $line;
Modified: php/phpruntests/trunk/src/testcase/rtPhpTest.php
===================================================================
--- php/phpruntests/trunk/src/testcase/rtPhpTest.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/testcase/rtPhpTest.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -42,7 +42,7 @@
{
$lastSection = end($this->sectionHeadings);
$start=0;
-
+
foreach($this->sectionHeadings as $keyNumber => $sectionKey) {
if($keyNumber < count($this->sectionHeadings) - 1) {
@@ -53,9 +53,9 @@
for($index=$start; $index<count($this->contents); $index++)
if($this->contents[$index] == "--".$sectionKey."--") {
//Found the beginning of the section
-
+
for($contentsLine=$index + 1; $contentsLine<count($this->contents); $contentsLine ++) {
-
+
if( ($this->contents[$contentsLine] == "--".$nextKey."--") || ($contentsLine == count($this->contents))) {
//Found the end of the section OR the end of the test
$start = $contentsLine - 1;
@@ -82,7 +82,6 @@
//Identify the file and expect section types
$this->fileSection = $this->setFileSection();
$this->expectSection = $this->setExpectSection();
-
$this->fileSection->setExecutableFileName($this->getName());
}
Modified: php/phpruntests/trunk/src/testcase/rtPhpTestFile.php
===================================================================
--- php/phpruntests/trunk/src/testcase/rtPhpTestFile.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/testcase/rtPhpTestFile.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -29,6 +29,21 @@
'rtIsValidSectionName',
'rtIsSectionImplemented'
);
+
+ private function isSectionHeading($string) {
+ return preg_match("/^\s*--[A-Z]+(_[A-Z]+|)--/", $string);
+ }
+
+ private function getUntrimmedSectionHeading($string) {
+ preg_match("/^\s*(--[A-Z]+(_[A-Z]+|)--)/", $string, $matches);
+ return $matches[1];
+ }
+
+ private function getSectionHeading($string) {
+ preg_match("/^\s*--([A-Z]+(_[A-Z]+|))--/", $string, $matches);
+ return $matches[1];
+ }
+
/**
* Reads the contents of the test file and creates an array of the contents.
@@ -42,18 +57,48 @@
$this->testContents = file($this->testFileName);
}
+ /*
+ * Trims the lines endings - if the line is a section header it gets trimmed to either side of the --.
+ * This is to avoid problems with tests that have spurious characters after the header.
+ */
public function normaliseLineEndings()
{
for ($i=0; $i<count($this->testContents); $i++) {
- //This is not nice but there are a huge number of tests with random spacs at the end of the section header
- if (preg_match("/^\s*--([A-Z]+(_[A-Z]+|))--/", $this->testContents[$i], $matches)) {
- $this->sectionHeadings[] = $matches[1];
- $this->testContents[$i] = '--' . $matches[1] . '--';
- } else {
+ //Just trim the contents lines here not the section header lines
+ if ($this->isSectionHeading($this->testContents[$i])) {
+ $this->testContents[$i] = $this->getUntrimmedSectionHeading($this->testContents[$i]);
+ }else {
$this->testContents[$i] = rtrim($this->testContents[$i], $this->carriageReturn.$this->newLine);
}
}
}
+
+ /*
+ * Removes and discards any empty test sections
+ * Constructs a list of section headingg, stripped of their -- identifiers.
+ */
+ public function removeEmptySections() {
+ $tempArray = array();
+
+ for ($i=0; $i<count($this->testContents) - 1; $i++) {
+ $nextLine = $this->testContents[$i+1];
+ $thisLine = $this->testContents[$i];
+ if ($this->isSectionHeading($thisLine)) {
+ if (!$this->isSectionHeading($nextLine)) {
+ $tempArray[] = $this->getUntrimmedSectionHeading($thisLine);
+ $this->sectionHeadings[] = $this->getSectionHeading($thisLine);
+ }
+ } else {
+ $tempArray[] = $thisLine;
+ }
+ }
+
+ if($this->isSectionHeading(end($this->testContents))) {
+ $this->sectionHeadings[] = $this->getSectionHeading(end($this->testContents));
+ }
+ $tempArray[] = end($this->testContents);
+ $this->testContents = $tempArray;
+ }
public function arePreConditionsMet()
{
@@ -94,5 +139,6 @@
{
return $this->testExitMessage;
}
+
}
?>
Modified: php/phpruntests/trunk/src/testcase/sections/executablesections/rtCleanSection.php
===================================================================
--- php/phpruntests/trunk/src/testcase/sections/executablesections/rtCleanSection.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/testcase/sections/executablesections/rtCleanSection.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -43,7 +43,7 @@
$testStatus->setMessage('fail_clean','Execution of clean section failed: '.trim($this->output) );
}
- } catch (rtException $e) {
+ } catch (rtPhpRunnerException $e) {
$testStatus->setTrue('fail_clean');
$testStatus->setMessage('fail_clean',$e->getMessage);
}
Modified: php/phpruntests/trunk/src/testcase/sections/executablesections/rtFileSection.php
===================================================================
--- php/phpruntests/trunk/src/testcase/sections/executablesections/rtFileSection.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/testcase/sections/executablesections/rtFileSection.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -67,7 +67,7 @@
}
- } catch (rtException $e) {
+ } catch (rtPhpRunnerException $e) {
$testStatus->setTrue('fail');
$testStatus->setMessage('fail', $e->getMessage() );
}
Modified: php/phpruntests/trunk/src/testcase/sections/executablesections/rtSkipIfSection.php
===================================================================
--- php/phpruntests/trunk/src/testcase/sections/executablesections/rtSkipIfSection.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/testcase/sections/executablesections/rtSkipIfSection.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -51,7 +51,7 @@
$testStatus->setMessage('warn', $matches[1]);
}
}
- } catch (rtException $e) {
+ } catch (rtPhpRunnerException $e) {
$testStatus->setTrue('fail_skip');
$testStatus->setMessage('fail_skip', 'Failed to execute skipif section' . $e->getMessage());
}
Modified: php/phpruntests/trunk/src/testgroup/rtPhpTestGroup.php
===================================================================
--- php/phpruntests/trunk/src/testgroup/rtPhpTestGroup.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/testgroup/rtPhpTestGroup.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -41,6 +41,7 @@
$testFile = new rtPhpTestFile();
$testFile->doRead($testFileName);
$testFile->normaliseLineEndings();
+ $testFile->removeEmptySections();
//The test name is the full path to the test file name without the .phpt
Modified: php/phpruntests/trunk/src/testrun/rtPhpTestRun.php
===================================================================
--- php/phpruntests/trunk/src/testrun/rtPhpTestRun.php 2009-07-15 10:17:04 UTC (rev 284110)
+++ php/phpruntests/trunk/src/testrun/rtPhpTestRun.php 2009-07-15 10:35:04 UTC (rev 284111)
@@ -124,8 +124,11 @@
$testFile = new rtPhpTestFile();
$testFile->doRead($testName);
$testFile->normaliseLineEndings();
-
+ $testFile->removeEmptySections();
+ // var_dump($testFile->getSectionHeadings());
+ // var_dump($testFile->getContents());
+
$testStatus = new rtTestStatus($testFile->getTestName());
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php