]> Lady’s Gitweb - Etiquette/blobdiff - model.test.js
Give Tag constructors a superclass
[Etiquette] / model.test.js
index a648d4f736b8e6fb44dcb06c681c6bf739615a59..a92671c52d2a4a033ab575172ff6abe7e00f2117 100644 (file)
@@ -105,13 +105,13 @@ describe("TagSystem", () => {
     });
 
     it("[[Construct]] defaults the preferred label to the empty string", () => {
-      assertStrictEquals(new Tag().prefLabel, "");
+      assertEquals({ ...new Tag().prefLabel }, { "@value": "" });
     });
 
     it("[[Construct]] correctly sets the preferred label to a simple string", () => {
-      assertStrictEquals(
-        new Tag("RelationshipTag", "Shadow, Me").prefLabel,
-        "Shadow, Me",
+      assertEquals(
+        { ...new Tag("RelationshipTag", "Shadow, Me").prefLabel },
+        { "@value": "Shadow, Me" },
       );
     });
 
@@ -164,6 +164,12 @@ describe("TagSystem", () => {
       });
     });
 
+    describe(".constructor", () => {
+      it("[[Get]] is `Function`", () => {
+        assertStrictEquals(Tag.constructor, Function);
+      });
+    });
+
     describe(".fromIRI", () => {
       it("[[Call]] returns the persisted tag with the given I·R·I", () => {
         const tag = new Tag();
@@ -186,8 +192,10 @@ describe("TagSystem", () => {
         );
       });
 
-      it("[[Call]] returns null if passed an invalid I·R·I", () => {
-        assertStrictEquals(Tag.fromIRI(`bad iri`), null);
+      it("[[Call]] throws if passed an invalid I·R·I", () => {
+        assertThrows(() => {
+          Tag.fromIRI(`bad iri`);
+        });
       });
     });
 
@@ -233,11 +241,11 @@ describe("TagSystem", () => {
 
       it("[[Call]] returns null if no tag with the given Tag U·R·I has been persisted", () => {
         assertStrictEquals(
-          Tag.fromIRI(`tag:${system.taggingEntity}:`),
+          Tag.fromTagURI(`tag:${system.taggingEntity}:`),
           null,
         );
         assertStrictEquals(
-          Tag.fromIRI(`tag:${system.taggingEntity}:000-0000`),
+          Tag.fromTagURI(`tag:${system.taggingEntity}:000-0000`),
           null,
         );
       });
@@ -254,12 +262,6 @@ describe("TagSystem", () => {
       });
     });
 
-    describe(".getSystem", () => {
-      it("[[Has]] is not present", () => {
-        assertFalse("getSystem" in Tag);
-      });
-    });
-
     describe(".identifiers", () => {
       it("[[Call]] yields all the persisted identifiers", () => {
         const tags = new Set(function* () {
@@ -295,17 +297,19 @@ describe("TagSystem", () => {
           { "@value": "three", "@language": "en" },
         );
         assertEquals(
-          Array.from(
-            tag.altLabels(),
-            ($) => typeof $ == "string" ? $ : { ...$ },
-          ),
+          Array.from(tag.altLabels(), ($) => ({ ...$ })),
           [
-            "one",
-            "two",
+            { "@value": "one" },
+            { "@value": "two" },
             { "@value": "three", "@language": "en" },
           ],
         );
       });
+
+      it("[[Call]] returns this", () => {
+        const tag = new Tag();
+        assertStrictEquals(tag.addAltLabel(), tag);
+      });
     });
 
     describe("::addBroaderTag", () => {
@@ -328,6 +332,11 @@ describe("TagSystem", () => {
         );
       });
 
+      it("[[Call]] returns this", () => {
+        const tag = new Tag();
+        assertStrictEquals(tag.addBroaderTag(), tag);
+      });
+
       it("[[Call]] throws when adding a non‐persisted tag", () => {
         const tag = new Tag();
         assertThrows(() => {
@@ -361,17 +370,19 @@ describe("TagSystem", () => {
           { "@value": "three", "@language": "en" },
         );
         assertEquals(
-          Array.from(
-            tag.hiddenLabels(),
-            ($) => typeof $ == "string" ? $ : { ...$ },
-          ),
+          Array.from(tag.hiddenLabels(), ($) => ({ ...$ })),
           [
-            "one",
-            "two",
+            { "@value": "one" },
+            { "@value": "two" },
             { "@value": "three", "@language": "en" },
           ],
         );
       });
+
+      it("[[Call]] returns this", () => {
+        const tag = new Tag();
+        assertStrictEquals(tag.addHiddenLabel(), tag);
+      });
     });
 
     describe("::addInCanonTag", () => {
@@ -394,9 +405,16 @@ describe("TagSystem", () => {
         );
       });
 
+      it("[[Call]] returns this", () => {
+        const tag = new Tag("EntityTag");
+        assertStrictEquals(tag.addInCanonTag(), tag);
+      });
+
       it("[[Call]] throws when this is not a tag which can be placed in canon", () => {
+        const canon = new Tag("CanonTag");
+        canon.persist();
         assertThrows(() => {
-          new Tag().addInCanonTag();
+          new Tag().addInCanonTag(canon);
         });
       });
 
@@ -447,9 +465,16 @@ describe("TagSystem", () => {
         );
       });
 
+      it("[[Call]] returns this", () => {
+        const tag = new Tag("ConceptualTag");
+        assertStrictEquals(tag.addInvolvesTag(), tag);
+      });
+
       it("[[Call]] throws when this is not a conceptual tag", () => {
+        const involved = new Tag();
+        involved.persist();
         assertThrows(() => {
-          new Tag().addInvolvesTag();
+          new Tag().addInvolvesTag(involved);
         });
       });
 
@@ -528,7 +553,10 @@ describe("TagSystem", () => {
         const tag = new Tag();
         tag.addAltLabel("etaoin");
         tag.deleteAltLabel();
-        assertEquals([...tag.altLabels()], ["etaoin"]);
+        assertEquals(
+          Array.from(tag.altLabels(), ($) => ({ ...$ })),
+          [{ "@value": "etaoin" }],
+        );
       });
 
       it("[[Call]] deletes only the provided hidden labels", () => {
@@ -545,7 +573,15 @@ describe("TagSystem", () => {
           { "@value": "three", "@language": "en" },
           { "@value": "four", "@language": "en" },
         );
-        assertEquals([...tag.altLabels()], ["four"]);
+        assertEquals(
+          Array.from(tag.altLabels(), ($) => ({ ...$ })),
+          [{ "@value": "four" }],
+        );
+      });
+
+      it("[[Call]] returns this", () => {
+        const tag = new Tag();
+        assertStrictEquals(tag.deleteAltLabel(), tag);
       });
     });
 
@@ -579,6 +615,11 @@ describe("TagSystem", () => {
           [broader2.identifier],
         );
       });
+
+      it("[[Call]] returns this", () => {
+        const tag = new Tag();
+        assertStrictEquals(tag.deleteBroaderTag(), tag);
+      });
     });
 
     describe("::deleteHiddenLabel", () => {
@@ -586,7 +627,10 @@ describe("TagSystem", () => {
         const tag = new Tag();
         tag.addHiddenLabel("etaoin");
         tag.deleteHiddenLabel();
-        assertEquals([...tag.hiddenLabels()], ["etaoin"]);
+        assertEquals(
+          Array.from(tag.hiddenLabels(), ($) => ({ ...$ })),
+          [{ "@value": "etaoin" }],
+        );
       });
 
       it("[[Call]] deletes only the provided alternative labels", () => {
@@ -603,7 +647,15 @@ describe("TagSystem", () => {
           { "@value": "three", "@language": "en" },
           { "@value": "four", "@language": "en" },
         );
-        assertEquals([...tag.hiddenLabels()], ["four"]);
+        assertEquals(
+          Array.from(tag.hiddenLabels(), ($) => ({ ...$ })),
+          [{ "@value": "four" }],
+        );
+      });
+
+      it("[[Call]] returns this", () => {
+        const tag = new Tag();
+        assertStrictEquals(tag.deleteHiddenLabel(), tag);
       });
     });
 
@@ -633,6 +685,11 @@ describe("TagSystem", () => {
           [canon2.identifier],
         );
       });
+
+      it("[[Call]] returns this", () => {
+        const tag = new Tag("EntityTag");
+        assertStrictEquals(tag.deleteInCanonTag(), tag);
+      });
     });
 
     describe("::deleteInvolvesTag", () => {
@@ -665,6 +722,11 @@ describe("TagSystem", () => {
           [involved2.identifier],
         );
       });
+
+      it("[[Call]] returns this", () => {
+        const tag = new Tag("ConceptualTag");
+        assertStrictEquals(tag.deleteInvolvesTag(), tag);
+      });
     });
 
     describe("::hasInCanonTags", () => {
@@ -713,6 +775,8 @@ describe("TagSystem", () => {
 
     // `::iri` is tested by a `.fromIRI`.
 
+    // `::iriSpace` is tested by a `.fromIRI`.
+
     // `::kind` is tested by the constructor.
 
     describe("::narrowerTags", () => {
@@ -864,9 +928,9 @@ describe("TagSystem", () => {
       it("[[Set]] sets the preferred label", () => {
         const tag = new Tag();
         tag.prefLabel = "one";
-        assertStrictEquals(tag.prefLabel, "one");
+        assertEquals({ ...tag.prefLabel }, { "@value": "one" });
         tag.prefLabel = { "@value": "two" };
-        assertStrictEquals(tag.prefLabel, "two");
+        assertEquals({ ...tag.prefLabel }, { "@value": "two" });
         tag.prefLabel = { "@value": "three", "@language": "en" };
         assertEquals(
           { ...tag.prefLabel },
@@ -978,6 +1042,25 @@ describe("TagSystem", () => {
     });
   });
 
+  describe("::iriSpace", () => {
+    it("[[Get]] returns the I·R·I space", () => {
+      const system = new TagSystem("etaoin.example", "1972-12-31");
+      assertStrictEquals(
+        system.iriSpace,
+        "https://etaoin.example/tag:etaoin.example,1972-12-31:",
+      );
+      const system2 = new TagSystem(
+        "etaoin.example",
+        "1972-12-31",
+        "etaoin",
+      );
+      assertStrictEquals(
+        system2.iriSpace,
+        "https://etaoin.example/tag:etaoin.example,1972-12-31:",
+      );
+    });
+  });
+
   describe("::tagURI", () => {
     it("[[Get]] returns the Tag U·R·I", () => {
       const system = new TagSystem("etaoin.example", "1972-12-31");
This page took 0.06189 seconds and 4 git commands to generate.