gecko-dev/dom/base/test/unit/test_chromeutils_shallowclone.js
2018-12-17 15:19:27 +00:00

45 lines
1.6 KiB
JavaScript

"use strict";
add_task(function test_shallowclone() {
// Check that shallow cloning an object with regular properties,
// results into a new object with all properties from the source object.
const fullyCloneableObject = {
numProp: 123,
strProp: "str",
boolProp: true,
arrayProp: [{item1: "1", item2: "2"}],
fnProp() { return "fn result"; },
promise: Promise.resolve("promised-value"),
weakmap: new WeakMap(),
proxy: new Proxy({}, {}),
};
let clonedObject = ChromeUtils.shallowClone(fullyCloneableObject);
Assert.deepEqual(clonedObject, fullyCloneableObject,
"Got the expected cloned object for an object with regular properties");
// Check that shallow cloning an object with getters and setters properties,
// results into a new object without all the properties from the source object excluded
// its getters and setters.
const objectWithGetterAndSetter = {
get myGetter() { return "getter result"; },
set mySetter(v) {},
myFunction() { return "myFunction result"; },
};
clonedObject = ChromeUtils.shallowClone(objectWithGetterAndSetter);
Assert.deepEqual(clonedObject, {
myFunction: objectWithGetterAndSetter.myFunction,
}, "Got the expected cloned object for an object with getters and setters");
// Check that shallow cloning a proxy object raises the expected exception..
const proxyObject = new Proxy(fullyCloneableObject, {});
Assert.throws(
() => { ChromeUtils.shallowClone(proxyObject); },
/Shallow cloning a proxy object is not allowed/,
"Got the expected error on ChromeUtils.shallowClone called on a proxy object");
});