protected static function makeSuite($className, $group = null) { $suite = new PHPUnit_Framework_TestSuite(); $suite->setName($className); $class = new ReflectionClass($className); $parser = new Parser(); $parser->startExternalParse(Title::newMainPage(), new ParserOptions(), Parser::OT_HTML, true); foreach (self::$engineConfigurations as $engineName => $opts) { if ($group !== null && $group !== $engineName) { continue; } try { $engineClass = "Scribunto_{$engineName}Engine"; $engine = new $engineClass(self::$engineConfigurations[$engineName] + array('parser' => $parser)); $engine->setTitle($parser->getTitle()); $engine->getInterpreter(); } catch (Scribunto_LuaInterpreterNotFoundError $e) { $suite->addTest(new $className('skipUnavailable', array(), '', $engineName), array('Lua', $engineName)); continue; } // Work around PHPUnit breakage: the only straightforward way to // get the data provider is to call // PHPUnit_Util_Test::getProvidedData, but that instantiates the // class without passing any parameters to the constructor. But we // *need* that engine name. self::$staticEngineName = $engineName; $engineSuite = new PHPUnit_Framework_TestSuite(); $engineSuite->setName("{$engineName}: {$className}"); foreach ($class->getMethods() as $method) { if (PHPUnit_Framework_TestSuite::isPublicTestMethod($method)) { $name = $method->getName(); $groups = PHPUnit_Util_Test::getGroups($className, $name); $groups[] = 'Lua'; $groups[] = $engineName; $groups = array_unique($groups); $data = PHPUnit_Util_Test::getProvidedData($className, $name); if (is_array($data) || $data instanceof Iterator) { // with @dataProvider $dataSuite = new PHPUnit_Framework_TestSuite_DataProvider($className . '::' . $name); foreach ($data as $k => $v) { $dataSuite->addTest(new $className($name, $v, $k, $engineName), $groups); } $engineSuite->addTest($dataSuite); } elseif ($data === false) { // invalid @dataProvider $engineSuite->addTest(new PHPUnit_Framework_Warning("The data provider specified for {$className}::{$name} is invalid.")); } else { // no @dataProvider $engineSuite->addTest(new $className($name, array(), '', $engineName), $groups); } } } $suite->addTest($engineSuite); } return $suite; }
public function before(\Codeception\Event\SuiteEvent $se) { $suite = $se->getSuite(); $tests = $suite->tests(); foreach ($tests as $id => $test) { if (is_a($test, 'Codeception\\Test\\Cest')) { $testClass = $test->getTestClass(); $testClassName = get_class($testClass); $testMethod = $test->getTestMethod(); $testFile = $test->getMetadata()->getFilename(); $testActor = $test->getMetadata()->getCurrent('actor'); $dataMethod = Annotation::forMethod($testClass, $testMethod)->fetch('dataprovider'); try { if (empty($dataMethod)) { continue; } if (false === is_callable([$testClass, $dataMethod])) { throw new \Exception(); } $dataProvider = new \PHPUnit_Framework_TestSuite_DataProvider(); $examples = $testClassName::$dataMethod(); foreach ($examples as $example) { if ($example === null) { throw new TestParseException($testFile, "Invalid values format returned by DataProvider {$dataMethod} for {$testClassName}->{$testMethod}."); } $dataTest = new CestFormat($testClass, $testMethod, $testFile); $dataTest->getMetadata()->setServices(['di' => $test->getMetadata()->getService('di'), 'dispatcher' => $test->getMetadata()->getService('dispatcher'), 'modules' => $test->getMetadata()->getService('modules')]); $dataTest->getMetadata()->setCurrent(['actor' => $testActor, 'example' => $example]); $step = new Comment('', $dataTest->getMetadata()->getCurrent('example')); $dataTest->getScenario()->setFeature($dataTest->getSpecFromMethod() . ' | ' . $step->getArgumentsAsString(100)); $groups = Annotation::forMethod($testClass, $testMethod)->fetchAll('group'); $dataProvider->addTest($dataTest, $groups); } $tests[$id] = $dataProvider; } catch (\Exception $e) { throw new TestParseException($testFile, "DataProvider {$dataMethod} for {$testClassName}->{$testMethod} is invalid or not callable." . PHP_EOL . "Make sure this is a public static function."); } } } $suite->setTests($tests); }
public function loadTests($file) { Parser::load($file); $testClasses = Parser::getClassesFromFile($file); foreach ($testClasses as $testClass) { if (substr($testClass, -strlen('Cest')) !== 'Cest') { continue; } if (!(new \ReflectionClass($testClass))->isInstantiable()) { continue; } $unit = new $testClass(); $methods = get_class_methods($testClass); foreach ($methods as $method) { if (strpos($method, '_') === 0) { continue; } $rawExamples = Annotation::forMethod($unit, $method)->fetchAll('example'); if (count($rawExamples)) { $examples = array_map(function ($v) { return Annotation::arrayValue($v); }, $rawExamples); $dataProvider = new \PHPUnit_Framework_TestSuite_DataProvider(); foreach ($examples as $k => $example) { if ($example === null) { throw new TestParseException($file, "Example for {$testClass}->{$method} contains invalid data:\n" . $rawExamples[$k] . "\n" . "Make sure this is a valid JSON (Hint: \"-char for strings) or a single-line annotation in Doctrine-style"); } $test = new CestFormat($unit, $method, $file); $test->getMetadata()->setCurrent(['example' => $example]); $groups = Annotation::forMethod($unit, $method)->fetchAll('group'); $dataProvider->addTest($test, $groups); } $this->tests[] = $dataProvider; continue; } $this->tests[] = new CestFormat($unit, $method, $file); } } }
/** * @param ReflectionClass $theClass * @param string $name * @return PHPUnit_Framework_Test * @throws PHPUnit_Framework_Exception */ public static function createTest(ReflectionClass $theClass, $name) { $className = $theClass->getName(); if (!$theClass->isInstantiable()) { return self::warning(sprintf('Cannot instantiate class "%s".', $className)); } $backupSettings = PHPUnit_Util_Test::getBackupSettings($className, $name); $preserveGlobalState = PHPUnit_Util_Test::getPreserveGlobalStateSettings($className, $name); $runTestInSeparateProcess = PHPUnit_Util_Test::getProcessIsolationSettings($className, $name); $constructor = $theClass->getConstructor(); if ($constructor !== null) { $parameters = $constructor->getParameters(); // TestCase() or TestCase($name) if (count($parameters) < 2) { $test = new $className(); } else { try { $data = PHPUnit_Util_Test::getProvidedData($className, $name); } catch (PHPUnit_Framework_IncompleteTestError $e) { $message = sprintf('Test for %s::%s marked incomplete by data provider', $className, $name); $_message = $e->getMessage(); if (!empty($_message)) { $message .= "\n" . $_message; } $data = self::incompleteTest($className, $name, $message); } catch (PHPUnit_Framework_SkippedTestError $e) { $message = sprintf('Test for %s::%s skipped by data provider', $className, $name); $_message = $e->getMessage(); if (!empty($_message)) { $message .= "\n" . $_message; } $data = self::skipTest($className, $name, $message); } catch (Throwable $_t) { $t = $_t; } catch (Exception $_t) { $t = $_t; } if (isset($t)) { $message = sprintf('The data provider specified for %s::%s is invalid.', $className, $name); $_message = $t->getMessage(); if (!empty($_message)) { $message .= "\n" . $_message; } $data = self::warning($message); } // Test method with @dataProvider. if (isset($data)) { $test = new PHPUnit_Framework_TestSuite_DataProvider($className . '::' . $name); if (empty($data)) { $data = self::warning(sprintf('No tests found in suite "%s".', $test->getName())); } $groups = PHPUnit_Util_Test::getGroups($className, $name); if ($data instanceof PHPUnit_Framework_Warning || $data instanceof PHPUnit_Framework_SkippedTestCase || $data instanceof PHPUnit_Framework_IncompleteTestCase) { $test->addTest($data, $groups); } else { foreach ($data as $_dataName => $_data) { $_test = new $className($name, $_data, $_dataName); if ($runTestInSeparateProcess) { $_test->setRunTestInSeparateProcess(true); if ($preserveGlobalState !== null) { $_test->setPreserveGlobalState($preserveGlobalState); } } if ($backupSettings['backupGlobals'] !== null) { $_test->setBackupGlobals($backupSettings['backupGlobals']); } if ($backupSettings['backupStaticAttributes'] !== null) { $_test->setBackupStaticAttributes($backupSettings['backupStaticAttributes']); } $test->addTest($_test, $groups); } } } else { $test = new $className(); } } } if (!isset($test)) { throw new PHPUnit_Framework_Exception('No valid test provided.'); } if ($test instanceof PHPUnit_Framework_TestCase) { $test->setName($name); if ($runTestInSeparateProcess) { $test->setRunTestInSeparateProcess(true); if ($preserveGlobalState !== null) { $test->setPreserveGlobalState($preserveGlobalState); } } if ($backupSettings['backupGlobals'] !== null) { $test->setBackupGlobals($backupSettings['backupGlobals']); } if ($backupSettings['backupStaticAttributes'] !== null) { $test->setBackupStaticAttributes($backupSettings['backupStaticAttributes']); } } return $test; }
/** * @param string $className * @return PHPUnit_Framework_TestSuite */ public static function suite($className) { $suite = new PHPUnit_Framework_TestSuite(); $suite->setName($className); $class = new ReflectionClass($className); $classGroups = PHPUnit_Util_Test::getGroups($className); $staticProperties = $class->getStaticProperties(); // Create tests from Selenese/HTML files. if (isset($staticProperties['seleneseDirectory']) && is_dir($staticProperties['seleneseDirectory'])) { $files = array_merge(self::getSeleneseFiles($staticProperties['seleneseDirectory'], '.htm'), self::getSeleneseFiles($staticProperties['seleneseDirectory'], '.html')); // Create tests from Selenese/HTML files for multiple browsers. if (!empty($staticProperties['browsers'])) { foreach ($staticProperties['browsers'] as $browser) { $browserSuite = new PHPUnit_Framework_TestSuite(); $browserSuite->setName($className . ': ' . $browser['name']); foreach ($files as $file) { $browserSuite->addTest(new $className($file, array(), '', $browser), $classGroups); } $suite->addTest($browserSuite); } } else { foreach ($files as $file) { $suite->addTest(new $className($file), $classGroups); } } } // Create tests from test methods for multiple browsers. if (!empty($staticProperties['browsers'])) { foreach ($staticProperties['browsers'] as $browser) { $browserSuite = new PHPUnit_Framework_TestSuite(); $browserSuite->setName($className . ': ' . $browser['name']); foreach ($class->getMethods() as $method) { if (PHPUnit_Framework_TestSuite::isPublicTestMethod($method)) { $name = $method->getName(); $data = PHPUnit_Util_Test::getProvidedData($className, $name); $groups = PHPUnit_Util_Test::getGroups($className, $name); // Test method with @dataProvider. if (is_array($data) || $data instanceof Iterator) { $dataSuite = new PHPUnit_Framework_TestSuite_DataProvider($className . '::' . $name); foreach ($data as $_dataName => $_data) { $dataSuite->addTest(new $className($name, $_data, $_dataName, $browser), $groups); } $browserSuite->addTest($dataSuite); } else { if ($data === FALSE) { $browserSuite->addTest(new PHPUnit_Framework_Warning(sprintf('The data provider specified for %s::%s is invalid.', $className, $name))); } else { $browserSuite->addTest(new $className($name, array(), '', $browser), $groups); } } } } $suite->addTest($browserSuite); } } else { foreach ($class->getMethods() as $method) { if (PHPUnit_Framework_TestSuite::isPublicTestMethod($method)) { $name = $method->getName(); $data = PHPUnit_Util_Test::getProvidedData($className, $name); $groups = PHPUnit_Util_Test::getGroups($className, $name); // Test method with @dataProvider. if (is_array($data) || $data instanceof Iterator) { $dataSuite = new PHPUnit_Framework_TestSuite_DataProvider($className . '::' . $name); foreach ($data as $_dataName => $_data) { $dataSuite->addTest(new $className($name, $_data, $_dataName), $groups); } $suite->addTest($dataSuite); } else { if ($data === FALSE) { $suite->addTest(new PHPUnit_Framework_Warning(sprintf('The data provider specified for %s::%s is invalid.', $className, $name))); } else { $suite->addTest(new $className($name), $groups); } } } } } return $suite; }
/** * @param ReflectionClass $theClass * @param string $name * @param array $classGroups * @return PHPUnit_Framework_Test */ public static function createTest(ReflectionClass $theClass, $name, array $classGroups = array()) { $className = $theClass->getName(); if (!$theClass->isInstantiable()) { return self::warning(sprintf('Cannot instantiate class "%s".', $className)); } $classDocComment = $theClass->getDocComment(); $method = new ReflectionMethod($className, $name); $methodDocComment = $method->getDocComment(); $backupSettings = PHPUnit_Util_Test::getBackupSettings($className, $name); $preserveGlobalState = PHPUnit_Util_Test::getPreserveGlobalStateSettings($className, $name); $runTestInSeparateProcess = PHPUnit_Util_Test::getProcessIsolationSettings($className, $name); $constructor = $theClass->getConstructor(); if ($constructor !== NULL) { $parameters = $constructor->getParameters(); // TestCase() or TestCase($name) if (count($parameters) < 2) { $test = new $className(); } else { $data = PHPUnit_Util_Test::getProvidedData($className, $name); $groups = PHPUnit_Util_Test::getGroups($className, $name); if (is_array($data) || $data instanceof Iterator) { $test = new PHPUnit_Framework_TestSuite_DataProvider($className . '::' . $name); foreach ($data as $_dataName => $_data) { $_test = new $className($name, $_data, $_dataName); if ($runTestInSeparateProcess) { $_test->setRunTestInSeparateProcess(TRUE); if ($preserveGlobalState !== NULL) { $_test->setPreserveGlobalState($preserveGlobalState); } } if ($backupSettings['backupGlobals'] !== NULL) { $_test->setBackupGlobals($backupSettings['backupGlobals']); } if ($backupSettings['backupStaticAttributes'] !== NULL) { $_test->setBackupStaticAttributes($backupSettings['backupStaticAttributes']); } $test->addTest($_test, $groups); } } else { $test = new $className(); } } } if ($test instanceof PHPUnit_Framework_TestCase) { $test->setName($name); if ($runTestInSeparateProcess) { $test->setRunTestInSeparateProcess(TRUE); if ($preserveGlobalState !== NULL) { $test->setPreserveGlobalState($preserveGlobalState); } } if ($backupSettings['backupGlobals'] !== NULL) { $test->setBackupGlobals($backupSettings['backupGlobals']); } if ($backupSettings['backupStaticAttributes'] !== NULL) { $test->setBackupStaticAttributes($backupSettings['backupStaticAttributes']); } } return $test; }
/** * @param string $className * @return PHPUnit_Framework_TestSuite */ public static function suite($className) { $suite = new PHPUnit_Framework_TestSuite(); $suite->setName($className); $class = new ReflectionClass($className); $classGroups = PHPUnit_Util_Test::getGroups($className); $staticProperties = $class->getStaticProperties(); if (defined('XLITE_TEST_BROWSERS_LIST')) { $staticProperties['browsers'] = unserialize(XLITE_TEST_BROWSERS_LIST); } // Leave only one browser in deployment mode if (defined('DEPLOYMENT_TEST') && !empty($staticProperties['browsers'])) { $_browsers = array(); foreach ($staticProperties['browsers'] as $key => $value) { $_browsers[$key] = $value; break; } $staticProperties['browsers'] = $_browsers; } // Create tests from Selenese/HTML files. if (isset($staticProperties['seleneseDirectory']) && is_dir($staticProperties['seleneseDirectory'])) { $files = array_merge(self::getSeleneseFiles($staticProperties['seleneseDirectory'], '.htm'), self::getSeleneseFiles($staticProperties['seleneseDirectory'], '.html')); // Create tests from Selenese/HTML files for multiple browsers. if (!empty($staticProperties['browsers'])) { foreach ($staticProperties['browsers'] as $browser) { $browserSuite = new PHPUnit_Framework_TestSuite(); $browserSuite->setName($className . ': ' . $browser['name']); foreach ($files as $file) { $browserSuite->addTest(new $className($file, array(), '', $browser), $classGroups); } $suite->addTest($browserSuite); } } else { foreach ($files as $file) { $suite->addTest(new $className($file), $classGroups); } } } // Create tests from test methods for multiple browsers. if (!empty($staticProperties['browsers'])) { foreach ($staticProperties['browsers'] as $browser) { if (defined('NO_RESTORE')) { $browserSuite = new PHPUnit_Framework_TestSuite(); } else { $browserSuite = new XLite_Tests_TestSuite(); } $browserSuite->setName($className . ': ' . $browser['name']); foreach ($class->getMethods() as $method) { if (PHPUnit_Framework_TestSuite::isPublicTestMethod($method)) { $name = $method->getName(); $data = PHPUnit_Util_Test::getProvidedData($className, $name); $groups = PHPUnit_Util_Test::getGroups($className, $name); // Test method with @dataProvider. if (is_array($data) || $data instanceof Iterator) { $dataSuite = new PHPUnit_Framework_TestSuite_DataProvider($className . '::' . $name); foreach ($data as $_dataName => $_data) { $dataSuite->addTest(new $className($name, $_data, $_dataName, $browser), $groups); } $browserSuite->addTest($dataSuite); } else { if ($data === FALSE) { $browserSuite->addTest(new PHPUnit_Framework_Warning(sprintf('The data provider specified for %s::%s is invalid.', $className, $name))); } else { $browserSuite->addTest(new $className($name, array(), '', $browser), $groups); } } } } $suite->addTest($browserSuite); } } else { foreach ($class->getMethods() as $method) { if (PHPUnit_Framework_TestSuite::isPublicTestMethod($method)) { $name = $method->getName(); $data = PHPUnit_Util_Test::getProvidedData($className, $name); $groups = PHPUnit_Util_Test::getGroups($className, $name); // Test method with @dataProvider. if (is_array($data) || $data instanceof Iterator) { $dataSuite = new PHPUnit_Framework_TestSuite_DataProvider($className . '::' . $name); foreach ($data as $_dataName => $_data) { $dataSuite->addTest(new $className($name, $_data, $_dataName), $groups); } $suite->addTest($dataSuite); } else { if ($data === FALSE) { $suite->addTest(new PHPUnit_Framework_Warning(sprintf('The data provider specified for %s::%s is invalid.', $className, $name))); } else { $suite->addTest(new $className($name), $groups); } } } } } return $suite; }