summaryrefslogtreecommitdiff
path: root/server/vendor/php-opencloud/common/tests/integration/Runner.php
diff options
context:
space:
mode:
authormanzerbredes <loic.guegan_secondary@yahoo.fr>2016-03-15 16:17:39 +0100
committermanzerbredes <loic.guegan_secondary@yahoo.fr>2016-03-15 16:17:39 +0100
commit26d10bc0fa4befbac54453228ae1ce89021bdec2 (patch)
tree029d7240ecf7416205e5f76cf9107a6b5bdf8ca3 /server/vendor/php-opencloud/common/tests/integration/Runner.php
parent8ad216dedf017f3d6de047a25d08db3b98e16361 (diff)
parent03ef74d0cfe675a6e18a91f039182ca1b248d8f5 (diff)
Merge branch 'develop' into loic
Diffstat (limited to 'server/vendor/php-opencloud/common/tests/integration/Runner.php')
-rw-r--r--server/vendor/php-opencloud/common/tests/integration/Runner.php112
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();
+ }
+ }
+ }
+}