diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /toolkit/components/xulstore/tests/xpcshell/test_XULStore.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | uxp-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz |
Add m-esr52 at 52.6.0
Diffstat (limited to 'toolkit/components/xulstore/tests/xpcshell/test_XULStore.js')
-rw-r--r-- | toolkit/components/xulstore/tests/xpcshell/test_XULStore.js | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/toolkit/components/xulstore/tests/xpcshell/test_XULStore.js b/toolkit/components/xulstore/tests/xpcshell/test_XULStore.js new file mode 100644 index 0000000000..c3c96654b0 --- /dev/null +++ b/toolkit/components/xulstore/tests/xpcshell/test_XULStore.js @@ -0,0 +1,199 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/◦ +*/ + +"use strict" + +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cu = Components.utils; +const Cr = Components.results; + +Cu.import("resource://gre/modules/osfile.jsm") + +var XULStore = null; +var browserURI = "chrome://browser/content/browser.xul"; +var aboutURI = "about:config"; + +function run_test() { + do_get_profile(); + run_next_test(); +} + +function checkValue(uri, id, attr, reference) { + let value = XULStore.getValue(uri, id, attr); + do_check_true(value === reference); +} + +function checkValueExists(uri, id, attr, exists) { + do_check_eq(XULStore.hasValue(uri, id, attr), exists); +} + +function getIDs(uri) { + let it = XULStore.getIDsEnumerator(uri); + let result = []; + + while (it.hasMore()) { + let value = it.getNext(); + result.push(value); + } + + result.sort(); + return result; +} + +function getAttributes(uri, id) { + let it = XULStore.getAttributeEnumerator(uri, id); + + let result = []; + + while (it.hasMore()) { + let value = it.getNext(); + result.push(value); + } + + result.sort(); + return result; +} + +function checkArrays(a, b) { + a.sort(); + b.sort(); + do_check_true(a.toString() == b.toString()); +} + +function checkOldStore() { + checkArrays(['addon-bar', 'main-window', 'sidebar-title'], getIDs(browserURI)); + checkArrays(['collapsed'], getAttributes(browserURI, 'addon-bar')); + checkArrays(['height', 'screenX', 'screenY', 'sizemode', 'width'], + getAttributes(browserURI, 'main-window')); + checkArrays(['value'], getAttributes(browserURI, 'sidebar-title')); + + checkValue(browserURI, "addon-bar", "collapsed", "true"); + checkValue(browserURI, "main-window", "width", "994"); + checkValue(browserURI, "main-window", "height", "768"); + checkValue(browserURI, "main-window", "screenX", "4"); + checkValue(browserURI, "main-window", "screenY", "22"); + checkValue(browserURI, "main-window", "sizemode", "normal"); + checkValue(browserURI, "sidebar-title", "value", ""); + + checkArrays(['lockCol', 'prefCol'], getIDs(aboutURI)); + checkArrays(['ordinal'], getAttributes(aboutURI, 'lockCol')); + checkArrays(['ordinal', 'sortDirection'], getAttributes(aboutURI, 'prefCol')); + + checkValue(aboutURI, "prefCol", "ordinal", "1"); + checkValue(aboutURI, "prefCol", "sortDirection", "ascending"); + checkValue(aboutURI, "lockCol", "ordinal", "3"); +} + +add_task(function* testImport() { + let src = "localstore.rdf"; + let dst = OS.Path.join(OS.Constants.Path.profileDir, src); + + yield OS.File.copy(src, dst); + + // Importing relies on XULStore not yet being loaded before this point. + XULStore = Cc["@mozilla.org/xul/xulstore;1"].getService(Ci.nsIXULStore); + checkOldStore(); +}); + +add_task(function* testTruncation() { + let dos = Array(8192).join("~"); + // Long id names should trigger an exception + Assert.throws(() => XULStore.setValue(browserURI, dos, "foo", "foo"), /NS_ERROR_ILLEGAL_VALUE/); + + // Long attr names should trigger an exception + Assert.throws(() => XULStore.setValue(browserURI, "foo", dos, "foo"), /NS_ERROR_ILLEGAL_VALUE/); + + // Long values should be truncated + XULStore.setValue(browserURI, "dos", "dos", dos); + dos =XULStore.getValue(browserURI, "dos", "dos"); + do_check_true(dos.length == 4096) + XULStore.removeValue(browserURI, "dos", "dos") +}); + +add_task(function* testGetValue() { + // Get non-existing property + checkValue(browserURI, "side-window", "height", ""); + + // Get existing property + checkValue(browserURI, "main-window", "width", "994"); +}); + +add_task(function* testHasValue() { + // Check non-existing property + checkValueExists(browserURI, "side-window", "height", false); + + // Check existing property + checkValueExists(browserURI, "main-window", "width", true); +}); + +add_task(function* testSetValue() { + // Set new attribute + checkValue(browserURI, "side-bar", "width", ""); + XULStore.setValue(browserURI, "side-bar", "width", "1000"); + checkValue(browserURI, "side-bar", "width", "1000"); + checkArrays(["addon-bar", "main-window", "side-bar", "sidebar-title"], getIDs(browserURI)); + checkArrays(["width"], getAttributes(browserURI, 'side-bar')); + + // Modify existing property + checkValue(browserURI, "side-bar", "width", "1000"); + XULStore.setValue(browserURI, "side-bar", "width", "1024"); + checkValue(browserURI, "side-bar", "width", "1024"); + checkArrays(["addon-bar", "main-window", "side-bar", "sidebar-title"], getIDs(browserURI)); + checkArrays(["width"], getAttributes(browserURI, 'side-bar')); + + // Add another attribute + checkValue(browserURI, "side-bar", "height", ""); + XULStore.setValue(browserURI, "side-bar", "height", "1000"); + checkValue(browserURI, "side-bar", "height", "1000"); + checkArrays(["addon-bar", "main-window", "side-bar", "sidebar-title"], getIDs(browserURI)); + checkArrays(["width", "height"], getAttributes(browserURI, 'side-bar')); +}); + +add_task(function* testRemoveValue() { + // Remove first attribute + checkValue(browserURI, "side-bar", "width", "1024"); + XULStore.removeValue(browserURI, "side-bar", "width"); + checkValue(browserURI, "side-bar", "width", ""); + checkValueExists(browserURI, "side-bar", "width", false); + checkArrays(["addon-bar", "main-window", "side-bar", "sidebar-title"], getIDs(browserURI)); + checkArrays(["height"], getAttributes(browserURI, 'side-bar')); + + // Remove second attribute + checkValue(browserURI, "side-bar", "height", "1000"); + XULStore.removeValue(browserURI, "side-bar", "height"); + checkValue(browserURI, "side-bar", "height", ""); + checkArrays(["addon-bar", "main-window", "sidebar-title"], getIDs(browserURI)); + + // Removing an attribute that doesn't exists shouldn't fail + XULStore.removeValue(browserURI, "main-window", "bar"); + + // Removing from an id that doesn't exists shouldn't fail + XULStore.removeValue(browserURI, "foo", "bar"); + + // Removing from a document that doesn't exists shouldn't fail + let nonDocURI = "chrome://example/content/other.xul"; + XULStore.removeValue(nonDocURI, "foo", "bar"); + + // Remove all attributes in browserURI + XULStore.removeValue(browserURI, "addon-bar", "collapsed"); + checkArrays([], getAttributes(browserURI, "addon-bar")); + XULStore.removeValue(browserURI, "main-window", "width"); + XULStore.removeValue(browserURI, "main-window", "height"); + XULStore.removeValue(browserURI, "main-window", "screenX"); + XULStore.removeValue(browserURI, "main-window", "screenY"); + XULStore.removeValue(browserURI, "main-window", "sizemode"); + checkArrays([], getAttributes(browserURI, "main-window")); + XULStore.removeValue(browserURI, "sidebar-title", "value"); + checkArrays([], getAttributes(browserURI, "sidebar-title")); + checkArrays([], getIDs(browserURI)); + + // Remove all attributes in aboutURI + XULStore.removeValue(aboutURI, "prefCol", "ordinal"); + XULStore.removeValue(aboutURI, "prefCol", "sortDirection"); + checkArrays([], getAttributes(aboutURI, "prefCol")); + XULStore.removeValue(aboutURI, "lockCol", "ordinal"); + checkArrays([], getAttributes(aboutURI, "lockCol")); + checkArrays([], getIDs(aboutURI)); +}); |