diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/pagemod-test-helpers.js | 56 | ||||
-rw-r--r-- | tests/test-color.js | 31 | ||||
-rw-r--r-- | tests/test-match-pattern.js | 11 | ||||
-rw-r--r-- | tests/test-pageMod.js | 141 | ||||
-rw-r--r-- | tests/test-util.js | 214 | ||||
-rw-r--r-- | tests/test-xmlrpc.js | 32 |
6 files changed, 485 insertions, 0 deletions
diff --git a/tests/pagemod-test-helpers.js b/tests/pagemod-test-helpers.js new file mode 100644 index 0000000..8621421 --- /dev/null +++ b/tests/pagemod-test-helpers.js @@ -0,0 +1,56 @@ +"use strict"; + +const {Cc,Ci} = require("chrome"); + +/** + * A helper function that creates a PageMod, then opens the specified URL + * and checks the effect of the page mod on 'onload' event via testCallback. + */ +exports.testPageMod = function testPageMod(test, testURL, pageModOptions, + testCallback, timeout) { + var xulApp = require("xul-app"); + if (!xulApp.versionInRange(xulApp.platformVersion, "1.9.3a3", "*") && + !xulApp.versionInRange(xulApp.platformVersion, "1.9.2.7", "1.9.2.*")) { + test.pass("Note: not testing PageMod, as it doesn't work on this platform version"); + return null; + } + + var wm = Cc['@mozilla.org/appshell/window-mediator;1'] + .getService(Ci.nsIWindowMediator); + var browserWindow = wm.getMostRecentWindow("navigator:browser"); + if (!browserWindow) { + test.pass("page-mod tests: could not find the browser window, so " + + "will not run. Use -a firefox to run the pagemod tests.") + return null; + } + + if (timeout !== undefined) { + test.waitUntilDone(timeout); + } + else { + test.waitUntilDone(); + } + + let loader = test.makeSandboxedLoader(); + let pageMod = loader.require("page-mod"); + + var pageMods = [new pageMod.PageMod(opts) for each(opts in pageModOptions)]; + + var tabBrowser = browserWindow.gBrowser; + var newTab = tabBrowser.addTab(testURL); + tabBrowser.selectedTab = newTab; + var b = tabBrowser.getBrowserForTab(newTab); + + function onPageLoad() { + b.removeEventListener("load", onPageLoad, true); + testCallback(b.contentWindow.wrappedJSObject, function done() { + pageMods.forEach(function(mod) mod.destroy()); + // XXX leaks reported if we don't close the tab? + tabBrowser.removeTab(newTab); + test.done(); + }); + } + b.addEventListener("load", onPageLoad, true); + + return pageMods; +} diff --git a/tests/test-color.js b/tests/test-color.js new file mode 100644 index 0000000..eefb97d --- /dev/null +++ b/tests/test-color.js @@ -0,0 +1,31 @@ +/*global exports: false, require: false */ +// TODO: add some failing tests as well +"use strict"; +//var util = require("color"); + +// testing Color object +var ensureColorNew = function (test) { + var col = new util.Color(255, 255, 166); + test.assertEqual(col.toString(), "#ffffa6", + "creation of new RGB Color object"); +}; + +var ensureColorUpdate = function (test) { + var col = new util.Color(255, 255, 166); + col.update(255, 224, 176); + test.assertEqual(col.toString(), "#ffe0b0", + "updating Color object"); +}; + +var ensureColorHSL = function (test) { + var col = new util.Color(255, 224, 176); + test.assertEqual(col.hsl().toSource(), + "[0.10126582278481013, 1, 0.8450980392156863]", + "converting to HSL model"); +}; + +var ensureColorLight = function (test) { + var col = new util.Color(255, 224, 176); + test.assertEqual(col.lightColor().toString(), "#e8dcc9", + "getting a light color"); +}; diff --git a/tests/test-match-pattern.js b/tests/test-match-pattern.js new file mode 100644 index 0000000..9e3d2bd --- /dev/null +++ b/tests/test-match-pattern.js @@ -0,0 +1,11 @@ +var { MatchPattern } = require("match-pattern"); + +exports.ensureMatchPattern = function (test) { + var pattern = new MatchPattern("https://bugzilla.redhat.com/attachment.cgi"); + console.log("pattern = " + pattern); + test.assert(pattern. + test("https://bugzilla.redhat.com/attachment.cgi"), "testing match pattern"); + test.assert(!pattern. + test("https://bugzilla.redhat.com/attachment.cgi?bugid=676538&action=enter"), + "testing failing match pattern"); +}; diff --git a/tests/test-pageMod.js b/tests/test-pageMod.js new file mode 100644 index 0000000..5434bbd --- /dev/null +++ b/tests/test-pageMod.js @@ -0,0 +1,141 @@ +/*jslint white: false, eqeqeq: false, plusplus: false, onevar: false, newcap: false */ +/*global exports: false, require: false, console: false, log: false */ +"use strict"; +var Cc = require("chrome").Cc; +var Ci = require("chrome").Ci; +var main = require("main"); +var utilMod = require("util"); +var testPageMod = require("pagemod-test-helpers").testPageMod; +var self = require("self"); + +var theURL = main.theURL; +var testURL = self.data.url('tests/change-more-bugs01.html'); +var JSONifiedMessage = '{"cmd":"testMessage","data":{"a":"first","b":"second"}}'; + +exports.ensureMessagesWork = function(test) { + var msg = new utilMod.Message("testMessage", { a: "first", b: "second" } ); + test.assertEqual(msg.cmd, "testMessage", + "msg.cmd comes over well"); + test.assertEqual(msg.data.a, "first", + "msg.data.a comes over well"); + test.assertEqual(msg.data.b, "second", + "msg.data.b comes over well"); + test.assertEqual(JSON.stringify(msg), JSONifiedMessage, + "JSONification of Message works as well"); +}; + +/* + +var theURL = main.theURL; +var testURL = self.data.url('tests/change-more-bugs01.html'); + +var contentScriptLibraries = { + "bugzilla.redhat.com": [ + self.data.url("util.js"), + self.data.url("color.js"), + self.data.url("rhbzpage.js"), + self.data.url("bzpage.js") + ] +}; + +libbz.initialize(libbz.config, function () { + pageMod.PageMod({ + include: [ + "https://bugzilla.redhat.com/show_bug.cgi?id=*" + ], + contentScriptWhen: 'ready', + contentScriptFile: contentScriptLibraries["bugzilla.redhat.com"], + onAttach: function onAttach(worker, msg) { + console.log("worker: " + worker); + worker.on('message', function (msg) { + messageHandler(worker, msg); + }); + } + }); +}); + +pageMod.PageMod({ + include: [ + "https://bugzilla.redhat.com/process_bug.cgi" + ], + contentScriptWhen: 'ready', + contentScriptFile: self.data.url("skip-bug.js") +}); + */ + +var ensureSimplePageLoad = function (test) { + console.log("testURL = " + testURL); + testPageMod(test, testURL, [{ + include: ["*"], + contentScriptWhen: 'ready', + contentScriptFile: [ + self.data.url("libPW.js"), + self.data.url("simplePageWorker.js") + ], + onAttach: function onAttach(worker) { + worker.on('message', function (msg) { + switch (msg.cmd) { + case "LogMessage": + log(msg.data); + break; + case "CallBack": + worker.postMessage(new utilMod.Message("Main", null)); + break; + default: + console.error(msg); + } + }); + } + }], + function (win, done) { + test.assertNotEqual(win.document.getElementsByTagName("form")[0], + null, "test of loading the page"); + done(); + }); +}; + +var ensurePageLoadsWell = function (test) { + var wm = Cc['@mozilla.org/appshell/window-mediator;1'] + .getService(Ci.nsIWindowMediator); + var browserWindow = wm.getMostRecentWindow("navigator:browser"); + if (!browserWindow) { + test.fail("page-mod tests: could not find the browser window, so " + + "will not run. Use -a firefox to run the pagemod tests."); + return null; + } + + var loader = test.makeSandboxedLoader(); + var pageMod = loader.require("page-mod"); + var testDoc = {}, b = {}, tabBrowser = {}, newTab = {}; + + pageMod.PageMod({ + include: ["*"], + contentScriptWhen: 'ready', + contentScriptFile: [ + self.data.url("libPW.js"), + self.data.url("pageWorker.js") + ], + onAttach: function onAttach(worker) { + worker.on('message', function (msg) { + switch (msg.cmd) { + case "testReady": + testDoc = b.contentWindow.wrappedJSObject.document; + test.assertNotEqual(testDoc.getElementById("dupeid_action"), + null, "test of DOM modifications of the page"); + pageMod.destroy(); + tabBrowser.removeTab(newTab); + test.done(); + // the test itself + break; + default: + main.messageHandler(worker, msg); + } + }); + } + }); + + tabBrowser = browserWindow.gBrowser; + newTab = tabBrowser.addTab(testURL); + tabBrowser.selectedTab = newTab; + b = tabBrowser.getBrowserForTab(newTab); +}; diff --git a/tests/test-util.js b/tests/test-util.js new file mode 100644 index 0000000..26c5f6d --- /dev/null +++ b/tests/test-util.js @@ -0,0 +1,214 @@ +/*global exports: false, require: false */ +/*jslint plusplus: false */ +// TODO: add some failing tests as well +"use strict"; +var util = require("util"); +var urlMod = require("url"); + +// testing util.heir +var ensureHeir = function (test) { + var fedlimid = {}, naoise = {}; + + function Father(x) { + this.family = x; + } + + Father.prototype.getFamily = function getFamily() { + return this.family; + }; + + function Son(x, w) { + Father.call(this, x); + this.wife = w; + } + + Son.prototype = util.heir(Father); + Son.prototype.constructor = Son; + + Son.prototype.getWife = function getWife() { + return this.wife; + }; + + Son.prototype.getFamily = function getFamily() { + var upFamily = + Father.prototype.getFamily.call(this); + return upFamily + ", " + this.wife; + }; + + // for curious and non-Celtic + // http://en.wikipedia.org/wiki/Deirdre :) + fedlimid = new Father("mac Daill"); + naoise = new Son("Usnech", "Deirdre"); + + test.assertEqual(fedlimid.getFamily(), "mac Daill", + "checking creation of new simple object"); + + test.assertEqual(naoise.getWife(), "Deirdre", + "checking creation of new daughter object"); + + test.assertEqual(naoise.getFamily(), "Usnech, Deirdre", + "checking creation of new overloaded method"); +}; + +// testing util.isInList +var ensureIsInListTrue = function (test) { + test.assert(util.isInList("a", ["a"]), + "conversion of a string to an array"); +}; + +var ensureIsInListFalse = function (test) { + test.assert(!util.isInList("b", ["a"]), + "conversion of a string to an array"); +}; + +var ensureIsInListEmpty = function (test) { + test.assert(!util.isInList("b", []), + "conversion of a string to an array"); +}; + +var ensureIsInListNoMember = function (test) { + test.assert(!util.isInList("", ["x"]), + "conversion of a string to an array"); +}; + +// testing util.filterByRegexp +var ensureFilterByRegexp = function (test) { + var list = [ + { + "regexp": "test(ing|ed)", + "addr": "correct" + }, + { + "regexp": "ba.*d", + "addr": true + } + ]; + + test.assertEqual(util.filterByRegexp(list, "testing"), "correct", + "simple testing of filterByRegexp"); + test.assertEqual(util.filterByRegexp(list, "unknown value"), "", + "simple testing of filterByRegexp with non-found address"); + test.assert(util.filterByRegexp(list, "baaad"), + "simple testing of filterByRegexp with non-string return value"); +}; + +var ensureFilterByRegexpEmpty = function (test) { + test.assertRaises(function () { + util.filterByRegexp(undefined, "tralala"); + }, + "list is undefined", + "filterByRegexp throws an exception with empty list"); +}; + +// testing util.getISODate +var ensureGetISODate = function (test) { + test.assertEqual(util.getISODate("Mon May 31 2010 23:29:09 GMT+0200 (CET)"), + "2010-05-31", "conversion of a Date to ISO-formatted String"); +}; + +// testing util.valToArray +var ensureValToArrayString = function (test) { + test.assertEqual(JSON.stringify(util.valToArray("a")), + JSON.stringify(["a"]), + "conversion of a string to an array"); +}; + +var ensureValToArrayEmpty = function (test) { + test.assertEqual(JSON.stringify(util.valToArray("")), + JSON.stringify([""]), + "conversion of an empty string to an array"); +}; + +var ensureValToArrayArray = function (test) { + test.assertEqual(JSON.stringify(util.valToArray(["a"])), + JSON.stringify(["a"]), + "non-conversion of an array"); +}; + +// testing util.addCSVValue +var ensureCSVAddedToNull = function (test) { + test.assertEqual(util.addCSVValue("", "b"), "b", + "adding a string to empty string"); +}; + +var ensureCSVAddedNull = function (test) { + test.assertEqual(util.addCSVValue("a", ""), "a", + "adding nothing to a string"); +}; + +var ensureCSVAddedString = function (test) { + test.assertEqual(util.addCSVValue("a", "b"), "a, b", + "adding one string to another one"); +}; + +var ensureCSVAddedArray = function (test) { + test.assertEqual(util.addCSVValue("a", ["b", "c"]), "a, b, c", + "adding array to a string"); +}; + +var ensureCSVAddedArray2Array = function (test) { + test.assertEqual(util.addCSVValue("a, b", ["c", "d"]), "a, b, c, d", + "adding one array to another"); +}; + +// testing util.removeCSVValue +var ensureCSVRemoveSimple = function (test) { + test.assertEqual(util.removeCSVValue("a, b", "b"), "a", + "removing one string from an array"); + +}; + +// also checking a tolerancy against different ways of writing arrays +var ensureCSVRemoveNonMember = function (test) { + test.assertEqual(util.removeCSVValue("a,b", "c"), "a, b", + "removing a string from an array of which it isn't a member"); + +}; + +var ensureCSVRemoveEmpty = function (test) { + test.assertEqual(util.removeCSVValue("", "c"), "", + "removing a string from an empty array"); + +}; + +// testing util.getObjectKeys +var ensureGetObjectKeys = function (test) { + var testObj = { + a: 1, + b: 2 + }; + test.assertEqual(JSON.stringify(util.getObjectKeys(testObj)), + JSON.stringify(["a", "b"]), + "getting keys from a object"); +}; + +// testing util.getParamsFromURL +var ensureGetParamsFromURL = function (test) { + test.assertEqual(JSON.stringify(util.getParamsFromURL("https://bugzilla.redhat.com/show_bug.cgi?id=549066")), + JSON.stringify({id:"549066"}), + "simply compare result of bugzilla show_page URL"); + var complexURL = new urlMod.URL("http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient"+ + "&gfns=1&q=gg+javascript+url+parse"); + test.assertEqual(JSON.stringify(util.getParamsFromURL(complexURL)), + JSON.stringify({ + "ie":"UTF-8", + "oe":"UTF-8", + "sourceid":"navclient", + "gfns":"1", + "q":"gg+javascript+url+parse" + }), + "simply compare result of bugzilla show_page URL"); + test.assertEqual(JSON.stringify(util.getParamsFromURL("https://bugzilla.redhat.com/")), + JSON.stringify({}), + "URL without any parameters"); + test.assertRaises(function () {util.getParamsFromURL("");}, + "Missing URL value!", "No URL"); +}; + +// testing util.getBugNo +var ensureGetBugNo = function (test) { + var bugNo = util.getBugNo("https://bugzilla.redhat.com/show_bug.cgi?id=597141"); + test.assertEqual(bugNo, 597141, "getting bug number"); + bugNo = util.getBugNo("https://bugzilla.redhat.com/show_bug.cgi?id=serialWacom"); + test.assertEqual(bugNo, "serialWacom", "getting a bug alias; there is no guarantee of getting number!"); +}; diff --git a/tests/test-xmlrpc.js b/tests/test-xmlrpc.js new file mode 100644 index 0000000..677a581 --- /dev/null +++ b/tests/test-xmlrpc.js @@ -0,0 +1,32 @@ +/*global exports: false, require: false */ +/*jslint plusplus: false */ +"use strict"; +var xrpc = require("xmlrpc"); +var xmlOut = "<?xml version=\"1.0\"?>\n" + + "<methodCall>\n<methodName>bugzilla.updateAttachMimeType</methodName>\n" + + "<params>\n<param>\n<value><struct>\n<member>\n<name>attach_id</name>\n" + + "<value><string>myId</string></value>\n</member>\n<member>\n" + + "<name>mime_type</name>\n<value><string>text/plain</string></value>\n</member>\n" + + "<member>\n<name>nomail</name>\n<value><string>billg@microsoft.com</string>" + + "</value>\n</member>\n</struct>\n</value>\n</param>\n<param>\n" + + "<value><string>me@example.com</string></value>\n</param>\n" + + "<param>\n<value><string>secret</string></value>\n</param>\n" + + "<param>\n<value><double>3.14</double></value>\n</param>\n" + + "<param>\n<value><boolean>1</boolean></value>\n</param>\n" + + "</params>\n</methodCall>"; + +// testing xrpc.XMLRPCMessage +exports.ensureGenerateXMLRPC = function (test) { + var msg = new xrpc.XMLRPCMessage("bugzilla.updateAttachMimeType"); + msg.addParameter({ + 'attach_id' : "myId", + 'mime_type' : "text/plain", + 'nomail' : "billg@microsoft.com" + }); + msg.addParameter("me@example.com"); + msg.addParameter("secret"); + msg.addParameter(3.14); + msg.addParameter(true); + test.assertEqual(msg.xml(), xmlOut, + "generate XML-RPC message"); +}; |