Skip to content

Commit

Permalink
- Implement PHPUnit_Runner_StandardTestSuiteLoader::reload().
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastianbergmann committed Feb 20, 2007
1 parent d364284 commit 8475957
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 7 deletions.
80 changes: 75 additions & 5 deletions PHPUnit/Runner/StandardTestSuiteLoader.php
Expand Up @@ -64,6 +64,12 @@
*/
class PHPUnit_Runner_StandardTestSuiteLoader implements PHPUnit_Runner_TestSuiteLoader
{
/**
* @var array
* @access protected
*/
protected $loaded = array();

/**
* @param string $suiteClassName
* @param string $suiteClassFile
Expand All @@ -73,8 +79,11 @@ class PHPUnit_Runner_StandardTestSuiteLoader implements PHPUnit_Runner_TestSuite
*/
public function load($suiteClassName, $suiteClassFile = '')
{
$suiteClassName = str_replace('.php', '', $suiteClassName);
$suiteClassFile = !empty($suiteClassFile) ? $suiteClassFile : str_replace('_', '/', $suiteClassName) . '.php';
list($suiteClassName, $suiteClassFile) = $this->parseArguments(
$suiteClassName, $suiteClassFile
);

$classes = get_declared_classes();

if (!class_exists($suiteClassName, FALSE)) {
if(!file_exists($suiteClassFile)) {
Expand All @@ -91,6 +100,23 @@ public function load($suiteClassName, $suiteClassFile = '')
}

PHPUnit_Util_Fileloader::checkAndLoad($suiteClassFile);

$this->loaded[$suiteClassName] = array_values(
array_diff(get_declared_classes(), $classes)
);

$count = count($this->loaded[$suiteClassName]);

for ($i = 0; $i < $count; $i++) {
$class = new ReflectionClass($this->loaded[$suiteClassName][$i]);
$file = $class->getFileName();

if (file_exists($file)) {
$this->loaded[$suiteClassName][$i] = $file;
} else {
unset($this->loaded[$suiteClassName][$i]);
}
}
}

if (class_exists($suiteClassName, FALSE)) {
Expand All @@ -108,13 +134,57 @@ public function load($suiteClassName, $suiteClassFile = '')
}

/**
* @param ReflectionClass $aClass
* @param string $suiteClassName
* @param string $suiteClassFile
* @return ReflectionClass
* @throws RuntimeException
* @access public
*/
public function reload(ReflectionClass $aClass)
public function reload($suiteClassName, $suiteClassFile = '')
{
if (!extension_loaded('runkit')) {
throw new RuntimeException(
'The Runkit extension is required for class reloading.'
);
}

list($suiteClassName, $suiteClassFile) = $this->parseArguments(
$suiteClassName, $suiteClassFile
);

if (isset($this->loaded[$suiteClassName])) {
foreach ($this->loaded[$suiteClassName] as $file) {
runkit_import($file);
}

if (class_exists($suiteClassName, FALSE)) {
return new ReflectionClass($suiteClassName);
} else {
throw new RuntimeException(
sprintf(
'Could not reload test suite "%s".',

$suiteClassName
)
);
}
} else {
return $this->load($suiteClassName, $suiteClassFile);
}
}

/**
* @param string $suiteClassName
* @param string $suiteClassFile
* @return array
* @access protected
*/
protected function parseArguments($suiteClassName, $suiteClassFile)
{
return $aClass;
return array(
str_replace('.php', '', $suiteClassName),
!empty($suiteClassFile) ? $suiteClassFile : str_replace('_', '/', $suiteClassName) . '.php'
);
}
}
?>
5 changes: 3 additions & 2 deletions PHPUnit/Runner/TestSuiteLoader.php
Expand Up @@ -71,10 +71,11 @@ interface PHPUnit_Runner_TestSuiteLoader
public function load($suiteClassName, $suiteClassFile = '');

/**
* @param ReflectionClass $aClass
* @param string $suiteClassName
* @param string $suiteClassFile
* @return ReflectionClass
* @access public
*/
public function reload(ReflectionClass $aClass);
public function reload($suiteClassName, $suiteClassFile = '');
}
?>
3 changes: 3 additions & 0 deletions package.xml
Expand Up @@ -733,6 +733,9 @@
<extension>
<name>pdo_sqlite</name>
</extension>
<extension>
<name>runkit</name>
</extension>
<extension>
<name>xdebug</name>
<min>2.0.0RC2</min>
Expand Down

0 comments on commit 8475957

Please sign in to comment.