summaryrefslogtreecommitdiffstats
path: root/dom/base/test/unit/test_chromeutils_shallowclone.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/test/unit/test_chromeutils_shallowclone.js')
-rw-r--r--dom/base/test/unit/test_chromeutils_shallowclone.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/dom/base/test/unit/test_chromeutils_shallowclone.js b/dom/base/test/unit/test_chromeutils_shallowclone.js
new file mode 100644
index 0000000000..03e0d443c9
--- /dev/null
+++ b/dom/base/test/unit/test_chromeutils_shallowclone.js
@@ -0,0 +1,60 @@
+"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"
+ );
+});