epiphany/node_modules/@11ty/eleventy-utils/test/IsPlainObjectTest.js
2023-12-09 22:19:03 -08:00

80 lines
2.6 KiB
JavaScript

const test = require("ava");
const { isPlainObject } = require("../");
test("isPlainObject", (t) => {
t.is(isPlainObject(null), false);
t.is(isPlainObject(undefined), false);
t.is(isPlainObject(1), false);
t.is(isPlainObject(true), false);
t.is(isPlainObject(false), false);
t.is(isPlainObject("string"), false);
t.is(isPlainObject([]), false);
t.is(isPlainObject(Symbol("a")), false);
t.is(
isPlainObject(function () {}),
false
);
});
// https://github.com/lodash/lodash/blob/ddfd9b11a0126db2302cb70ec9973b66baec0975/test/test.js#L11447
// Notably, did not include the test for DOM Elements.
test("Test from lodash.isPlainObject", (t) => {
t.is(isPlainObject({}), true);
t.is(isPlainObject({ a: 1 }), true);
function Foo(a) {
this.a = 1;
}
t.is(isPlainObject({ constructor: Foo }), true);
t.is(isPlainObject([1, 2, 3]), false);
t.is(isPlainObject(new Foo(1)), false);
});
test("Test from lodash.isPlainObject: should return `true` for objects with a `[[Prototype]]` of `null`", (t) => {
let obj = Object.create(null);
t.is(isPlainObject(obj), true);
obj.constructor = Object.prototype.constructor;
t.is(isPlainObject(obj), true);
});
test("Test from lodash.isPlainObject: should return `true` for objects with a `valueOf` property", (t) => {
t.is(isPlainObject({ valueOf: 0 }), true);
});
test("Test from lodash.isPlainObject: should return `true` for objects with a writable `Symbol.toStringTag` property", (t) => {
let obj = {};
obj[Symbol.toStringTag] = "X";
t.is(isPlainObject(obj), true);
});
test("Test from lodash.isPlainObject: should return `false` for objects with a custom `[[Prototype]]`", (t) => {
let obj = Object.create({ a: 1 });
t.is(isPlainObject(obj), false);
});
test("Test from lodash.isPlainObject (modified): should return `false` for non-Object objects", (t) => {
t.is(isPlainObject(arguments), true); // WARNING: lodash was false
t.is(isPlainObject(Error), false);
t.is(isPlainObject(Math), true); // WARNING: lodash was false
});
test("Test from lodash.isPlainObject: should return `false` for non-objects", (t) => {
t.is(isPlainObject(true), false);
t.is(isPlainObject("a"), false);
t.is(isPlainObject(Symbol("a")), false);
});
test("Test from lodash.isPlainObject (modified): should return `true` for objects with a read-only `Symbol.toStringTag` property", (t) => {
var object = {};
Object.defineProperty(object, Symbol.toStringTag, {
configurable: true,
enumerable: false,
writable: false,
value: "X",
});
t.is(isPlainObject(object), true); // WARNING: lodash was false
});