X-Git-Url: https://git.ladys.computer/Pisces/blobdiff_plain/4ab95bf467c40e8c6e81f309bd9a0d33518fbee4..e1cb83c479df2a3e4a5e918867a135ff9dde8121:/function.test.js?ds=inline
diff --git a/function.test.js b/function.test.js
index 09b9f7e..a5c8311 100644
--- a/function.test.js
+++ b/function.test.js
@@ -1,15 +1,19 @@
-// ♓🌟 Piscēs ∷ function.test.js
-// ====================================================================
-//
-// Copyright © 2022–2023 Lady [@ Lady’s Computer].
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this
-// file, You can obtain one at .
+// SPDX-FileCopyrightText: 2022, 2023, 2025 Lady
+// SPDX-License-Identifier: MPL-2.0
+/**
+ * ⁌ ♓🧩 Piscēs ∷ function.test.js
+ *
+ * Copyright © 2022–2023, 2025 Lady [@ Ladys Computer].
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at .
+ */
import {
assert,
assertEquals,
+ assertNotStrictEquals,
assertSpyCall,
assertSpyCalls,
assertStrictEquals,
@@ -337,8 +341,8 @@ describe("createArrowFunction", () => {
it("[[Call]] returns a function with no prototype property", () => {
assert(
- !("prototype" in
- createArrowFunction(function () {}, { prototype: {} })),
+ !("prototype"
+ in createArrowFunction(function () {}, { prototype: {} })),
);
});
@@ -429,8 +433,8 @@ describe("createCallableFunction", () => {
it("[[Call]] returns a function with no prototype property", () => {
assert(
- !("prototype" in
- createCallableFunction(function () {}, { prototype: {} })),
+ !("prototype"
+ in createCallableFunction(function () {}, { prototype: {} })),
);
});
@@ -469,9 +473,6 @@ describe("createIllegalConstructor", () => {
Object.getPrototypeOf(constructor.prototype),
Object.prototype,
);
- console.dir(
- Object.getOwnPropertyDescriptors(constructor.prototype),
- );
assertEquals(
constructor.prototype,
Object.create(Object.prototype, {
@@ -712,6 +713,95 @@ describe("createProxyConstructor", () => {
});
});
+ describe("~is[[.name]]", () => {
+ it("[[GetOwnProperty]] defines the appropriate method", () => {
+ assertNotStrictEquals(
+ Object.getOwnPropertyDescriptor(
+ createProxyConstructor({}),
+ "isProxy",
+ ),
+ undefined,
+ );
+ assertNotStrictEquals(
+ Object.getOwnPropertyDescriptor(
+ createProxyConstructor({}, function Base() {}),
+ "isBaseProxy",
+ ),
+ undefined,
+ );
+ assertNotStrictEquals(
+ Object.getOwnPropertyDescriptor(
+ createProxyConstructor({}, function Bad() {}, undefined, {
+ name: "⸺",
+ }),
+ "is⸺",
+ ),
+ undefined,
+ );
+ });
+
+ it("[[GetOwnProperty]] has the correct descriptor", () => {
+ const proxyConstructor = createProxyConstructor({});
+ assertEquals(
+ Object.getOwnPropertyDescriptor(
+ proxyConstructor,
+ "isProxy",
+ ),
+ {
+ configurable: true,
+ enumerable: false,
+ value: proxyConstructor.isProxy,
+ writable: true,
+ },
+ );
+ });
+
+ it("[[Call]] returns true for created proxies", () => {
+ const proxyConstructor = createProxyConstructor({});
+ const proxy = new proxyConstructor();
+ assertStrictEquals(
+ proxyConstructor.isProxy(proxy),
+ true,
+ );
+ });
+
+ it("[[Call]] returns false for nonproxies", () => {
+ const constructor = function Base() {};
+ const proxyConstructor = createProxyConstructor({}, constructor);
+ assertStrictEquals(
+ proxyConstructor.isBaseProxy(new constructor()),
+ false,
+ );
+ });
+
+ it("[[Construct]] throws an error", () => {
+ const proxyConstructor = createProxyConstructor({});
+ assertThrows(() => new proxyConstructor.isProxy({}));
+ });
+
+ describe(".length", () => {
+ it("[[Get]] returns the correct length", () => {
+ const proxyConstructor = createProxyConstructor({});
+ assertStrictEquals(proxyConstructor.isProxy.length, 1);
+ });
+ });
+
+ describe(".name", () => {
+ it("[[Get]] returns the correct name", () => {
+ const proxyConstructor = createProxyConstructor({});
+ assertStrictEquals(proxyConstructor.isProxy.name, "isProxy");
+ const otherProxyConstructor = createProxyConstructor(
+ {},
+ function Base() {},
+ );
+ assertStrictEquals(
+ otherProxyConstructor.isBaseProxy.name,
+ "isBaseProxy",
+ );
+ });
+ });
+ });
+
describe("~length", () => {
it("[[GetOwnProperty]] has the correct descriptor", () => {
assertEquals(
@@ -739,7 +829,7 @@ describe("createProxyConstructor", () => {
{
configurable: true,
enumerable: false,
- value: "ObjectProxy",
+ value: "Proxy",
writable: false,
},
);