Difference between revisions of "Extension:Selenium.php"
(Dump suite html, start stripping leading content) |
(formatting, # comments stuff up emacs, C style work ok) |
||
| Line 15: | Line 15: | ||
$wgExtensionCredits['specialpage'][] = array( | $wgExtensionCredits['specialpage'][] = array( | ||
| − | + | 'name' => 'Special:Selenium', | |
| − | + | 'author' => '[http://www.organicdesign.co.nz/User:Sven User:Sven]', | |
| − | + | 'description' => 'Incorporating Selenium tests into the MediaWiki environment', | |
| − | + | 'url' => 'http://www.mediawiki.org/wiki/Extension:Selenium', | |
| − | + | 'version' => SELENIUM_VERSION | |
| − | ); | + | ); |
require_once "$IP/includes/SpecialPage.php"; | require_once "$IP/includes/SpecialPage.php"; | ||
| Line 27: | Line 27: | ||
# Properties | # Properties | ||
| − | + | var $prop1 = 'default value'; | |
| − | + | var $prop2 = 'default value'; | |
# Constructor | # Constructor | ||
| − | + | function __construct() { | |
| − | + | global $wgHooks,$wgParser,$egSeleniumTag; | |
# Add the tagHook | # Add the tagHook | ||
| − | + | $wgParser->setHook($egSeleniumTag,array($this,'tagSelenium')); | |
| − | + | } | |
| − | |||
# Deploy tags to allow additional html table tags | # 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 and <html>...</html> enclosing tags | # Want the selenium tag to strip out and <html>...</html> enclosing tags | ||
| − | + | $text = eregi_replace('<html>.+<table', '<table', $text); | |
| − | + | $text = eregi_replace('</table>.+', '</table>', $text); | |
| − | + | ||
| − | + | return($text); | |
| − | + | } | |
| − | + | ||
| − | |||
# Needed in some versions to prevent Special:Version from breaking | # Needed in some versions to prevent Special:Version from breaking | ||
| − | + | function __toString() { return 'Selenium'; } | |
} | } | ||
# Called from $wgExtensionFunctions array when initialising extensions | # Called from $wgExtensionFunctions array when initialising extensions | ||
function efSetupSelenium() { | function efSetupSelenium() { | ||
| − | + | global $egSelenium; | |
| − | + | $egSelenium = new Selenium(); | |
} | } | ||
# Needed in MediaWiki >1.8.0 for magic word hooks to work properly | # Needed in MediaWiki >1.8.0 for magic word hooks to work properly | ||
function efSeleniumLanguageGetMagic(&$magicWords,$langCode = 0) { | function efSeleniumLanguageGetMagic(&$magicWords,$langCode = 0) { | ||
| − | + | global $egSeleniumMagic; | |
| − | + | $magicWords[$egSeleniumMagic] = array(0,$egSeleniumMagic); | |
| − | + | return true; | |
} | } | ||
| Line 78: | Line 75: | ||
# Properties | # Properties | ||
| − | var $suiteTitle = 'Selenium suite'; | + | var $suiteTitle = 'Selenium suite'; |
var $testName = 'Selenium test'; | var $testName = 'Selenium test'; | ||
var $htmlSnippet = array( | var $htmlSnippet = array( | ||
| Line 85: | Line 82: | ||
'Footer' => '</tbody></table></body></html>', | 'Footer' => '</tbody></table></body></html>', | ||
); | ); | ||
| − | + | ||
# Constructor | # 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() $param is from the URL, eg Special:Selenium/param | |
| − | + | */ | |
| − | + | function execute($param) { | |
| − | + | global $wgOut; | |
| − | + | global $wgParser; | |
| − | + | ||
| + | if($param) { | ||
# Note: Need to bypass $wgOut and render only Selenium html here | # Note: Need to bypass $wgOut and render only Selenium html here | ||
| − | + | ||
# Grab article $param and process contents | # Grab article $param and process contents | ||
| − | + | $paramTitle = Title::newFromText($param); | |
| − | + | $article = new Article($paramTitle); | |
| − | + | $wikitext = $article->getContent(); | |
| + | |||
| + | # Tranclusion expanding braces | ||
| + | $wikitext = $wgParser->preprocess($wikitext,$paramTitle,new ParserOptions()); | ||
| + | |||
| + | /** | ||
| + | * -------- Debugging the execute function -------- | ||
| + | * 1) Process $wikitext into sections | ||
| + | */ | ||
| + | |||
| + | $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) { | |
| − | + | print "There were no matches"; | |
| − | + | } | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
# Need to process query string if section (key) is present | # Need to process query string if section (key) is present | ||
| − | + | if( array_key_exists('section', $_REQUEST)) { | |
| − | + | print "Process test: $_REQUEST[section] <br />"; | |
| − | + | print $matches[2][1]; | |
| − | + | $matches[2][1] = preg_replace('|.+?<selenium>(.+?)</selenium>|ms', "\\1", $matches[2][1]); | |
| − | + | print $matches[2][1]; | |
# Process test | # Process test | ||
| − | + | } else { | |
# Process suite | # Process suite | ||
# foreach ($matches[2] as $value) { | # foreach ($matches[2] as $value) { | ||
# print "$value<br />"; | # print "$value<br />"; | ||
# Search and replace the leading text for each test | # Search and replace the leading text for each test | ||
| − | # } | + | # } |
| − | + | $file = "/tmp/Suite.html"; | |
| − | + | $fh = fopen($file,'w'); | |
| − | + | fwrite($fh, $this->buildSuite(array('foo', 'fodda'), $param)); | |
| − | + | #$this->buildSuite(array('foo', 'fodda'), $param); | |
| − | + | } | |
| − | + | ||
| − | + | /** | |
| − | + | * foreach($_SERVER as $key=>$value){ | |
| − | + | * print "\$_SERVER: $key:$value<br />"; | |
| − | + | * } | |
| − | + | */ | |
| − | + | ||
| − | + | /** | |
| − | + | * !-------- End of debugging --------- | |
| − | + | */ | |
| − | + | ||
| − | + | } else { | |
| − | + | ||
| − | + | $this->setHeaders(); | |
| − | + | $title = Title::makeTitle(NS_SPECIAL,'Selenium'); | |
| − | + | ||
| − | + | $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>' | |
| − | + | ); | |
| − | + | } | |
} | } | ||
| − | + | ||
| − | + | function buildSuite($tests, $param) { | |
# return "SUCCESSFULLY ACCESSED!"; | # return "SUCCESSFULLY ACCESSED!"; | ||
| − | + | $html = $this->htmlSnippet['suiteHeader']; | |
| − | + | $html .= "<tr><td><b>$param</b></td></tr>"; | |
| − | + | foreach ($tests as $element) { | |
| − | + | $html .= "<tr><td><a href=\"/wiki/special:Selenium/$param?section=$element\">$element</a></td></tr>"; | |
| − | + | } | |
| − | + | $html .= $this->htmlSnippet['Footer']; | |
| − | + | return $html; | |
| − | + | } | |
| − | |||
} | } | ||
| − | |||
| − | |||
| − | |||
| − | |||
# Called from $wgExtensionFunctions array when initialising extensions | # Called from $wgExtensionFunctions array when initialising extensions | ||
function efSetupSpecialSelenium() { | function efSetupSpecialSelenium() { | ||
global $wgLanguageCode,$wgMessageCache; | global $wgLanguageCode,$wgMessageCache; | ||
| − | + | ||
# Add the messages used by the specialpage | # Add the messages used by the specialpage | ||
if ($wgLanguageCode == 'en') { | if ($wgLanguageCode == 'en') { | ||
| Line 199: | Line 195: | ||
)); | )); | ||
} | } | ||
| − | + | ||
# Add the specialpage to the environment | # Add the specialpage to the environment | ||
SpecialPage::addPage(new SpecialSelenium()); | SpecialPage::addPage(new SpecialSelenium()); | ||
} | } | ||
Revision as of 00:55, 24 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.1.1, 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.mediawiki.org/wiki/Extension:Selenium', 'version' => SELENIUM_VERSION );
require_once "$IP/includes/SpecialPage.php";
class Selenium {
- Properties
var $prop1 = 'default value'; var $prop2 = 'default value';
- 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 and ... 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() $param is from the URL, eg Special:Selenium/param
*/
function execute($param) {
global $wgOut;
global $wgParser;
if($param) {
- Note: Need to bypass $wgOut and render only Selenium html here
- Grab article $param and process contents
$paramTitle = Title::newFromText($param);
$article = new Article($paramTitle);
$wikitext = $article->getContent();
- Tranclusion expanding braces
$wikitext = $wgParser->preprocess($wikitext,$paramTitle,new ParserOptions());
/**
* -------- Debugging the execute function --------
* 1) Process $wikitext into sections
*/
$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) {
print "There were no matches";
}
- Need to process query string if section (key) is present
if( array_key_exists('section', $_REQUEST)) {
print "Process test: $_REQUEST[section]
";
print $matches[2][1];
$matches[2][1] = preg_replace('|.+?<selenium>(.+?)</selenium>|ms', "\\1", $matches[2][1]);
print $matches[2][1];
- Process test
} else {
- Process suite
- foreach ($matches[2] as $value) {
- print "$value
"; - Search and replace the leading text for each test
# } $file = "/tmp/Suite.html"; $fh = fopen($file,'w'); fwrite($fh, $this->buildSuite(array('foo', 'fodda'), $param)); #$this->buildSuite(array('foo', 'fodda'), $param);
}
/**
* foreach($_SERVER as $key=>$value){
* print "\$_SERVER: $key:$value
";
* }
*/
/**
* !-------- End of debugging ---------
*/
} else {
$this->setHeaders();
$title = Title::makeTitle(NS_SPECIAL,'Selenium');
$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>' );
}
}
function buildSuite($tests, $param) {
- return "SUCCESSFULLY ACCESSED!";
$html = $this->htmlSnippet['suiteHeader'];
$html .= "$param";
foreach ($tests as $element) {
$html .= "<a href=\"/wiki/special:Selenium/$param?section=$element\">$element</a>";
} $html .= $this->htmlSnippet['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' => 'Example Specialpage', # The friendly page title 'exampleMessage' => "Example message: $1", ));
}
- Add the specialpage to the environment
SpecialPage::addPage(new SpecialSelenium());
}



