]> Lady’s Gitweb - Pisces/blobdiff - symbol.test.js
Add methods for own entries and values to object.js
[Pisces] / symbol.test.js
index bedcc72218473d5b8606b9fda7e82006dec2174d..03abffcf004730598788077bc913358705657c57 100644 (file)
@@ -13,7 +13,11 @@ import {
   describe,
   it,
 } from "./dev-deps.js";
-import { getSymbolDescription } from "./symbol.js";
+import {
+  getSymbolDescription,
+  symbolToString,
+  symbolValue,
+} from "./symbol.js";
 
 describe("getSymbolDescription", () => {
   it("[[Call]] returns undefined when the symbol has no description", () => {
@@ -31,14 +35,16 @@ describe("getSymbolDescription", () => {
     );
   });
 
-  it("[[Call]] returns the empty string when the symbol has an empty description", () => {
-    assertStrictEquals(getSymbolDescription(Symbol("")), "");
-  });
-
   it("[[Construct]] throws an error", () => {
     assertThrows(() => new getSymbolDescription(Symbol()));
   });
 
+  describe(".length", () => {
+    it("[[Get]] returns the correct length", () => {
+      assertStrictEquals(getSymbolDescription.length, 1);
+    });
+  });
+
   describe(".name", () => {
     it("[[Get]] returns the correct name", () => {
       assertStrictEquals(
@@ -48,3 +54,86 @@ describe("getSymbolDescription", () => {
     });
   });
 });
+
+describe("symbolToString", () => {
+  it('[[Call]] returns "Symbol()" when the symbol has no description', () => {
+    assertStrictEquals(symbolToString(Symbol()), "Symbol()");
+  });
+
+  it('[[Call]] returns "Symbol()" when the symbol has an empty description', () => {
+    assertStrictEquals(symbolToString(Symbol("")), "Symbol()");
+  });
+
+  it('[[Call]] returns "Symbol()" wrapping the description', () => {
+    assertStrictEquals(
+      symbolToString(Symbol("etaoin")),
+      "Symbol(etaoin)",
+    );
+  });
+
+  it("[[Construct]] throws an error", () => {
+    assertThrows(() => new symbolToString(Symbol()));
+  });
+
+  describe(".length", () => {
+    it("[[Get]] returns the correct length", () => {
+      assertStrictEquals(symbolToString.length, 1);
+    });
+  });
+
+  describe(".name", () => {
+    it("[[Get]] returns the correct name", () => {
+      assertStrictEquals(
+        symbolToString.name,
+        "symbolToString",
+      );
+    });
+  });
+});
+
+describe("symbolValue", () => {
+  it("[[Call]] returns the value of a symbol", () => {
+    const symbol = Symbol();
+    assertStrictEquals(symbolValue(symbol), symbol);
+  });
+
+  it("[[Call]] returns the value of a symbol wrapper", () => {
+    const symbol = Symbol();
+    assertStrictEquals(symbolValue(new Object(symbol)), symbol);
+  });
+
+  it("[[Call]] returns the value of a symbol subclass", () => {
+    class SymbolExtension extends Symbol {
+      constructor(symbol) {
+        return Object.setPrototypeOf(
+          new Object(symbol),
+          SymbolExtension.prototype,
+        );
+      }
+    }
+    const symbol = Symbol();
+    assertStrictEquals(
+      symbolValue(new SymbolExtension(symbol)),
+      symbol,
+    );
+  });
+
+  it("[[Construct]] throws an error", () => {
+    assertThrows(() => new symbolValue(Symbol()));
+  });
+
+  describe(".length", () => {
+    it("[[Get]] returns the correct length", () => {
+      assertStrictEquals(symbolValue.length, 1);
+    });
+  });
+
+  describe(".name", () => {
+    it("[[Get]] returns the correct name", () => {
+      assertStrictEquals(
+        symbolValue.name,
+        "symbolValue",
+      );
+    });
+  });
+});
This page took 0.053835 seconds and 4 git commands to generate.