* @package ZenTaoPMS * @version $Id: $ * @link http://www.zentao.net */ define('RUNTIME_ROOT', dirname(dirname(__FILE__)) . '/runtime/'); define('LIB_ROOT', dirname(dirname(__FILE__)) . '/lib/'); /** * Get version type of ZenTaoPMS. * * @param $version * @access public * @return void */ function getVersionType($version) { global $config; if(strpos($version, 'max') !== false) return 'max'; if(strpos($version, 'biz') !== false) return 'biz'; if(strpos($version, 'pro') !== false) return 'pro'; return 'zentao'; } /** * Run test cases of a directory using ztf. * * @param string $dir * @access public * @return void */ function ztfRun($dir) { global $config; $ztfPath = RUNTIME_ROOT . 'ztf'; $command = "$ztfPath $dir"; system($command); } /** * Extract comments to steps and expects. * * @param string $dir * @access public * @return void */ function ztfExtract($dir) { global $config; $ztfPath = RUNTIME_ROOT . 'ztf'; $command = "$ztfPath extract $dir"; system($command); } /** * Run yaml files of zendata. * * @access public * @return void */ function zdRun() { $frameworkRoot = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'framework' . DIRECTORY_SEPARATOR; include $frameworkRoot . 'helper.class.php'; include LIB_ROOT . 'spyc.php'; $zdRoot = dirname(dirname(__FILE__)) . '/data/'; $zdPath = RUNTIME_ROOT . 'zd'; set_time_limit(0); try { $config = new stdclass(); $config->db = new stdclass(); include dirname(dirname(dirname(__FILE__))) . '/config/config.php'; $versionType = getVersionType($config->version); $configRoot = $zdRoot . $versionType . '/'; include $configRoot . 'config.php'; /* Connect to MySQL. */ $dsn = "mysql:host={$config->db->host}:{$config->db->port};dbname={$config->db->name}"; $dbh = new PDO($dsn, $config->db->user, $config->db->password); echo 'MySQL connect success' . PHP_EOL; $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 设置报错处理方式。 $dbh->exec("SET GLOBAL sql_mode = '';"); $dbh->exec("set names 'utf8'"); $dbh->beginTransaction(); /* Copy common to tmp. */ $tmpCommonPath = RUNTIME_ROOT . 'tmp/common'; if(file_exists($tmpCommonPath)) system("rm -rf $tmpCommonPath"); system("cp -r {$zdRoot}common $tmpCommonPath"); system("rm {$zdRoot}sql/*"); /* Generate SQL files. */ $command = "$zdPath -c %s -d $zdRoot%s -n %s -o {$zdRoot}sql/%s.sql -table %s"; $tables = array(); foreach($builder as $key => $info) { /* Build zendata. */ $configData = array('fields' => array()); foreach($info['data'] as $fileKey => $fileName) { if($fileKey == 0) continue; // Skip default file. $data = Spyc::YAMLLoad($configRoot . $fileName . '.yaml'); foreach($data['fields'] as $field) { $fieldName = $field['field']; $fieldExist = false; foreach($configData['fields'] as $key => $configField) { if($configField['field'] == $fieldName) { $configData['fields'][$key] = $field; $fieldExist = true; break; } } if(!$fieldExist) $configData['fields'][] = $field; } } /* Refresh runtime/tmp/config.yaml. */ $spyc = new Spyc(); $spyc->setting_dump_force_quotes = true; $content = $spyc->dump($configData); $yaml = fopen(RUNTIME_ROOT . 'tmp/config.yaml', 'w'); fwrite($yaml, $content); fclose($yaml); /* Create sql files. */ $defaultName = $info['data'][0]; $tableName = $config->db->prefix . $defaultName; $execYaml = sprintf($command, RUNTIME_ROOT . 'tmp/config.yaml', $defaultName . '.yaml', $info['rows'], $fileName, $tableName); system($execYaml); echo $execYaml . "\n"; echo 'Execute: ' . $fileName . PHP_EOL; $tables[$tableName] = $tableName; } /* Truncate tables. */ foreach($tables as $table) { $dbh->exec('truncate table ' . $table); } /* Export SQL files to MySQL. */ $sqlDir = $zdRoot . '/sql/'; $sqlFilePath = scandir($sqlDir); foreach($sqlFilePath as $file) { if(!strpos($file, '.sql')) continue; $tableName = basename($file, '.sql'); $sql = file_get_contents($sqlDir . $file); $count = $dbh->exec($sql); echo $tableName . ' insert rows ' . $count . PHP_EOL; } $dbh->commit(); $dbh = null; } catch (PDOException $e) { die('Error!: ' . $e->getMessage() . PHP_EOL); } } /** * Print usage of zdtest. * * @access public * @return void */ function printUsage() { echo << The commands are: init only init data and files control run unit test for controllers model run unit test for models ui ui testing all run all tests clean remove data, files and cached files EOT; }