Author: cfinck Date: Sun Jun 21 02:21:24 2009 New Revision: 439
URL: http://svn.reactos.org/svn/reactos?rev=439&view=rev Log: - Encapsulate the SQL stuff done on the Compare page into a class WineTest_ResultReader. This can now be used to export the result data in other formats as well. - Add a CSV and XML (including a DTD) export for the result data - Fix minor stuff on the Detail page
Added: branches/danny-web/www/www.reactos.org/testman/export.php (with props) branches/danny-web/www/www.reactos.org/testman/export_csv.inc.php (with props) branches/danny-web/www/www.reactos.org/testman/export_xml.inc.php (with props) branches/danny-web/www/www.reactos.org/testman/lib/ (with props) branches/danny-web/www/www.reactos.org/testman/lib/WineTest_ResultReader.class.php (with props) branches/danny-web/www/www.reactos.org/testman/res/ (with props) branches/danny-web/www/www.reactos.org/testman/res/testinfo.dtd (with props) Modified: branches/danny-web/www/www.reactos.org/testman/compare.php branches/danny-web/www/www.reactos.org/testman/css/compare.css branches/danny-web/www/www.reactos.org/testman/detail.php branches/danny-web/www/www.reactos.org/testman/lang/de.inc.php branches/danny-web/www/www.reactos.org/testman/lang/en.inc.php branches/danny-web/www/www.reactos.org/testman/lang/pl.inc.php branches/danny-web/www/www.reactos.org/testman/utils.inc.php
Modified: branches/danny-web/www/www.reactos.org/testman/compare.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/compare.php [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/testman/compare.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -9,7 +9,6 @@ */
require_once("config.inc.php"); - require_once("connect.db.php"); require_once("utils.inc.php"); require_once("languages.inc.php"); require_once(SHARED_PATH . "subsys_layout.php"); @@ -71,29 +70,29 @@ <h2><?php echo $testman_langres["compare_title"]; ?></h2>
<?php - if(!isset($_GET["ids"])) + if(!array_key_exists("ids", $_GET)) die("Necessary information not specified"); - $id_array = explode(",", $_GET["ids"]); - - if(!$id_array) - die("<i>ids</i> parameter is no array"); - - // Verify that the array only contains numeric values to prevent SQL injections - for($i = 0; $i < count($id_array); $i++) - if(!is_numeric($id_array[$i])) - die("<i>ids</i> parameter is not entirely numeric!"); - - if(count($id_array) > MAX_COMPARE_RESULTS) - die(sprintf($testman_langres["maxselection"], MAX_COMPARE_RESULTS)); - - if(count($id_array) > 1) - { - echo '<div>'; - printf('<input type="checkbox" id="showchanged" onclick="ShowChangedCheckbox_OnClick(this)" /> <label for="showchanged">%s</label>', $testman_langres["showchanged"]); - echo '</div><br />'; - } + $reader = new WineTest_ResultReader(); + $result = $reader->setTestIDList($_GET["ids"]); + + // A string return value indicates an error. + if(is_string($result)) + die($result); ?> + +<div> + <?php + // Activate the option to only show the changed results between several test runs if more than one Test ID was passed. + if($reader->getTestIDCount() > 1) + printf('<input type="checkbox" id="showchanged" onclick="ShowChangedCheckbox_OnClick(this)" /> <label for="showchanged">%s</label><br />', $testman_langres["showchanged"]); + + echo $testman_langres["export_as"]; + ?>: + + <button onclick="window.open('export.php?f=csv&ids=<?php echo $_GET["ids"]; ?>')">CSV</button> + <button onclick="window.open('export.php?f=xml&ids=<?php echo $_GET["ids"]; ?>')">XML</button> +</div><br />
<div id="legend"> <div id="intro"><?php echo $testman_langres["legend"]; ?>:</div> @@ -113,43 +112,18 @@ </div>
<?php - // Establish a DB connection - try - { - $dbh = new PDO("mysql:host=" . DB_HOST, DB_USER, DB_PASS); - } - catch(PDOException $e) - { - // Give no exact error message here, so no server internals are exposed - die("Could not establish the DB connection"); - } - - // Get all Suite IDs linked to our Test IDs - $stmt = $dbh->query( - "SELECT s.id " . - "FROM " . DB_TESTMAN . ".winetest_suites s " . - "JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id " . - "WHERE e.test_id IN (" . $_GET["ids"] . ")" - ) or die("Query failed #1"); - $suite_ids = $stmt->fetchAll(PDO::FETCH_COLUMN); - $suite_idlist = implode(",", $suite_ids); - // Add the table and fill in the table head part echo '<table id="comparetable" class="datatable" cellspacing="0" cellpadding="0">'; echo '<thead><tr class="head">'; printf('<th class="TestSuite">%s</th>', $testman_langres["testsuite"]); - $stmt = $dbh->prepare( - "SELECT UNIX_TIMESTAMP(r.timestamp) timestamp, a.name, r.revision, r.platform " . - "FROM " . DB_TESTMAN . ".winetest_runs r " . - "JOIN " . DB_ROSCMS . ".roscms_accounts a ON r.user_id = a.id " . - "WHERE r.id = :id" - ); - - for($i = 0; $i < count($id_array); $i++) - { - $stmt->bindParam(":id", $id_array[$i]); - $stmt->execute() or die("Query failed #2"); + for($i = 0; $i < $reader->getTestIDCount(); $i++) + { + $stmt = $reader->getTestRunInfoStatement($i); + + if(is_string($stmt)) + die($stmt); + $row = $stmt->fetch(PDO::FETCH_ASSOC); echo '<th onmousedown="ResultHead_OnMouseDown(this)">'; @@ -164,13 +138,15 @@ echo '<tr class="even">'; printf('<td id="totals" onmouseover="Cell_OnMouseOver(this)" onmouseout="Cell_OnMouseOut(this)">%s</td>', $testman_langres["totals"]); - $stmt = $dbh->prepare("SELECT r.count, r.failures FROM " . DB_TESTMAN . ".winetest_runs r WHERE r.id = :id"); $prev_row = null; - for($i = 0; $i < count($id_array); $i++) - { - $stmt->bindParam(":id", $id_array[$i]); - $stmt->execute() or die("Query failed #3"); + for($i = 0; $i < $reader->getTestIDCount(); $i++) + { + $stmt = $reader->getTestRunInfoStatement($i); + + if(is_string($stmt)) + die($stmt); + $row = $stmt->fetch(PDO::FETCH_ASSOC); echo '<td onmouseover="Cell_OnMouseOver(this)" onmouseout="Cell_OnMouseOut(this)">'; @@ -188,32 +164,23 @@ // Get the test results for each column $result_stmt = array(); - for($i = 0; $i < count($id_array); $i++) - { - $result_stmt[$i] = $dbh->prepare( - "SELECT e.id, e.status, e.count, e.failures, e.skipped " . - "FROM " . DB_TESTMAN . ".winetest_suites s " . - "LEFT JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id AND e.test_id = :testid " . - "WHERE s.id IN (" . $suite_idlist . ")" . - "ORDER BY s.module, s.test" - ); - $result_stmt[$i]->bindParam(":testid", $id_array[$i]); - $result_stmt[$i]->execute() or die("Query failed #4 for statement $i"); - } - - // Get all test suites for which we have at least one result in our ID list - $stmt = $dbh->query( - "SELECT DISTINCT s.id, s.module, s.test " . - "FROM " . DB_TESTMAN . ".winetest_suites s " . - "JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id " . - "WHERE test_id IN (" . $_GET["ids"] . ") " . - "ORDER BY s.module ASC, s.test ASC" - ) or die("Query failed #5"); + for($i = 0; $i < $reader->getTestIDCount(); $i++) + { + $result_stmt[$i] = $reader->getListResultInfoStatement($i); + + if(is_string($result_stmt[$i])) + die($result_stmt[$i]); + } + + $suites_stmt = $reader->getListTestSuiteInfoStatement(); + + if(is_string($suites_stmt)) + die($suites_stmt); $oddeven = true; $unchanged = array(); - while($suites_row = $stmt->fetch(PDO::FETCH_ASSOC)) + while($suites_row = $suites_stmt->fetch(PDO::FETCH_ASSOC)) { printf('<tr id="suite_%s" class="%s">', $suites_row["id"], ($oddeven ? "odd" : "even")); printf('<td onmouseover="Cell_OnMouseOver(this)" onmouseout="Cell_OnMouseOut(this)">%s:%s</td>', $suites_row["module"], $suites_row["test"]); @@ -224,7 +191,7 @@ $temp_failedtests = -1; $temp_skippedtests = -1; - for($i = 0; $i < count($result_stmt); $i++) + for($i = 0; $i < $reader->getTestIDCount(); $i++) { $row = $result_stmt[$i]->fetch(PDO::FETCH_ASSOC);
Modified: branches/danny-web/www/www.reactos.org/testman/css/compare.css URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/css/compare.css [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/testman/css/compare.css [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -4,6 +4,10 @@ PURPOSE: Stylesheet for the Compare Page COPYRIGHT: Copyright 2008-2009 Colin Finck colin@reactos.org */ + +button { + font-weight: bold; +}
#legend { border: solid 1px black;
Modified: branches/danny-web/www/www.reactos.org/testman/detail.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/detail.php [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/testman/detail.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -36,7 +36,7 @@ <h2><?php echo $testman_langres["detail_title"]; ?></h2>
<?php - if(!isset($_GET["id"])) + if(!array_key_exists("id", $_GET)) die("Necessary information not specified"); // Establish a DB connection @@ -123,7 +123,7 @@ </tr> <tr class="even" onmouseover="Row_OnMouseOver(this)" onmouseout="Row_OnMouseOut(this)"> <td class="info"><?php echo $testman_langres["comment"]; ?>:</td> - <td><?php echo GetPlatformString($row["comment"]); ?></td> + <td><?php echo $row["comment"]; ?></td> </tr> </table>
Added: branches/danny-web/www/www.reactos.org/testman/export.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/export.php (added) +++ branches/danny-web/www/www.reactos.org/testman/export.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -1,0 +1,26 @@ +<?php +/* + PROJECT: ReactOS Web Test Manager + LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + PURPOSE: Exporting the results as a XML file + COPYRIGHT: Copyright 2009 Colin Finck <colin@reactos.org> +*/ + + require_once("utils.inc.php"); + + if(!array_key_exists("f", $_GET) || !array_key_exists("ids", $_GET)) + die("Necessary information not specified"); + + $reader = new WineTest_ResultReader(); + $result = $reader->setTestIDList($_GET["ids"]); + + // A string return value indicates an error. + if(is_string($result)) + die($result); + + switch($_GET["f"]) + { + case "csv": require_once("export_csv.inc.php"); break; + case "xml": require_once("export_xml.inc.php"); break; + } +?>
Propchange: branches/danny-web/www/www.reactos.org/testman/export.php ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/danny-web/www/www.reactos.org/testman/export_csv.inc.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/export_csv.inc.php (added) +++ branches/danny-web/www/www.reactos.org/testman/export_csv.inc.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -1,0 +1,74 @@ +<?php +/* + PROJECT: ReactOS Web Test Manager + LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + PURPOSE: Exporting the results as a CSV file + COPYRIGHT: Copyright 2009 Colin Finck <colin@reactos.org> +*/ + + header("Content-Type: text/csv"); + header("Content-Disposition: filename=Results.csv"); + + + // First row: Revisions + echo ";;"; + + for($i = 0; $i < $reader->getTestIDCount(); $i++) + { + $stmt = $reader->getTestRunInfoStatement($i); + + if(is_string($stmt)) + die($stmt); + + $row = $stmt->fetch(PDO::FETCH_ASSOC); + + // Add a blank cell and four times the revision (so that we can later add the headers) + echo $row["revision"] . ";" . $row["revision"] . ";" . $row["revision"] . ";" . $row["revision"] . ";;"; + } + + echo "\n"; + + + // Second row: Status, Total Tests, Failures, Skipped headers + echo ";;"; + + for($i = 0; $i < $reader->getTestIDCount(); $i++) + echo "Status;Total Tests;Failures;Skipped;;"; + + echo "\n"; + + + // Next rows: Module and Test on the left, results for each column + // Get the test results for each column + $result_stmt = array(); + + for($i = 0; $i < $reader->getTestIDCount(); $i++) + { + $result_stmt[$i] = $reader->getListResultInfoStatement($i); + + if(is_string($result_stmt[$i])) + die($result_stmt[$i]); + } + + $suites_stmt = $reader->getListTestSuiteInfoStatement(); + + if(is_string($suites_stmt)) + die($suites_stmt); + + while($suites_row = $suites_stmt->fetch(PDO::FETCH_ASSOC)) + { + echo $suites_row["module"] . ";" . $suites_row["test"] . ";"; + + for($i = 0; $i < $reader->getTestIDCount(); $i++) + { + $row = $result_stmt[$i]->fetch(PDO::FETCH_ASSOC); + + echo strtoupper($row["status"]) . ";"; + echo $row["count"] . ";"; + echo $row["failures"] . ";"; + echo $row["skipped"] . ";;"; + } + + echo "\n"; + } +?>
Propchange: branches/danny-web/www/www.reactos.org/testman/export_csv.inc.php ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/danny-web/www/www.reactos.org/testman/export_xml.inc.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/export_xml.inc.php (added) +++ branches/danny-web/www/www.reactos.org/testman/export_xml.inc.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -1,0 +1,49 @@ +<?php +/* + PROJECT: ReactOS Web Test Manager + LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + PURPOSE: Exporting the results as a XML file + COPYRIGHT: Copyright 2009 Colin Finck <colin@reactos.org> +*/ + + header("Content-Type: text/xml"); + header("Content-Disposition: filename=Results.xml"); + + echo '<?xml version="1.0" encoding="us-ascii" ?>'; + echo '<!DOCTYPE testinfo SYSTEM "http://' . $_SERVER["SERVER_NAME"] . dirname($_SERVER["SCRIPT_NAME"]) . '/res/testinfo.dtd">'; + echo '<testinfo>'; + + for($i = 0; $i < $reader->getTestIDCount(); $i++) + { + // Add an element for each revision + $stmt = $reader->getTestRunInfoStatement($i); + + if(is_string($stmt)) + die($stmt); + + $row = $stmt->fetch(PDO::FETCH_ASSOC); + echo '<revision id="' . $row["revision"] . '" timestamp="' . $row["timestamp"] . '" user="' . $row["name"] . '" platform="' . $row["platform"] . '">'; + + // Now get the all test results for this revision + $stmt = $reader->getSingleResultInfoStatement($i); + + if(is_string($stmt)) + die($stmt); + + while($row = $stmt->fetch(PDO::FETCH_ASSOC)) + { + echo '<test '; + echo 'id="' . $row["id"] . '" '; + echo 'module="' . $row["module"] . '" '; + echo 'test="' . $row["test"] . '" '; + echo 'status="' . $row["status"] . '" '; + echo 'count="' . $row["count"] . '" '; + echo 'failures="' . $row["failures"] . '" '; + echo 'skipped="' . $row["skipped"] . '" />'; + } + + echo '</revision>'; + } + + echo '</testinfo>'; +?>
Propchange: branches/danny-web/www/www.reactos.org/testman/export_xml.inc.php ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/danny-web/www/www.reactos.org/testman/lang/de.inc.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/lang/de.inc.php [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/testman/lang/de.inc.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -38,6 +38,7 @@ // Compare page "compare_title" => "Ergebnisse vergleichen", "showchanged" => "Nur geänderte Ergebnisse anzeigen", + "export_as" => "Exportieren als", "legend" => "Legende", "totaltests" => "Ausgeführte Tests",
Modified: branches/danny-web/www/www.reactos.org/testman/lang/en.inc.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/lang/en.inc.php [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/testman/lang/en.inc.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -38,6 +38,7 @@ // Compare page "compare_title" => "Comparing Results", "showchanged" => "Show only changed results", + "export_as" => "Export as", "legend" => "Legend", "totaltests" => "Total Tests",
Modified: branches/danny-web/www/www.reactos.org/testman/lang/pl.inc.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/lang/pl.inc.php [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/testman/lang/pl.inc.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -39,6 +39,7 @@ // Compare page "compare_title" => "Porównywanie wyników", "showchanged" => "Pokaż tylko zmienione wyniki", + "export_as" => "Eksportuj jako", "legend" => "Legenda", "totaltests" => "Wszystkie testy",
Propchange: branches/danny-web/www/www.reactos.org/testman/lib/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Sun Jun 21 02:21:24 2009 @@ -1,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+)
Propchange: branches/danny-web/www/www.reactos.org/testman/lib/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details.
Propchange: branches/danny-web/www/www.reactos.org/testman/lib/ ------------------------------------------------------------------------------ bugtraq:url = http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Added: branches/danny-web/www/www.reactos.org/testman/lib/WineTest_ResultReader.class.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/lib/WineTest_ResultReader.class.php (added) +++ branches/danny-web/www/www.reactos.org/testman/lib/WineTest_ResultReader.class.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -1,0 +1,217 @@ +<?php +/* + PROJECT: ReactOS Web Test Manager + LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + PURPOSE: Class for reading WineTest results + COPYRIGHT: Copyright 2009 Colin Finck <colin@reactos.org> +*/ + + require_once("config.inc.php"); + require_once("connect.db.php"); + + class WineTest_ResultReader + { + private $dbh; + private $suite_id_list; + private $test_id_array = array(); + private $test_id_list = null; + + /** + * Constructs a WineTest_ResultReader object and establishes the DB connection. + */ + public function __construct() + { + // Establish a DB connection + try + { + $this->dbh = new PDO("mysql:host=" . DB_HOST, DB_USER, DB_PASS); + } + catch(PDOException $e) + { + // Give no exact error message here, so no server internals are exposed + die("Could not establish the DB connection"); + } + } + + /** + * Validate and set the passed ID list and do some basic tasks. + * + * @param string $new_test_id_list + * A comma-separated list of Test IDs to compare. + * + * @return + * Boolean true on success, otherwise a string containing an error message. + */ + public function setTestIDList($new_test_id_list) + { + $new_test_id_array = explode(",", $new_test_id_list); + + // Verify that a suitable value was passed + if(!$new_test_id_array) + return "new_test_id_list cannot be converted into an array"; + + // Verify that the array only contains numeric values and store them as integers to prevent SQL injections + for($i = 0; $i < count($new_test_id_array); $i++) + { + if(!is_numeric($new_test_id_array[$i])) + return "new_test_id_list is not entirely numeric!"; + + $new_test_id_array[$i] = (int)$new_test_id_array[$i]; + } + + // Verify that the user did not select more results than he's allowed to + if(count($new_test_id_array) > MAX_COMPARE_RESULTS) + return "You may only select up to " . MAX_COMPARE_RESULTS . " results for comparison!"; + + // We're safe to use these IDs now. + $this->test_id_array = $new_test_id_array; + $this->test_id_list = $new_test_id_list; + + // Get all Suite IDs linked to our Test IDs + $stmt = $this->dbh->query( + "SELECT s.id " . + "FROM " . DB_TESTMAN . ".winetest_suites s " . + "JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id " . + "WHERE e.test_id IN (" . $this->test_id_list . ")" + ); + + if(!$stmt) + return __FILE__ . ":" . __LINE__ . ", " . __METHOD__ . " - Query failed"; + + $suite_id_array = $stmt->fetchAll(PDO::FETCH_COLUMN); + $this->suite_id_list = implode(",", $suite_id_array); + + return true; + } + + /** + * Retrieves the number of Test IDs of the stored $test_id_array. + * + * @return + * An int value containing the number of IDs. + */ + public function getTestIDCount() + { + return count($this->test_id_array); + } + + /** + * Retrieves a PDOStatement for getting general information about a Test Run. + * + * @param int $i + * The index of the Test ID to get the information from. + * + * @return + * On success, the method returns a PDOStatement, from which you can fetch the information. + * In case of failure, the method returns a string containing an error message. + */ + public function getTestRunInfoStatement($i) + { + if($i >= count($this->test_id_array)) + return "Index $i is out of range!"; + + $stmt = $this->dbh->query( + "SELECT UNIX_TIMESTAMP(r.timestamp) timestamp, a.name, r.revision, r.platform, r.count, r.failures " . + "FROM " . DB_TESTMAN . ".winetest_runs r " . + "JOIN " . DB_ROSCMS . ".roscms_accounts a ON r.user_id = a.id " . + "WHERE r.id = " . $this->test_id_array[$i] . " " . + "LIMIT 1" + ); + + if(!$stmt) + return __FILE__ . ":" . __LINE__ . ", " . __METHOD__ . " - Query failed for $i"; + + return $stmt; + } + + /** + * Retrieves a PDOStatement for getting test result information. + * Compared to getListResultInfoStatement, this method will only output full rows and the output will also contain information about the test suite. + * + * @param int $i + * The index of the Test ID to get the information from. + * + * @return + * On success, the method returns a PDOStatement, from which you can fetch the information. + * In case of failure, the method returns a string containing an error message. + */ + public function getSingleResultInfoStatement($i) + { + if($i >= count($this->test_id_array)) + return "Index $i is out of range!"; + + $stmt = $this->dbh->query( + "SELECT e.id, e.status, e.count, e.failures, e.skipped, s.module, s.test " . + "FROM " . DB_TESTMAN . ".winetest_results e " . + "JOIN " . DB_TESTMAN . ".winetest_suites s ON e.suite_id = s.id " . + "WHERE e.test_id = " . $this->test_id_array[$i] . " " . + "ORDER BY s.module, s.test" + ); + + if(!$stmt) + return __FILE__ . ":" . __LINE__ . ", " . __METHOD__ . " - Query failed for $i"; + + return $stmt; + } + + /** + * Retrieves a PDOStatement for getting information about the Test Suites used by at least one result in our ID list. + * + * @return + * On success, the method returns a PDOStatement, from which you can fetch the information. + * In case of failure, the method returns a string containing an error message. + */ + public function getListTestSuiteInfoStatement() + { + if(!$this->test_id_list) + return "test_id_list was not initialized, call setTestIDList first!"; + + // Get all test suites for which we have at least one result in our ID list + $stmt = $this->dbh->query( + "SELECT DISTINCT s.id, s.module, s.test " . + "FROM " . DB_TESTMAN . ".winetest_suites s " . + "JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id " . + "WHERE test_id IN (" . $this->test_id_list . ") " . + "ORDER BY s.module ASC, s.test ASC" + ); + + if(!$stmt) + return __FILE__ . ":" . __LINE__ . ", " . __METHOD__ . " - Query failed"; + + return $stmt; + } + + /** + * Retrieves a PDOStatement for getting test result information. + * Compared to getSingleResultInfoStatement, this method will output a row for each suite, for which we have at least one result in our ID list. + * + * @param int $i + * The index of the Test ID to get the information from. + * + * @return + * On success, the method returns a PDOStatement, from which you can fetch the information. + * In case of failure, the method returns a string containing an error message. + */ + public function getListResultInfoStatement($i) + { + if(!$this->suite_id_list) + return "suite_id_list was not initialized, call setTestIDList first!"; + + if($i >= count($this->test_id_array)) + return "Index $i is out of range!"; + + $stmt = $this->dbh->query( + "SELECT e.id, e.status, e.count, e.failures, e.skipped " . + "FROM " . DB_TESTMAN . ".winetest_suites s " . + "LEFT JOIN " . DB_TESTMAN . ".winetest_results e ON e.suite_id = s.id AND e.test_id = " . $this->test_id_array[$i] . " " . + "WHERE s.id IN (" . $this->suite_id_list . ")" . + "ORDER BY s.module, s.test" + ); + + if(!$stmt) + return __FILE__ . ":" . __LINE__ . ", " . __METHOD__ . " - Query failed for $i"; + + return $stmt; + } + } +?>
Propchange: branches/danny-web/www/www.reactos.org/testman/lib/WineTest_ResultReader.class.php ------------------------------------------------------------------------------ svn:eol-style = native
Propchange: branches/danny-web/www/www.reactos.org/testman/res/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Sun Jun 21 02:21:24 2009 @@ -1,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+)
Propchange: branches/danny-web/www/www.reactos.org/testman/res/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details.
Propchange: branches/danny-web/www/www.reactos.org/testman/res/ ------------------------------------------------------------------------------ bugtraq:url = http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Added: branches/danny-web/www/www.reactos.org/testman/res/testinfo.dtd URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/res/testinfo.dtd (added) +++ branches/danny-web/www/www.reactos.org/testman/res/testinfo.dtd [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -1,0 +1,44 @@ +<!-- + PROJECT: ReactOS Web Test Manager + LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + PURPOSE: DTD for the XML export data + COPYRIGHT: Copyright 2009 Colin Finck <colin@reactos.org> +--> + +<!--=============================== Entities ===============================--> + +<!ENTITY % TestID "CDATA"> + <!-- Test ID in the database --> + +<!ENTITY % Timestamp "CDATA"> + <!-- Unix timestamp --> + +<!ENTITY % ResultID "CDATA"> + <!-- Result ID in the database --> + +<!ENTITY % Number "CDATA"> + <!-- one or more digits --> + + +<!--=============================== Elements ===============================--> + +<!ELEMENT testinfo (revision*)> + +<!ELEMENT revision (test*)> +<!ATTLIST revision + id %TestID #REQUIRED + timestamp %Timestamp #REQUIRED + user CDATA #REQUIRED + platform CDATA #REQUIRED +> + +<!ELEMENT test EMPTY> +<!ATTLIST test + id %ResultID #REQUIRED + module CDATA #REQUIRED + test CDATA #REQUIRED + status CDATA #REQUIRED + count %Number #REQUIRED + failures %Number #REQUIRED + skipped %Number #REQUIRED +>
Propchange: branches/danny-web/www/www.reactos.org/testman/res/testinfo.dtd ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/danny-web/www/www.reactos.org/testman/utils.inc.php URL: http://svn.reactos.org/svn/reactos/branches/danny-web/www/www.reactos.org/te... ============================================================================== --- branches/danny-web/www/www.reactos.org/testman/utils.inc.php [iso-8859-1] (original) +++ branches/danny-web/www/www.reactos.org/testman/utils.inc.php [iso-8859-1] Sun Jun 21 02:21:24 2009 @@ -5,7 +5,13 @@ PURPOSE: Utility functions shared among several PHP files COPYRIGHT: Copyright 2008-2009 Colin Finck colin@reactos.org */ - + + // All classes are autoloaded through this magic function + function __autoload($class) + { + require_once("lib/$class.class.php"); + } + function GetPlatformString($platform) { // First get the main operating system