summaryrefslogtreecommitdiffstats
path: root/toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js')
-rw-r--r--toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js b/toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js
new file mode 100644
index 000000000..c6c923187
--- /dev/null
+++ b/toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js
@@ -0,0 +1,88 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+/**
+ * Test conversion between nsIPropertyBag and JS values.
+ */
+
+var PropertyBagConverter = asyncShutdownService.wrappedJSObject._propertyBagConverter;
+
+function run_test() {
+ test_conversions();
+}
+
+function normalize(obj) {
+ if (obj == null || typeof obj != "object") {
+ return obj;
+ }
+ if (Array.isArray(obj)) {
+ return obj.map(normalize);
+ }
+ let result = {};
+ for (let k of Object.keys(obj).sort()) {
+ result[k] = normalize(obj[k]);
+ }
+ return result;
+}
+
+function test_conversions() {
+ const SAMPLES = [
+ // Simple values
+ 1,
+ true,
+ "string",
+ null,
+
+ // Objects
+ {
+ a: 1,
+ b: true,
+ c: "string",
+ d:.5,
+ e: [2, false, "another string", .3],
+ f: [],
+ g: {
+ a2: 1,
+ b2: true,
+ c2: "string",
+ d2:.5,
+ e2: [2, false, "another string", .3],
+ f2: [],
+ g2: [{
+ a3: 1,
+ b3: true,
+ c3: "string",
+ d3:.5,
+ e3: [2, false, "another string", .3],
+ f3: [],
+ g3: {}
+ }]
+ }
+ }];
+
+ for (let sample of SAMPLES) {
+ let stringified = JSON.stringify(normalize(sample), null, "\t");
+ do_print("Testing conversions of " + stringified);
+ let rewrites = [sample];
+ for (let i = 1; i < 3; ++i) {
+ let source = rewrites[i - 1];
+ let bag = PropertyBagConverter.fromValue(source);
+ do_print(" => " + bag);
+ if (source == null) {
+ Assert.ok(bag == null, "The bag is null");
+ } else if (typeof source == "object") {
+ Assert.ok(bag instanceof Ci.nsIPropertyBag, "The bag is a property bag");
+ } else {
+ Assert.ok(typeof bag != "object", "The bag is not an object");
+ }
+ let dest = PropertyBagConverter.toValue(bag);
+ let restringified = JSON.stringify(normalize(dest), null, "\t");
+ do_print("Comparing");
+ do_print(stringified);
+ do_print(restringified);
+ Assert.deepEqual(sample, dest, "Testing after " + i + " conversions");
+ rewrites.push(dest);
+ }
+ }
+}