lib/php/libsdk/SDK/Build/PGO/TrainingCaseIterator.php (72 lines of code) (raw):
<?php
namespace SDK\Build\PGO;
use SDK\Build\PGO\Config as PGOConfig;
class TrainingCaseIterator implements \Iterator
{
protected $conf;
protected $items = array();
protected $idx;
protected $el;
public function __construct(PGOConfig $conf)
{
$this->rewind();
$this->conf = $conf;
$items = glob($this->conf->getCasesTplDir() . DIRECTORY_SEPARATOR . "*");
foreach ($items as $it) {
if (!is_dir($it)) {
continue;
}
if (!file_exists($this->getHandlerFilename($it))) {
echo "Test case handler isn't present in '$it'.\n";
continue;
}
if ($this->isInactive($it)) {
echo "The test case in '$it' is marked inactive.\n";
continue;
}
$this->items[] = $it;
}
}
protected function isInactive(string $base) : bool
{
return file_exists($base . DIRECTORY_SEPARATOR . "inactive");
}
protected function getHandlerFilename(string $base) : string
{
return $base . DIRECTORY_SEPARATOR . "TrainingCaseHandler.php";
}
public function current()
{
$base = $this->items[$this->idx];
$ns = basename($base);
/* Don't overwrite generated config. */
$it = $this->conf->getSectionItem($ns);
if (!$it) {
$this->conf->importSectionFromDir($ns, $base);
}
require_once $this->getHandlerFilename($base);
$srv_http = $this->conf->getSrv($this->conf->getSectionItem($ns, "srv_http"));
$srv_db = $this->conf->getSrv($this->conf->getSectionItem($ns, "srv_db"));
$class = "$ns\\TrainingCaseHandler";
$this->el = new $class($this->conf, $srv_http, $srv_db);
return $this->el;
}
public function next()
{
$this->idx++;
}
public function rewind()
{
$this->idx = 0;
}
public function valid()
{
return $this->idx < count($this->items);
}
public function key()
{
if (!is_object($this->el)) {
return NULL;
}
return $this->el->getName();
}
}