function _generateReport($xmlFile, $php, $env) { if (version_compare(PHP_VERSION, '5', '>=') && extension_loaded('xsl')) { $this->debug('Including php5 xslt wrapper'); require_once AK_BASE_DIR . DS . 'vendor' . DS . 'xslt-php4-php5' . DS . 'xslt-php4-php5.php'; } // Fail if XSLT extension is not available if (!function_exists('xslt_create')) { $this->error('Cannot generate report: xslt extension missing'); return FALSE; } $currentDir = getcwd(); chdir(AK_BASE_DIR . DIRECTORY_SEPARATOR . 'resources' . DIRECTORY_SEPARATOR . 'xsl'); $xsl_file = AK_BASE_DIR . DIRECTORY_SEPARATOR . 'resources' . DIRECTORY_SEPARATOR . 'xsl' . DIRECTORY_SEPARATOR . 'phpunit2-noframes.xsl'; // look for xsl if (!is_readable($xsl_file)) { $this->error('Cannot generate report: ' . $xsl_file . ' missing'); chdir($currentDir); return FALSE; } if (!is_readable($xmlFile)) { return false; } $schema = file_get_contents($xmlFile); $xml = new SimpleXMLElement($schema); $suites = $xml->xpath("/testsuites/testsuite"); $tests = 0; $failures = 0; $errors = 0; $time = 0; foreach ($suites as $suite) { $attributes = $suite->attributes(); $tests += (int) $attributes->tests; $failures += (int) $attributes->failures; $errors += (int) $attributes->errors; $time += (double) $attributes->time; } $environment = array(); $environment['php'] = $php; $environment['class'] = $failures > 0 ? 'failure' : $errors > 0 ? 'error' : ''; $environment['backend'] = $env; $environment['tests'] = $tests; $environment['failures'] = $failures; $environment['errors'] = $errors; $environment['time'] = round($time, 3); $link = AK_BASE_DIR . DS . 'test' . DS . 'report' . DS . $php . DS . $env . DS . 'index.html'; $environment['details'] = 'file://' . $link; $this->report_environments[] = $environment; $arguments = array('/_xml' => $schema, '/_xsl' => file_get_contents($xsl_file)); // create an XSLT processor $xh = xslt_create(); // set error handler xslt_set_error_handler($xh, array(&$this, 'xslt_error_handler')); // process the schema $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); xslt_free($xh); $targetFile = AK_BASE_DIR . DS . 'test' . DS . 'report' . DS . $php . DS . $env . DS . 'index.html'; if (!file_exists(dirname($targetFile))) { mkdir(dirname($targetFile), 0777, true); } file_put_contents($targetFile, $result); chdir($currentDir); }
function TransformSchema($schema, $xsl, $schematype = 'string') { // Fail if XSLT extension is not available if (!function_exists('xslt_create')) { return FALSE; } $xsl_file = dirname(__FILE__) . '/xsl/' . $xsl . '.xsl'; // look for xsl if (!is_readable($xsl_file)) { return FALSE; } switch ($schematype) { case 'file': if (!is_readable($schema)) { return FALSE; } $schema = _file_get_contents($schema); break; case 'string': default: if (!is_string($schema)) { return FALSE; } } $arguments = array('/_xml' => $schema, '/_xsl' => _file_get_contents($xsl_file)); // create an XSLT processor $xh = xslt_create(); // set error handler xslt_set_error_handler($xh, array(&$this, 'xslt_error_handler')); // process the schema $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); xslt_free($xh); return $result; }
/** * Converts an XML schema file to the specified DTD version. * * Call this method to convert the specified XML schema file to a different AXMLS * DTD version. For instance, to convert a schema created for an pre-1.0 version for * AXMLS (DTD version 0.1) to a newer version of the DTD (e.g. 0.2). If no DTD version * parameter is specified, the schema will be converted to the current DTD version. * If the newFile parameter is provided, the converted schema will be written to the specified * file. * @see ConvertSchemaString() * * @param string $filename Name of XML schema file that will be converted. * @param string $newVersion DTD version to convert to. * @param string $newFile File name of (converted) output file. * @return string Converted XML schema or FALSE if an error occurs. */ function ConvertSchemaFile($filename, $newVersion = NULL, $newFile = NULL) { // grab current version if (!($version = $this->SchemaFileVersion($filename))) { return FALSE; } if (!isset($newVersion)) { $newVersion = $this->schemaVersion; } if ($version == $newVersion) { $result = file_get_contents($filename); // remove unicode BOM if present if (substr($result, 0, 3) == sprintf('%c%c%c', 239, 187, 191)) { $result = substr($result, 3); } } else { // Fail if XSLT extension is not available if (!function_exists('xslt_create')) { return FALSE; } $xsl_file = dirname(__FILE__) . '/xsl/convert-' . $version . '-' . $newVersion . '.xsl'; // look for xsl if (!is_readable($xsl_file)) { return FALSE; } $arguments = array('/_xml' => file_get_contents($filename), '/_xsl' => file_get_contents($xsl_file)); // create an XSLT processor $xh = xslt_create(); // set error handler xslt_set_error_handler($xh, array(&$this, 'xslt_error_handler')); // process the schema $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); xslt_free($xh); } if (is_string($newFile) and $fp = fopen($newFile, 'w')) { fwrite($fp, $result); fclose($fp); } return $result; }