blob: 83d4d6373bbab052f18d57b68062f1d8573d0c24 [file] [log] [blame]
/*
* Format for Selenium Remote Control Python client.
*/
var subScriptLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader);
subScriptLoader.loadSubScript('chrome://selenium-ide/content/formats/remoteControl.js', this);
this.name = "chrome://selenium-ide/content/formats/python-rc";
function testMethodName(testName) {
return "test_" + underscore(testName);
}
notOperator = function() {
return "not ";
};
string = function(value) {
value = value.replace(/\\/g, '\\\\');
value = value.replace(/\"/g, '\\"');
value = value.replace(/\r/g, '\\r');
value = value.replace(/\n/g, '\\n');
var unicode = false;
for (var i = 0; i < value.length; i++) {
if (value.charCodeAt(i) >= 128) {
unicode = true;
}
}
return (unicode ? 'u' : '') + '"' + value + '"';
};
function assertTrue(expression) {
return "self.failUnless(" + expression.toString() + ")";
}
function assertFalse(expression) {
return "self.failIf(" + expression.toString() + ")";
}
function verify(statement) {
return "try: " + statement + "\n" +
"except AssertionError, e: self.verificationErrors.append(str(e))";
}
function verifyTrue(expression) {
return verify(assertTrue(expression));
}
function verifyFalse(expression) {
return verify(assertFalse(expression));
}
function joinExpression(expression) {
return "','.join(" + expression.toString() + ")";
}
function assignToVariable(type, variable, expression) {
return variable + " = " + expression.toString();
}
function waitFor(expression) {
return "for i in range(60):\n" +
indents(1) + "try:\n" +
indents(2) + "if " + expression.toString() + ": break\n" +
indents(1) + "except: pass\n" +
indents(1) + 'time.sleep(1)\n' +
'else: self.fail("time out")';
}
function assertOrVerifyFailure(line, isAssert) {
return "try: " + line + "\n" +
"except: pass\n" +
'else: self.fail("expected failure")';
}
Equals.prototype.toString = function() {
return this.e1.toString() + " == " + this.e2.toString();
};
Equals.prototype.assert = function() {
return "self.assertEqual(" + this.e1.toString() + ", " + this.e2.toString() + ")";
};
Equals.prototype.verify = function() {
return verify(this.assert());
};
NotEquals.prototype.toString = function() {
return this.e1.toString() + " != " + this.e2.toString();
};
NotEquals.prototype.assert = function() {
return "self.assertNotEqual(" + this.e1.toString() + ", " + this.e2.toString() + ")";
};
NotEquals.prototype.verify = function() {
return verify(this.assert());
};
RegexpMatch.prototype.toString = function() {
var str = this.pattern;
if (str.match(/\"/) || str.match(/\n/)) {
str = str.replace(/\\/g, "\\\\");
str = str.replace(/\"/g, '\\"');
str = str.replace(/\n/g, '\\n');
return '"' + str + '"';
} else {
str = 'r"' + str + '"';
}
return "re.search(" + str + ", " + this.expression + ")";
};
function pause(milliseconds) {
return "time.sleep(" + (parseInt(milliseconds, 10) / 1000) + ")";
}
function echo(message) {
return "print(" + xlateArgument(message) + ")";
}
function statement(expression) {
return expression.toString();
}
function array(value) {
var str = '[';
for (var i = 0; i < value.length; i++) {
str += string(value[i]);
if (i < value.length - 1) str += ", ";
}
str += ']';
return str;
}
function nonBreakingSpace() {
return "u\"\\u00a0\"";
}
CallSelenium.prototype.toString = function() {
var result = '';
if (this.negative) {
result += 'not ';
}
if (options.receiver) {
result += options.receiver + '.';
}
result += underscore(this.message);
result += '(';
for (var i = 0; i < this.args.length; i++) {
result += this.args[i];
if (i < this.args.length - 1) {
result += ', ';
}
}
result += ')';
return result;
};
function formatComment(comment) {
return comment.comment.replace(/.+/mg, function(str) {
return "# " + str;
});
}
function defaultExtension() {
return this.options.defaultExtension;
}
this.options = {
receiver: "sel",
rcHost: "localhost",
rcPort: "4444",
environment: "*chrome",
header:
'from selenium import selenium\n' +
'import unittest, time, re\n' +
'\n' +
'class ${className}(unittest.TestCase):\n' +
' def setUp(self):\n' +
' self.verificationErrors = []\n' +
' self.selenium = selenium("${rcHost}", ${rcPort}, "${environment}", "${baseURL}")\n' +
' self.selenium.start()\n' +
' \n' +
' def ${methodName}(self):\n' +
' ${receiver} = self.selenium\n',
footer:
' \n' +
' def tearDown(self):\n' +
' self.selenium.stop()\n' +
' self.assertEqual([], self.verificationErrors)\n' +
'\n' +
'if __name__ == "__main__":\n' +
' unittest.main()\n',
indent: '4',
initialIndents: '2',
defaultExtension: "py"
};
this.configForm =
'<description>Variable for Selenium instance</description>' +
'<textbox id="options_receiver" />' +
'<description>Selenium RC host</description>' +
'<textbox id="options_rcHost" />' +
'<description>Selenium RC port</description>' +
'<textbox id="options_rcPort" />' +
'<description>Environment</description>' +
'<textbox id="options_environment" />' +
'<description>Header</description>' +
'<textbox id="options_header" multiline="true" flex="1" rows="4"/>' +
'<description>Footer</description>' +
'<textbox id="options_footer" multiline="true" flex="1" rows="4"/>' +
'<description>Indent</description>' +
'<menulist id="options_indent"><menupopup>' +
'<menuitem label="Tab" value="tab"/>' +
'<menuitem label="1 space" value="1"/>' +
'<menuitem label="2 spaces" value="2"/>' +
'<menuitem label="3 spaces" value="3"/>' +
'<menuitem label="4 spaces" value="4"/>' +
'<menuitem label="5 spaces" value="5"/>' +
'<menuitem label="6 spaces" value="6"/>' +
'<menuitem label="7 spaces" value="7"/>' +
'<menuitem label="8 spaces" value="8"/>' +
'</menupopup></menulist>';