Difference between revisions of "Extension:Selenium.php"
(TODO) |
(Add class Selenium for tag hooks) |
||
Line 3: | Line 3: | ||
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html) | # - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html) | ||
# - Author: [http://www.organicdesign.co.nz/User:Sven User:Sven] | # - Author: [http://www.organicdesign.co.nz/User:Sven User:Sven] | ||
− | + | ||
+ | |||
if (!defined('MEDIAWIKI')) die('Not an entry point.'); | if (!defined('MEDIAWIKI')) die('Not an entry point.'); | ||
− | define('SELENIUM_VERSION','0.0. | + | define('SELENIUM_VERSION','0.0.1, 2007-12-03 (selenium-core version 0.8.3'); |
− | |||
− | |||
+ | $wgSeleniumMagic = "foo"; | ||
+ | $wgSeleniumTag = "selenium"; | ||
+ | $wgExtensionFunctions[] = 'wfSetupSelenium'; | ||
+ | $wgExtensionFunctions[] = 'wfSetupSpecialSelenium'; | ||
+ | $wgHooks['LanguageGetMagic'][] = 'wfSeleniumLanguageGetMagic'; | ||
+ | |||
$wgExtensionCredits['specialpage'][] = array( | $wgExtensionCredits['specialpage'][] = array( | ||
'name' => 'Special:Selenium', | 'name' => 'Special:Selenium', | ||
Line 17: | Line 22: | ||
'version' => SELENIUM_VERSION | 'version' => SELENIUM_VERSION | ||
); | ); | ||
+ | |||
+ | require_once "$IP/includes/SpecialPage.php"; | ||
+ | |||
+ | |||
+ | class Selenium { | ||
+ | |||
+ | # Properties | ||
+ | var $prop1 = 'default value'; | ||
+ | var $prop2 = 'default value'; | ||
+ | |||
+ | # Constructor | ||
+ | function Selenium() { | ||
+ | global $wgHooks,$wgParser,$wgSeleniumMagic,$wgSeleniumTag; | ||
+ | |||
+ | # Add the parser-function | ||
+ | $wgParser->setFunctionHook($wgSeleniumMagic,array($this,'magicFoo')); | ||
+ | |||
+ | # Add the tagHook | ||
+ | $wgParser->setHook($wgSeleniumTag,array($this,'tagSelenium')); | ||
+ | |||
+ | } | ||
+ | |||
+ | # Expand the foo-magic | ||
+ | function magicFoo(&$parser) { | ||
+ | |||
+ | # Populate $argv with both named and numeric parameters | ||
+ | $argv = array(); | ||
+ | foreach (func_get_args() as $arg) if (!is_object($arg)) { | ||
+ | if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $argv[] = $arg; | ||
+ | } | ||
+ | |||
+ | # Build text of expanded result | ||
+ | $args = ''; | ||
+ | foreach ($argv as $k => $v) $args .= "*'''$k:''' ''$v''\n"; | ||
+ | $text = "=== magicFoo(): ===\n$args"; | ||
+ | |||
+ | # Return result with available parser flags | ||
+ | return array( | ||
+ | $text, | ||
+ | 'found' => true, | ||
+ | 'nowiki' => false, | ||
+ | 'noparse' => false, | ||
+ | 'noargs' => false, | ||
+ | 'isHTML' => false | ||
+ | ); | ||
+ | |||
+ | } | ||
+ | |||
+ | # Convert the <selenium> tags to HTML | ||
+ | function tagSelenium($text,$argv,&$parser) { | ||
+ | $args = ''; | ||
+ | foreach ($argv as $k => $v) $args .= "<li><b>$k:</b> <i>$v</i></li>\n"; | ||
+ | return "<h3>tagSelenium():</h3>\n<ul>$args<li>Content:</b> $text</ul>\n"; | ||
+ | } | ||
− | + | # Needed in some versions to prevent Special:Version from breaking | |
+ | function __toString() { return 'Selenium'; } | ||
+ | } | ||
+ | |||
+ | # Called from $wgExtensionFunctions array when initialising extensions | ||
+ | function wfSetupSelenium() { | ||
+ | global $wgSelenium; | ||
+ | $wgSelenium = new Selenium(); | ||
+ | } | ||
+ | # Needed in MediaWiki >1.8.0 for magic word hooks to work properly | ||
+ | function wfSeleniumLanguageGetMagic(&$magicWords,$langCode = 0) { | ||
+ | global $wgSeleniumMagic; | ||
+ | $magicWords[$wgSeleniumMagic] = array(0,$wgSeleniumMagic); | ||
+ | return true; | ||
+ | } | ||
+ | |||
# 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 { | ||
Line 33: | Line 107: | ||
false # includable | false # includable | ||
); | ); | ||
− | } | + | } |
− | + | ||
+ | #logFile("/tmp/FOO","this is a test message..."); | ||
+ | |||
+ | # Logging to a file | ||
+ | function logFile($file, $msg) { | ||
+ | $fh = fopen($file,'w'); | ||
+ | # $ts = $GLOBALS['wgLang']->timeanddate(wfTimestampNow(),true); | ||
+ | $ts = `date`; | ||
+ | if(is_array($msg)) $msg = print_r($msg, true); | ||
+ | fwrite($fh, "\n$ts: $msg"); | ||
+ | } | ||
+ | |||
+ | # logFile("FOO", "FODDA"); | ||
+ | |||
# Override SpecialPage::execute() | # Override SpecialPage::execute() | ||
# - $param is from the URL, eg Special:Selenium/param | # - $param is from the URL, eg Special:Selenium/param | ||
Line 57: | Line 144: | ||
# 3) Create rendering on the fly of a test article to the suite html code | # 3) Create rendering on the fly of a test article to the suite html code | ||
# 4) Some sort of validation of article | # 4) Some sort of validation of article | ||
− | + | ||
# Called from $wgExtensionFunctions array when initialising extensions | # Called from $wgExtensionFunctions array when initialising extensions | ||
− | function | + | function wfSetupSpecialSelenium() { |
global $wgLanguageCode,$wgMessageCache; | global $wgLanguageCode,$wgMessageCache; | ||
Revision as of 02:59, 10 December 2007
<?php
- Extension:Selenium
Template:PhpCategory:Extensions created with Template:SpecialPage
- - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
- - Author: User:Sven
if (!defined('MEDIAWIKI')) die('Not an entry point.');
define('SELENIUM_VERSION','0.0.1, 2007-12-03 (selenium-core version 0.8.3');
$wgSeleniumMagic = "foo"; $wgSeleniumTag = "selenium"; $wgExtensionFunctions[] = 'wfSetupSelenium'; $wgExtensionFunctions[] = 'wfSetupSpecialSelenium'; $wgHooks['LanguageGetMagic'][] = 'wfSeleniumLanguageGetMagic';
$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 Selenium() { global $wgHooks,$wgParser,$wgSeleniumMagic,$wgSeleniumTag;
# Add the parser-function $wgParser->setFunctionHook($wgSeleniumMagic,array($this,'magicFoo'));
# Add the tagHook $wgParser->setHook($wgSeleniumTag,array($this,'tagSelenium'));
}
# Expand the foo-magic function magicFoo(&$parser) {
# Populate $argv with both named and numeric parameters $argv = array(); foreach (func_get_args() as $arg) if (!is_object($arg)) { if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $argv[] = $arg; }
# Build text of expanded result $args = ; foreach ($argv as $k => $v) $args .= "*$k: $v\n"; $text = "=== magicFoo(): ===\n$args";
# Return result with available parser flags return array( $text, 'found' => true, 'nowiki' => false, 'noparse' => false, 'noargs' => false, 'isHTML' => false );
}
# Convert the <selenium> tags to HTML function tagSelenium($text,$argv,&$parser) { $args = ;
foreach ($argv as $k => $v) $args .= "
\n"; return "
tagSelenium():
\n
- $args
- Content: $text
\n";
}
# Needed in some versions to prevent Special:Version from breaking function __toString() { return 'Selenium'; }
}
- Called from $wgExtensionFunctions array when initialising extensions
function wfSetupSelenium() { global $wgSelenium; $wgSelenium = new Selenium(); }
- Needed in MediaWiki >1.8.0 for magic word hooks to work properly
function wfSeleniumLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgSeleniumMagic; $magicWords[$wgSeleniumMagic] = array(0,$wgSeleniumMagic); return true; }
- Define a new class based on the SpecialPage class
class SpecialSelenium extends SpecialPage {
# Constructor function SpecialSelenium() { 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 ); }
- logFile("/tmp/FOO","this is a test message...");
- Logging to a file
function logFile($file, $msg) { $fh = fopen($file,'w');
- $ts = $GLOBALS['wgLang']->timeanddate(wfTimestampNow(),true);
$ts = `date`;
if(is_array($msg)) $msg = print_r($msg, true); fwrite($fh, "\n$ts: $msg"); }
- logFile("FOO", "FODDA");
# Override SpecialPage::execute() # - $param is from the URL, eg Special:Selenium/param function execute($param) { global $wgOut; $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>' ); }
}
- ---------------------- TODO ------------------- #
- 1) Deploy tags to allow additional html table tags
- 2) Create form for Special:Selenium
- 3) Create rendering on the fly of a test article to the suite html code
- 4) Some sort of validation of article
- Called from $wgExtensionFunctions array when initialising extensions
function wfSetupSpecialSelenium() { 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()); } ?>