|
|
(90 intermediate revisions by 3 users not shown) |
Line 1: |
Line 1: |
− | <?php
| + | {{legacy}} |
− | # Extension:Selenium {{php}}{{Category:Extensions}}
| + | This extensions is composed of the following scripts: |
− | # {{Category:Selenium}}{{Category:Extensions created with Template:SpecialPage}}
| + | *[[Selenium.php]] |
− | # - Licenced under LGPL http://www.gnu.org/copyleft/lesser.html
| + | *[[Selenium.class.php]] |
− | # - Author: http://www.organicdesign.co.nz/User:Sven
| + | *[[SpecialSelenium.php]] |
| + | *[[postResults.php]] |
| | | |
− | if (!defined('MEDIAWIKI')) die('Not an entry point.');
| + | == Notes == |
− | | + | * The [[mw:Extension:Selenium|extension documentation]] is hosted on http://mediawiki.org. |
− | define('SELENIUM_VERSION','0.1.1, 2007-12-03 (selenium-core version 0.8.3');
| + | * [[Example Selenium test suite]] |
− | | + | [[Category:Legacy Extensions]] |
− | $wgSeleniumTag = "selenium";
| |
− | $wgExtensionFunctions[] = 'wfSetupSelenium';
| |
− | $wgExtensionFunctions[] = 'wfSetupSpecialSelenium';
| |
− | $wgHooks['LanguageGetMagic'][] = 'wfSeleniumLanguageGetMagic';
| |
− | | |
− | $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";
| |
− | | |
− | class Selenium {
| |
− |
| |
− | # Properties
| |
− | var $prop1 = 'default value';
| |
− | var $prop2 = 'default value';
| |
− |
| |
− | # Constructor
| |
− | function Selenium() {
| |
− | global $wgHooks,$wgParser,$wgSeleniumTag;
| |
− | | |
− | # Add the tagHook
| |
− | $wgParser->setHook($wgSeleniumTag,array($this,'tagSelenium'));
| |
− |
| |
− | }
| |
− | | |
− | # 1) ------------ Deploy tags to allow additional html table tags ------------- #
| |
− | # Convert the <selenium> tags to HTML
| |
− | function tagSelenium($text,$argv,&$parser) {
| |
− | | |
− | # 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);
| |
− | | |
− | # Need to convert {{{VARIABLES}}} with parser; [[MWManual:Tag_extensions#Extensions_and_Templates]]
| |
− | #$parser->replaceVariables($wikitext,$args,true);
| |
− | | |
− | # Bypass the 2nd stage of the wiki parser returning htmlspecialchars($text)
| |
− | # $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";
| |
− | | |
− | return($text);
| |
− | }
| |
− |
| |
− | # 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 {
| |
− |
| |
− | # Properties
| |
− | var $suiteTitle = 'Selenium suite';
| |
− | var $testName = 'Selenium test';
| |
− | var $htmlSnippet = array(
| |
− | 'suiteHeader' => '<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>$suiteTitle</title></head><body>',
| |
− | 'testHeader' => '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>$testName</title></head><body>',
| |
− | 'Footer' => '</body></html>',
| |
− | );
| |
− | | |
− | # 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
| |
− | );
| |
− | }
| |
− | | |
− | # 2) -------------------- 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) {
| |
− | # A) 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();
| |
− | | |
− | preg_match_all('/^=+\\s*(.+?)\\s*=+([^=]+)/m',$wikitext,$m1);
| |
− | | |
− | # ---------------- DEBUG --------------- #
| |
− | $fh = fopen("/tmp/MWdump",'w');
| |
− | $ts = `date`;
| |
− | while (count($m1[1])) {
| |
− | $section = array_shift($m1[1]);
| |
− | fwrite($fh, "\n$ts$section");
| |
− | }
| |
− | # ---------------- DEBUG --------------- #
| |
− |
| |
− | # Process array of matched sections
| |
− | # while (count($m1[1])) {
| |
− | # $section = array_shift($m1[1]);
| |
− | # print("<!--- SECTION: $section -->-");
| |
− | # }
| |
− | | |
− | # print ($wikitext);
| |
− | | |
− | # Tranclusion expanding braces
| |
− | $wikitext = $wgParser->preprocess($wikitext,$paramTitle,new ParserOptions());
| |
− | # print ($wikitext);
| |
− | } else {
| |
− | # B) Render Special:Selenium form
| |
− | $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>'
| |
− | );
| |
− | }
| |
− | }
| |
− | # 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: <tt>$1</tt>",
| |
− | ));
| |
− | }
| |
− |
| |
− | # Add the specialpage to the environment
| |
− | SpecialPage::addPage(new SpecialSelenium());
| |
− | }
| |
− | ?>
| |