60 lines
1.7 KiB
JavaScript
60 lines
1.7 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"
|
|
);
|
|
});
|