diff src/layout/rdf_value.test.ts @ 108:5e6840229a05

rewrite freeStatements rendering to put more planning in layout
author drewp@bigasterisk.com
date Fri, 18 Mar 2022 11:57:38 -0700
parents
children 8715633f5213
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/layout/rdf_value.test.ts	Fri Mar 18 11:57:38 2022 -0700
@@ -0,0 +1,49 @@
+import Immutable from "immutable";
+import { DataFactory, NamedNode, Term } from "n3";
+import { EX } from "./namespaces";
+import { uniqueSortedTerms } from "./rdf_value";
+const { namedNode, literal } = DataFactory;
+describe("Immutable.Set", () => {
+  it("contains", () => {
+    const s = Immutable.Set([EX("e1")]);
+    expect(s.contains(EX("e1"))).toBeTruthy();
+    expect(s.contains(EX("e2"))).toBeFalsy();
+  });
+});
+
+const uri1 = namedNode("http://example.com/1");
+const uri2 = namedNode("http://example.com/2");
+const lit1 = literal("lit1");
+const lit2 = literal("lit2");
+const lit3 = literal("lit2", namedNode("#othertype"));
+const lit4 = literal("http://example.com/1"); // sic literal (that looks like a URI)
+
+describe("uniqueSortedTerms", () => {
+  it("takes Term arrays", () => {
+    const actual = uniqueSortedTerms([lit1] as Term[]);
+    expect(actual).toEqual([lit1]);
+  });
+  it("takes NamedNode arrays", () => {
+    const actual = uniqueSortedTerms([uri1] as NamedNode[]);
+    expect(actual).toEqual([uri1]);
+  });
+  it("dedups URIs", () => {
+    expect(uniqueSortedTerms([uri1, uri1, uri2])).toEqual([uri1, uri2]);
+  });
+  it("sorts URIs", () => {
+    expect(uniqueSortedTerms([uri2, uri1])).toEqual([uri1, uri2]);
+  });
+  it("dedups literals", () => {
+    expect(uniqueSortedTerms([lit1, lit2, lit2, lit3, lit3])).toEqual([
+      lit1,
+      lit2,
+      lit3,
+    ]);
+  });
+  it("sorts literals", () => {
+    expect(uniqueSortedTerms([lit3, lit2, lit1])).toEqual([lit1, lit2, lit3]);
+  });
+  it("doesn't confuse literal URI strings", () => {
+    expect(uniqueSortedTerms([uri1, lit4])).toEqual([lit4, uri1]);
+  });
+});