mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-12 14:20:14 +02:00
Differential Revision: https://phabricator.services.mozilla.com/D11655 --HG-- extra : moz-landing-system : lando
45 lines
1.6 KiB
JavaScript
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");
|
|
});
|