diff options
| author | EoleDev <root@serverpc.home> | 2016-03-09 15:36:02 +0100 |
|---|---|---|
| committer | EoleDev <root@serverpc.home> | 2016-03-09 15:36:02 +0100 |
| commit | c479658f0bb953ded4b29ca573404a318f1e798f (patch) | |
| tree | f4c4fa4b7e245abd462794df5b6525ed41306e77 /server/vendor/php-opencloud/common/tests/integration/Runner.php | |
| parent | 5c6f6c97b7b906476ad5b9ed193e0140dd66f977 (diff) | |
New Library
Diffstat (limited to 'server/vendor/php-opencloud/common/tests/integration/Runner.php')
| -rw-r--r-- | server/vendor/php-opencloud/common/tests/integration/Runner.php | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/server/vendor/php-opencloud/common/tests/integration/Runner.php b/server/vendor/php-opencloud/common/tests/integration/Runner.php new file mode 100644 index 0000000..98d094c --- /dev/null +++ b/server/vendor/php-opencloud/common/tests/integration/Runner.php @@ -0,0 +1,112 @@ +<?php + +namespace OpenCloud\integration; + +class Runner +{ + private $basePath; + private $logger; + private $services = []; + + public function __construct($basePath) + { + $this->basePath = $basePath; + $this->logger = new DefaultLogger(); + $this->assembleServicesFromSamples(); + } + + private function traverse($path) + { + return new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS); + } + + private function assembleServicesFromSamples() + { + foreach ($this->traverse($this->basePath) as $servicePath) { + if ($servicePath->isDir()) { + foreach ($this->traverse($servicePath) as $versionPath) { + $this->services[$servicePath->getBasename()][] = $versionPath->getBasename(); + } + } + } + } + + private function getOpts() + { + $opts = getopt('s:v:t:', ['service:', 'version:', 'test::', 'debug::', 'help::']); + + $getOpt = function (array $keys, $default) use ($opts) { + foreach ($keys as $key) { + if (isset($opts[$key])) { + return $opts[$key]; + } + } + return $default; + }; + + return [ + $getOpt(['s', 'service'], 'all'), + $getOpt(['n', 'version'], 'all'), + $getOpt(['t', 'test'], ''), + isset($opts['debug']) ? (int) $opts['debug'] : 0, + ]; + } + + private function getRunnableServices($service, $version) + { + $services = $this->services; + + if ($service != 'all') { + if (!isset($this->services[$service])) { + throw new \InvalidArgumentException(sprintf("%s service does not exist", $service)); + } + + $versions = ($version == 'all') ? $this->services[$service] : [$version]; + $services = [$service => $versions]; + } + + return $services; + } + + /** + * @return TestInterface + */ + private function getTest($serviceName, $version, $verbosity) + { + $namespace = (new \ReflectionClass($this))->getNamespaceName(); + $className = sprintf("%s\\%s\\%sTest", $namespace, Utils::toCamelCase($serviceName), ucfirst($version)); + + if (!class_exists($className)) { + throw new \RuntimeException(sprintf("%s does not exist", $className)); + } + + $basePath = $this->basePath . DIRECTORY_SEPARATOR . $serviceName . DIRECTORY_SEPARATOR . $version; + $smClass = sprintf("%s\\SampleManager", $namespace); + $class = new $className($this->logger, new $smClass($basePath, $verbosity)); + + if (!($class instanceof TestInterface)) { + throw new \RuntimeException(sprintf("%s does not implement TestInterface", $className)); + } + + return $class; + } + + public function runServices() + { + list($serviceOpt, $versionOpt, $testMethodOpt, $verbosityOpt) = $this->getOpts(); + + foreach ($this->getRunnableServices($serviceOpt, $versionOpt) as $serviceName => $versions) { + foreach ($versions as $version) { + $testRunner = $this->getTest($serviceName, $version, $verbosityOpt); + + if ($testMethodOpt) { + $testRunner->runOneTest($testMethodOpt); + } else { + $testRunner->runTests(); + } + + $testRunner->teardown(); + } + } + } +} |
