/** * Render job template for test case * * @param \PHPUnit_Framework_Test $testcase * @param \PHPUnit_Framework_TestResult $result * @param array $params * @param Environment $environment * @return string */ private function generateTestCaseJob(\PHPUnit_Framework_Test $testcase, \PHPUnit_Framework_TestResult $result, array $params, Environment $environment) { if ($result === null) { $result = new \PHPUnit_Framework_TestResult(); } $configFile = false; if (isset($_SERVER['argv']['--configuration'])) { for ($index = 0; $index <= count($_SERVER['argv']); $index++) { if ($_SERVER['argv'][$index] == '--configuration') { $configFile = $_SERVER['argv'][$index + 1]; break; } } } else { $phpunitPath = MTF_BP . '/phpunit.xml'; if (file_exists($phpunitPath)) { $configFile = realpath($phpunitPath); } else { if (file_exists($phpunitPath . '.dist')) { $configFile = realpath($phpunitPath . '.dist'); } } } if (!$configFile) { throw new \Exception('Cannot define phpunit configuration path'); } $configuration = \PHPUnit_Util_Configuration::getInstance($configFile); $listenerConfiguration = var_export(serialize($configuration->getListenerConfiguration()), true); $class = new \ReflectionClass($testcase); $template = new \Text_Template(sprintf('%s%sTestCaseRun.tpl', __DIR__, DIRECTORY_SEPARATOR)); if ($result->getCollectCodeCoverageInformation()) { $coverage = 'TRUE'; } else { $coverage = 'FALSE'; } if (defined('MTF_BOOT_FILE')) { $bootstrap = var_export(MTF_BOOT_FILE, true); } else { if (defined('PHPUNIT_COMPOSER_INSTALL')) { $bootstrap = var_export(PHPUNIT_COMPOSER_INSTALL, true); } else { $bootstrap = '\'\''; } } if (defined('__PHPUNIT_PHAR__')) { $phar = var_export(__PHPUNIT_PHAR__, true); } else { $phar = '\'\''; } if ($testcase instanceof \Mtf\TestCase\Injectable) { $filePath = $testcase->getFilePath(); } else { $filePath = false; } $data = var_export(serialize($params['data']), true); $includePath = var_export(get_include_path(), true); $env = var_export(serialize($environment->getEnvironmentVariables()), true); // must do these fixes because TestCaseMethod.tpl has unserialize('{data}') in it, and we can't break BC // the lines above used to use addcslashes() rather than var_export(), which breaks null byte escape sequences $data = "'." . $data . ".'"; $includePath = "'." . $includePath . ".'"; $env = "'." . $env . ".'"; $listenerConfiguration = "'." . $listenerConfiguration . ".'"; $template->setVar(array('bootstrap' => $bootstrap, 'phar' => $phar, 'filename' => $class->getFileName(), 'className' => $class->getName(), 'methodName' => $params['name'], 'collectCodeCoverageInformation' => $coverage, 'data' => $data, 'dataName' => $params['dataName'], 'include_path' => $includePath, 'env' => $env, 'filePath' => $filePath, 'listenerConfiguration' => $listenerConfiguration)); return $template->render(); }