view src/tabulate.test.ts @ 90:6077fdc9ed44

inv release
author drewp@bigasterisk.com
date Wed, 12 Jan 2022 16:54:15 -0800
parents ac7ad087d474
children
line wrap: on
line source

import { groupByRdfType } from "./tabulate";
import {
  Literal,
  DataFactory,
  Store,
  Prefixes,
  Parser,
  Quad,
  NamedNode,
} from "n3";
import Immutable from "immutable";
const { namedNode } = DataFactory;

describe("equality", () => {
  test("investigation of https://github.com/rdfjs/N3.js/issues/265", () => {
    const x = namedNode("x");
    const x2 = namedNode("x");
    // (NamedNode.prototype as any).hashCode = () => 0;
    // expect((x as any).hashCode()).toEqual((x2 as any).hashCode())
    expect(x === x2).toBeFalsy();
    expect(x == x2).toBeFalsy();
    expect(x.equals(x2)).toBeTruthy();
    let imap = Immutable.Map();
    imap = imap.set(x, 11);
    imap = imap.set(x, 22);
    imap = imap.set(x2, 33);
    expect(imap.has(x)).toBeTruthy();
    expect(imap.has(x2)).toBeTruthy();
    expect(imap.size).toEqual(1);
  });
});

describe("groupByRdfType", () => {
  test("finds multiple graphs", () => {});
  test("works", async () => {
    const store = new Store();

    const parser = new Parser();
    await new Promise((res, rej) => {
      parser.parse(
        `PREFIX : <urn:>
        :rs1 a :Foo; :pred1 "obj1" .
        :rs2 a :Foo; :pred1 "obj2" .
        :rs3 a :Bar .
        :rs4 :pred1 "obj4" .
`,
        (error, quad: Quad, prefixes: Prefixes) => {
          if (quad) {
            store.addQuad(quad);
          } else {
            res(undefined);
          }
        }
      );
    });
    const grouped = groupByRdfType(store);
    expect(Array.from(grouped.byType.keys())).toHaveLength(2);
    expect(grouped.byType.get(namedNode("urn:Foo"))).toEqual(
      Immutable.Set([namedNode("urn:rs1"), namedNode("urn:rs2")])
    );
    expect(grouped.byType.get(namedNode("urn:Bar"))).toEqual(
      Immutable.Set([namedNode("urn:rs3")])
    );
    expect(grouped.untypedSubjs).toEqual([namedNode("urn:rs4")]);
  });
});