Difference between revisions of "SpecialSelenium.php"
m |
m |
||
Line 35: | Line 35: | ||
# 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 70: | Line 70: | ||
# No suite specified, render the main special page and form | # No suite specified, render the main special page and form | ||
else { | else { | ||
− | global $egSeleniumCategory, $egSeleniumPath, $egResultsUrlPath; | + | global $egSeleniumCategory, $egSeleniumSchdeule, $egSeleniumEnabled, $egSeleniumFailLog, |
+ | $egSeleniumPath, $egResultsUrlPath, $wgServer; | ||
$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) | ||
Line 84: | Line 83: | ||
while ($row = $dbr->fetchRow($res)) $suites[] = Title::newFromID($row[0])->getPrefixedText(); | while ($row = $dbr->fetchRow($res)) $suites[] = Title::newFromID($row[0])->getPrefixedText(); | ||
+ | # Render section for running tests manually with a select list of all the suites | ||
+ | $wgOut->addWikitext('=='.wfMsg('selenium-runmanual').'=='); | ||
+ | $html = "<fieldset><legend>".wfMsg('selenium-select')."</legend><ul>"; | ||
+ | foreach ($suites as $suite) { | ||
+ | $path = "$ide?test=".urlencode($title->getLocalURL("suite=$suite")); | ||
+ | $html .= "<li><a href=\"$path\">$suite</a></li>\n"; | ||
+ | } | ||
+ | $html .= "</ul></fieldset>"; | ||
+ | $wgOut->addHTML($html); | ||
+ | |||
+ | # Manage the automatic test run schedule | ||
+ | $wgOut->addWikitext('=='.wfMsg('selenium-manage').'=='); | ||
+ | $schedule = "<b>".array_pop($egSeleniumSchdeule)."</b>"; | ||
+ | if (count($egSeleniumSchdeule) > 0) $schedule = "<b>".join("</b>, <b>", $egSeleniumSchdeule)."</b> and $schedule"; | ||
+ | $wgOut->addHTML("<fieldset><legend>".wfMsg('selenium-schedule', $schedule)."</legend>"); | ||
$form = wfElement('form', array('action' => $title->getLocalURL('action=submit'), 'method' => 'post'), null); | $form = wfElement('form', array('action' => $title->getLocalURL('action=submit'), 'method' => 'post'), null); | ||
− | $ | + | foreach ($suites as $suite) { |
− | + | $path = "$ide?test=".urlencode($title->getLocalURL("suite=$suite")); | |
− | $form .= | + | $form .= wfCheckLabel($suite, "wfEnabledTests[]", $suite, $checked = false)."<br />\n"; |
− | + | } | |
− | + | $form .= wfElement('input', array('type' => 'submit', name => 'wpSave', value => 'Save'))."</form><br />"; | |
$wgOut->addHTML($form); | $wgOut->addHTML($form); | ||
+ | $wgOut->addWikitext(wfMsg('selenium-failinfo', $egSeleniumFailLog)); | ||
+ | $wgOut->addHTML("</fieldset>"); | ||
+ | |||
+ | # If suites have been enabled or disabled, update their categorisation | ||
+ | if ($wgRequest->getText('wpSave')) { | ||
− | + | # Construct the posted checkboxes as a bullet list | |
− | + | $newList = ''; | |
− | + | foreach ($egSeleniumEnabled as $suite) $newList .= "*[[$suite]]\n"; | |
− | + | ||
− | + | # Get the current state as an array from $egSeleniumEnabled article content | |
− | + | $cur = new Article(Title::newFromText($egSeleniumEnabled)); | |
− | + | preg_match_all("|\\*\\[\\[(.+?)\\]\\]|", $cur->getContent(), $matches, PREG_PATTERN_ORDER); | |
− | + | $cur = $matches[1]; | |
+ | |||
+ | # Find which tests have been added or removed | ||
+ | $add = array(); | ||
+ | $del = array(); | ||
+ | |||
+ | if (count($add) || count($del)) { | ||
+ | # create a string describing the added and removed members | ||
+ | # render the string in a msg in the form | ||
+ | # update the $egSeleniumEnabled article with the new list using msg as comment | ||
+ | } | ||
+ | } | ||
+ | |||
+ | # Section about creating new tests | ||
$wgOut->addWikitext('=='.wfMsg('selenium-create').'=='); | $wgOut->addWikitext('=='.wfMsg('selenium-create').'=='); | ||
+ | $wgOut->addWikitext(wfMsg('selenium-createinfo', "$wgServer$ide")); | ||
} | } | ||
} | } | ||
} | } |
Revision as of 12:23, 2 August 2008
<?php /**
* Selenium extension * Template:Php * 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, $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 { global $egSeleniumCategory, $egSeleniumSchdeule, $egSeleniumEnabled, $egSeleniumFailLog, $egSeleniumPath, $egResultsUrlPath, $wgServer; $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); $cl = $dbr->tableName('categorylinks'); $res = $dbr->select($cl, 'cl_from', "cl_to = '$egSeleniumCategory'", __METHOD__, array('ORDER BY' => 'cl_sortkey')); while ($row = $dbr->fetchRow($res)) $suites[] = Title::newFromID($row[0])->getPrefixedText();
# Render section for running tests manually with a select list of all the suites $wgOut->addWikitext('=='.wfMsg('selenium-runmanual').'==');
$html = "<fieldset><legend>".wfMsg('selenium-select')."</legend>
- ";
foreach ($suites as $suite) {
$path = "$ide?test=".urlencode($title->getLocalURL("suite=$suite"));
$html .= "
- <a href=\"$path\">$suite</a> \n";
}
$html .= "</fieldset>";
$wgOut->addHTML($html);
# Manage the automatic test run schedule
$wgOut->addWikitext('=='.wfMsg('selenium-manage').'==');
$schedule = "".array_pop($egSeleniumSchdeule)."";
if (count($egSeleniumSchdeule) > 0) $schedule = "".join(", ", $egSeleniumSchdeule)." and $schedule";
$wgOut->addHTML("<fieldset><legend>".wfMsg('selenium-schedule', $schedule)."</legend>");
$form = wfElement('form', array('action' => $title->getLocalURL('action=submit'), 'method' => 'post'), null);
foreach ($suites as $suite) {
$path = "$ide?test=".urlencode($title->getLocalURL("suite=$suite"));
$form .= wfCheckLabel($suite, "wfEnabledTests[]", $suite, $checked = false)."
\n";
}
$form .= wfElement('input', array('type' => 'submit', name => 'wpSave', value => 'Save'))."</form>
";
$wgOut->addHTML($form);
$wgOut->addWikitext(wfMsg('selenium-failinfo', $egSeleniumFailLog));
$wgOut->addHTML("</fieldset>");
# If suites have been enabled or disabled, update their categorisation if ($wgRequest->getText('wpSave')) {
# Construct the posted checkboxes as a bullet list $newList = ; foreach ($egSeleniumEnabled as $suite) $newList .= "*$suite\n";
# Get the current state as an array from $egSeleniumEnabled article content $cur = new Article(Title::newFromText($egSeleniumEnabled)); preg_match_all("|\\*\\[\\[(.+?)\\]\\]|", $cur->getContent(), $matches, PREG_PATTERN_ORDER); $cur = $matches[1];
# Find which tests have been added or removed $add = array(); $del = array();
if (count($add) || count($del)) { # create a string describing the added and removed members # render the string in a msg in the form # update the $egSeleniumEnabled article with the new list using msg as comment } }
# Section about creating new tests $wgOut->addWikitext('=='.wfMsg('selenium-create').'=='); $wgOut->addWikitext(wfMsg('selenium-createinfo', "$wgServer$ide"));
} } }