summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibJS/Tests/builtins/Object/Object.hasOwn.js
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibJS/Tests/builtins/Object/Object.hasOwn.js')
-rw-r--r--Userland/Libraries/LibJS/Tests/builtins/Object/Object.hasOwn.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/Userland/Libraries/LibJS/Tests/builtins/Object/Object.hasOwn.js b/Userland/Libraries/LibJS/Tests/builtins/Object/Object.hasOwn.js
new file mode 100644
index 0000000000..1ea82a309a
--- /dev/null
+++ b/Userland/Libraries/LibJS/Tests/builtins/Object/Object.hasOwn.js
@@ -0,0 +1,35 @@
+describe("basic functionality", () => {
+ test("length", () => {
+ expect(Object.hasOwn).toHaveLength(2);
+ });
+
+ test("returns true for existent own property", () => {
+ const o = { foo: "bar" };
+ expect(Object.hasOwn(o, "foo")).toBeTrue();
+ });
+
+ test("returns false for non-existent own property", () => {
+ const o = {};
+ expect(Object.hasOwn(o, "foo")).toBeFalse();
+ });
+
+ test("returns false for existent prototype chain property", () => {
+ const o = {};
+ Object.prototype.foo = "bar";
+ expect(Object.hasOwn(o, "foo")).toBeFalse();
+ });
+});
+
+describe("errors", () => {
+ test("null argument", () => {
+ expect(() => {
+ Object.hasOwn(null);
+ }).toThrowWithMessage(TypeError, "ToObject on null or undefined");
+ });
+
+ test("undefined argument", () => {
+ expect(() => {
+ Object.hasOwn(undefined);
+ }).toThrowWithMessage(TypeError, "ToObject on null or undefined");
+ });
+});