diff options
Diffstat (limited to 'toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js')
-rw-r--r-- | toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js | 88 |
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); + } + } +} |