Difference between revisions of "SpecialSelenium.php"
m |
({{legacy}}) |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | <?php | + | {{legacy}} |
+ | <php><?php | ||
/** | /** | ||
* Selenium extension | * Selenium extension | ||
− | * | + | * |
* See http://www.mediawiki.org/Extension:Selenium for installation and usage details | * See http://www.mediawiki.org/Extension:Selenium for installation and usage details | ||
* See http://www.organicdesign.co.nz/Extension_talk:Selenium.php for development notes and disucssion | * See http://www.organicdesign.co.nz/Extension_talk:Selenium.php for development notes and disucssion | ||
Line 21: | Line 22: | ||
public function execute() { | public function execute() { | ||
− | global $wgOut, $wgParser, $wgRequest, $egResultsUrlPath; | + | global $wgOut, $wgParser, $wgRequest, $wgServer, |
+ | $egSeleniumCategory, $egSeleniumSchdeule, $egSeleniumLog, $egSeleniumPath, $egResultsUrlPath; | ||
# Process suite or test if ?suite=article_name in query string | # Process suite or test if ?suite=article_name in query string | ||
Line 27: | Line 29: | ||
# Get the content of the suite article and parse it | # Get the content of the suite article and parse it | ||
+ | # NOTE: parsing the content results in the head, body, thead, tbody etc being removed, | ||
+ | # but it seems that the TestRunner doesn't care and can work with the basic table structure | ||
$suiteTitle = Title::newFromText($suite); | $suiteTitle = Title::newFromText($suite); | ||
$suiteArticle = new Article($suiteTitle); | $suiteArticle = new Article($suiteTitle); | ||
Line 33: | Line 37: | ||
# Extract the tests from the expanded content and | # Extract the tests from the expanded content and | ||
$numTests = preg_match_all( | $numTests = preg_match_all( | ||
− | "|<div class=\"selenium\" id=\"(.+?)\">\\s*(.+?)\\s*</div><!-- selenium end -->|is", | + | "|<div class=\"selenium\" id=\"(.+?)\">\\s*(.+?)\\s*</div><!-- selenium-end -->|is", |
$text, | $text, | ||
$matches, | $matches, | ||
Line 43: | Line 47: | ||
# Re-organise the matched test content into a hash indexed by test name | # Re-organise the matched test content into a hash indexed by test name | ||
+ | $tests = array(); | ||
for ($i = 0; $i < $numTests; $i++) $tests[$matches[1][$i]] = $matches[2][$i]; | for ($i = 0; $i < $numTests; $i++) $tests[$matches[1][$i]] = $matches[2][$i]; | ||
Line 65: | Line 70: | ||
} | } | ||
− | # No suite | + | # No suite specified, render the main special page and form |
else { | else { | ||
− | |||
$this->setHeaders(); | $this->setHeaders(); | ||
$title = Title::makeTitle(NS_SPECIAL, 'Selenium'); | $title = Title::makeTitle(NS_SPECIAL, 'Selenium'); | ||
− | + | $ide = "$egSeleniumPath/core/TestRunner.html"; | |
− | |||
− | $ | ||
# Retrieve suites from Selenium category (only selenium tests should be in this cat) | # Retrieve suites from Selenium category (only selenium tests should be in this cat) | ||
$suites = array(); | $suites = array(); | ||
$dbr = &wfGetDB(DB_SLAVE); | $dbr = &wfGetDB(DB_SLAVE); | ||
+ | $cat = Title::makeTitle(NS_CATEGORY, $egSeleniumCategory)->getDBkey(); | ||
$cl = $dbr->tableName('categorylinks'); | $cl = $dbr->tableName('categorylinks'); | ||
− | $res = $dbr->select($cl, 'cl_from', "cl_to = '$ | + | $res = $dbr->select($cl, 'cl_from', "cl_to = '$cat'", __METHOD__, array('ORDER BY' => 'cl_sortkey')); |
while ($row = $dbr->fetchRow($res)) $suites[] = Title::newFromID($row[0])->getPrefixedText(); | while ($row = $dbr->fetchRow($res)) $suites[] = Title::newFromID($row[0])->getPrefixedText(); | ||
− | $ | + | # Split schedule into times and enabled suites |
− | $ | + | $schedule = array(); |
− | + | $enabled = array(); | |
− | + | foreach ($egSeleniumSchdeule as $k => $v) is_numeric($k) ? $schedule[] = $v : $enabled[$k] = $v; | |
− | + | $desc = "<b>".array_pop($schedule)."</b>"; | |
− | + | if (count($schedule) > 0) $desc = "<b>".join("</b>, <b>", $schedule)."</b> and $desc"; | |
− | |||
− | |||
− | |||
− | |||
− | $ | ||
− | if ($ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | # Render table of all available suites and their information | ||
+ | $thead = "{|class=\"selenium-special\" border\n"; | ||
+ | $thead .= "!Test suite!!".wfMsg('selenium-schedule', $desc); | ||
+ | $thead .= "!!".wfMsg('selenium-last')."!!".wfMsg('selenium-run')."!!\n"; | ||
+ | $tbody = ''; | ||
+ | foreach ($suites as $suite) { | ||
+ | $tbody .= "|-\n|valign=top|[[$suite]]\n|\n"; | ||
+ | if (array_key_exists($suite, $enabled)) { | ||
+ | foreach ($enabled[$suite] as $domain) $tbody .= "*$domain\n"; | ||
+ | } else $tbody .= "-\n"; | ||
+ | $tbody .= "|valign=top|last log item\n"; | ||
+ | $tbody .= "|valign=top|[$wgServer$ide?test=".urlencode($title->getLocalURL("suite=$suite")); | ||
+ | $tbody .= " ".wfMsg('selenium-run')."]\n"; | ||
+ | } | ||
+ | $wgOut->addWikitext("$thead$tbody|}\n".wfMsg('selenium-loginfo', $egSeleniumLog)); | ||
} | } | ||
} | } | ||
} | } | ||
+ | </php> |
Latest revision as of 14:20, 22 October 2014
<php><?php /**
* Selenium extension * * See http://www.mediawiki.org/Extension:Selenium for installation and usage details * See http://www.organicdesign.co.nz/Extension_talk:Selenium.php for development notes and disucssion * * @package MediaWiki * @subpackage Extensions * @author Marcus Davy User:Sven * @copyright © 2007 Marcus Davy * @licence GNU General Public Licence 2.0 or later */
if (!defined('MEDIAWIKI')) die();
class SpecialSelenium extends SpecialPage {
function __construct() { SpecialPage::SpecialPage('Selenium', , true, false, false, false); }
public function execute() { global $wgOut, $wgParser, $wgRequest, $wgServer, $egSeleniumCategory, $egSeleniumSchdeule, $egSeleniumLog, $egSeleniumPath, $egResultsUrlPath;
# Process suite or test if ?suite=article_name in query string if ($suite = $wgRequest->getText('suite')) {
# Get the content of the suite article and parse it # NOTE: parsing the content results in the head, body, thead, tbody etc being removed, # but it seems that the TestRunner doesn't care and can work with the basic table structure $suiteTitle = Title::newFromText($suite); $suiteArticle = new Article($suiteTitle); $text = $wgParser->parse($suiteArticle->getContent(), $suiteTitle, new ParserOptions(), true, true)->getText();
# Extract the tests from the expanded content and $numTests = preg_match_all(
"|
|is",
$text, $matches, PREG_PATTERN_ORDER );
# If any tests were extracted, build content and return it to the client if ($numTests > 0) {
# Re-organise the matched test content into a hash indexed by test name $tests = array(); for ($i = 0; $i < $numTests; $i++) $tests[$matches[1][$i]] = $matches[2][$i];
# If a test is specified, return it from the suite article content in raw HTML Selenium test format if ($test = $wgRequest->getText('test')) { if (array_key_exists($test, $tests)) print $tests[$test]; }
# Or if no test specified, return the whole suite in raw HTML Selenium test-suite format else { $html = "
$suite |
$test |
"; } } }
# No suite specified, render the main special page and form else { $this->setHeaders(); $title = Title::makeTitle(NS_SPECIAL, 'Selenium'); $ide = "$egSeleniumPath/core/TestRunner.html";
# Retrieve suites from Selenium category (only selenium tests should be in this cat) $suites = array(); $dbr = &wfGetDB(DB_SLAVE); $cat = Title::makeTitle(NS_CATEGORY, $egSeleniumCategory)->getDBkey(); $cl = $dbr->tableName('categorylinks'); $res = $dbr->select($cl, 'cl_from', "cl_to = '$cat'", __METHOD__, array('ORDER BY' => 'cl_sortkey')); while ($row = $dbr->fetchRow($res)) $suites[] = Title::newFromID($row[0])->getPrefixedText();
# Split schedule into times and enabled suites $schedule = array(); $enabled = array(); foreach ($egSeleniumSchdeule as $k => $v) is_numeric($k) ? $schedule[] = $v : $enabled[$k] = $v; $desc = "".array_pop($schedule).""; if (count($schedule) > 0) $desc = "".join(", ", $schedule)." and $desc";
# Render table of all available suites and their information $thead = "{|class=\"selenium-special\" border\n"; $thead .= "!Test suite!!".wfMsg('selenium-schedule', $desc); $thead .= "!!".wfMsg('selenium-last')."!!".wfMsg('selenium-run')."!!\n"; $tbody = ; foreach ($suites as $suite) { $tbody .= "|-\n|valign=top|$suite\n|\n"; if (array_key_exists($suite, $enabled)) { foreach ($enabled[$suite] as $domain) $tbody .= "*$domain\n"; } else $tbody .= "-\n"; $tbody .= "|valign=top|last log item\n"; $tbody .= "|valign=top|[$wgServer$ide?test=".urlencode($title->getLocalURL("suite=$suite")); $tbody .= " ".wfMsg('selenium-run')."]\n"; } $wgOut->addWikitext("$thead$tbody|}\n".wfMsg('selenium-loginfo', $egSeleniumLog)); } } } </php>