Difference between revisions of "Extension:Selenium.php"
(Output html formatting) |
(Adding make404 method) |
||
| Line 72: | Line 72: | ||
# Define a new class based on the SpecialPage class | # Define a new class based on the SpecialPage class | ||
class SpecialSelenium extends SpecialPage { | class SpecialSelenium extends SpecialPage { | ||
| − | + | ||
| + | /** | ||
| + | * Need a global for the location of Selenium | ||
| + | */ | ||
| + | |||
# Properties | # Properties | ||
var $suite = array( | var $suite = array( | ||
| Line 131: | Line 135: | ||
# $count equals 0 if articles contain no sections and corresponding tags | # $count equals 0 if articles contain no sections and corresponding tags | ||
if($count==0) { | if($count==0) { | ||
| − | + | $this -> build404(': suite name has no tests within it'); | |
} | } | ||
| Line 156: | Line 160: | ||
} else { | } else { | ||
| − | header('HTTP/1.0 404 Not Found'); | + | $this -> build404(': test name incorrectly specified'); |
| − | + | # header('HTTP/1.0 404 Not Found'); | |
| − | + | # $err = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head> | |
| − | + | # <body><h1>Not Found</h1><p>The requested URL was not found on this server.</p></body></html>'; | |
| + | # print $err; | ||
| + | |||
} | } | ||
| Line 182: | Line 188: | ||
$this->setHeaders(); | $this->setHeaders(); | ||
$title = Title::makeTitle(NS_SPECIAL,'Selenium'); | $title = Title::makeTitle(NS_SPECIAL,'Selenium'); | ||
| − | + | ||
| − | $wgOut->addWikiText(wfMsg('example-message','exampleParameter')); | + | $wgOut->addWikiText('This is a special page for [http://www.openqa.org/selenium-core Selenium-core] avaialble as part of the [http://www.organicdesign.co.nz/Extension:Selenium.php Selenium extension]'); |
| − | + | /** | |
| − | + | * $wgOut->addWikiText(wfMsg('','example-message','exampleParameter')); | |
| − | + | * $wgOut->addHTML( | |
| − | + | * wfElement('form',array('action' => $title->getLocalURL('action=submit'),'method' => 'post'),null) | |
| − | + | * . '<textarea name="target" cols=25 rows=10></textarea>' | |
| − | + | * . wfElement('input',array('type' => 'submit')) | |
| + | * . '</form>' | ||
| + | * ); | ||
| + | */ | ||
| + | |||
} | } | ||
} | } | ||
| + | # Generate 404 error | ||
| + | function build404($message) { | ||
| + | header('HTTP/1.0 404 Not Found'); | ||
| + | $err = "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"><html><head><title>404 Not Found</title></head> | ||
| + | <body><h1>Not Found$message</h1><p>The requested URL was not found on this server.</p></body></html>"; | ||
| + | print $err; | ||
| + | return; | ||
| + | } | ||
| + | |||
# Method to build a suite from an array of tests | # Method to build a suite from an array of tests | ||
function buildSuite($tests, $article) { | function buildSuite($tests, $article) { | ||
| Line 213: | Line 232: | ||
if ($wgLanguageCode == 'en') { | if ($wgLanguageCode == 'en') { | ||
$wgMessageCache->addMessages(array( | $wgMessageCache->addMessages(array( | ||
| − | 'selenium' => ' | + | 'selenium' => 'Selenium special page', # The friendly page title |
'exampleMessage' => "Example message: <tt>$1</tt>", | 'exampleMessage' => "Example message: <tt>$1</tt>", | ||
)); | )); | ||
Revision as of 04:05, 28 December 2007
<?php
/** * Extension:Selenium Template:Php
Category:Extensions in progress
* Category:SeleniumCategory:Extensions created with Template:SpecialPage * - Licenced under LGPL http://www.gnu.org/copyleft/lesser.html * - Author: http://www.organicdesign.co.nz/User:Sven */
if (!defined('MEDIAWIKI')) die('Not an entry point.');
define('SELENIUM_VERSION','0.6.0, 2007-12-03 (selenium-core version 0.8.3');
$egSeleniumTag = "selenium"; $wgExtensionFunctions[] = 'efSetupSelenium'; $wgExtensionFunctions[] = 'efSetupSpecialSelenium'; $wgHooks['LanguageGetMagic'][] = 'efSeleniumLanguageGetMagic';
$wgExtensionCredits['specialpage'][] = array( 'name' => 'Special:Selenium', 'author' => 'User:Sven', 'description' => 'Incorporating Selenium tests into the MediaWiki environment', 'url' => 'http://www.organicdesign.co.nz/Extension:Selenium.php', 'version' => SELENIUM_VERSION );
require_once "$IP/includes/SpecialPage.php";
class Selenium {
- Properties
- Constructor
function __construct() {
global $wgHooks,$wgParser,$egSeleniumTag;
- Add the tagHook
$wgParser->setHook($egSeleniumTag,array($this,'tagSelenium')); }
- Deploy tags to allow additional html table tags
function tagSelenium($text,$argv,&$parser) {
global $wgTitle;
/**
* Should be a preprocess using first stage of parser
* $text = $parser->preprocess($text,$wgTitle,$parser->mOptions);
*/
- Want the Selenium tag to strip out ... enclosing tags
$text = eregi_replace('.+);
- Constructor
function __construct() {
SpecialPage::SpecialPage(
'Selenium', # name as seen in links etc 'sysop', # user rights required true, # listed in special:specialpages false, # function called by execute() - defaults to wfSpecial{$name} false, # file included by execute() - defaults to Special{$name}.php, only used if no function false # includable );
}
/**
* -------------------- Create form for Special:Selenium --------------------
* Override SpecialPage::execute()
*/
function execute() {
global $wgOut;
global $wgParser;
- Process suite or test if ?suite=article_name in query string
if(array_key_exists('suite', $_REQUEST)) {
- Render only Selenium html
$wgOut->disable();
wfResetOutputBuffers();
- $param = $_REQUEST['suite'];
- Grab article $param and process contents
$suiteTitle = Title::newFromText($_REQUEST['suite']);
$article = new Article($suiteTitle);
$wikitext = $article->getContent();
- Expanding braces of any transcluded tests
$wikitext = $wgParser->preprocess($wikitext,$suiteTitle,new ParserOptions());
/**
* This match is greedy finding last complete match
* $count = preg_match_all('|^={2,}\s*(.+?)\s*={2,}.*<selenium>(.+?)</selenium>|ms',$wikitext,$matches);
*/
# Preparse encapsulations around Selenium tags e.g. <selenium>
$wikitext = preg_replace("|<selenium>|", "selenium", $wikitext);
# Regex finding sections followed by...</selenum> tags
$count = preg_match_all('|^={2,}\s*(.+?)\s*={2,}(.+?</selenium>)|ms',$wikitext,$matches);
# $count equals 0 if articles contain no sections and corresponding tags
if($count==0) {
$this -> build404(': suite name has no tests within it');
}
- Determine whether suite or test from ?suite=article_name&test=section_num in query string
if( array_key_exists('test', $_REQUEST)) {
$_REQUEST['test'] = preg_replace("/_/", " ", $_REQUEST['test']);
if(in_array($_REQUEST['test'], $matches[1])) {
$counter = 0;
foreach($matches[1] as $value) {
if($value == $_REQUEST['test']) { $matches[2][$counter] = preg_replace('|.+?<selenium>\n?(.+?)</selenium>|ms', "\\1", $matches[2][$counter]);
- Generating test html
print $matches[2][$counter];
break; #breaks out of foreach loop
} $counter++; } } else {
$this -> build404(': test name incorrectly specified');
- header('HTTP/1.0 404 Not Found');
- $err = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
404 Not Found #Not Found
The requested URL was not found on this server.
'; - print $err;
}
} else {
# Obtain suite section headers $suite_urls = array(); foreach($matches[1] as $value) { array_push($suite_urls, $value); }
print $this->buildSuite($suite_urls, $_REQUEST['suite']);
}
/**
* !-------- End of debugging ---------
*/
} else {
$this->setHeaders();
$title = Title::makeTitle(NS_SPECIAL,'Selenium');
$wgOut->addWikiText('This is a special page for Selenium-core avaialble as part of the Selenium extension');
/**
* $wgOut->addWikiText(wfMsg(,'example-message','exampleParameter'));
* $wgOut->addHTML(
* wfElement('form',array('action' => $title->getLocalURL('action=submit'),'method' => 'post'),null)
* . '<textarea name="target" cols=25 rows=10></textarea>'
* . wfElement('input',array('type' => 'submit'))
* . '</form>'
* );
*/
} }
- Generate 404 error
function build404($message) {
header('HTTP/1.0 404 Not Found');
$err = "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">404 Not Found
Not Found$message
The requested URL was not found on this server.
";
print $err;
return;
}
- Method to build a suite from an array of tests
function buildSuite($tests, $article) {
$html = $this->suite['header'];
$html .= "$article";
foreach ($tests as $element) {
$html .= "\n<a href=\"/wiki/index.php?title=Special:Selenium&suite=$article&test=$element\">$element</a>";
} $html .= $this->suite['footer']; return $html; }
}
- Called from $wgExtensionFunctions array when initialising extensions
function efSetupSpecialSelenium() {
global $wgLanguageCode,$wgMessageCache;
- Add the messages used by the specialpage
if ($wgLanguageCode == 'en') {
$wgMessageCache->addMessages(array(
'selenium' => 'Selenium special page', # The friendly page title 'exampleMessage' => "Example message: $1", ));
}
- Add the specialpage to the environment
SpecialPage::addPage(new SpecialSelenium());
}



