Files @ 4074dbec5c46
Branch filter:

Location: light9/light9/web/patch.test.ts

drewp@bigasterisk.com
logging
import { assert, describe, expect, it } from "vitest";

import { Quad, NamedNode } from "n3";
import { Patch, QuadPattern } from "./patch";
import * as N3 from "n3";

const node1 = new NamedNode("http://example.com/node1");
const node2 = new NamedNode("http://example.com/node2");
const node3 = new NamedNode("http://example.com/node3");

function QP(
  subject: N3.Quad_Subject | null, //
  predicate: N3.Quad_Predicate | null,
  object: N3.Quad_Object | null,
  graph: N3.Quad_Graph | null
): QuadPattern {
  return { subject, predicate, object, graph };
}

describe("Patch.matches", () => {
  it("matches any quads against an open pattern", () => {
    const quad1 = new Quad(node1, node2, node3);
    const quad2 = new Quad(node1, node2, node3);
    const quad3 = new Quad(node1, node2, node3);

    const pattern = QP(null, null, null, null);

    const p = new Patch([quad1, quad2], [quad3]);

    assert.isTrue(p.matches(pattern));
  });
  it("doesn't match when the patch is empty", () => {
    const p = new Patch([], []);
    assert.isFalse(p.matches(QP(null, null, null, null)));
  });
  it("compares terms correctly", () => {
    assert.isTrue(new Patch([new Quad(node1, node2, node3)], []).matches(QP(node1, null, null, null)));
    assert.isFalse(new Patch([new Quad(node1, node2, node3)], []).matches(QP(node2, null, null, null)));
  });
  it("matches on just one set term", () => {
    assert.isTrue(new Patch([new Quad(node1, node2, node3)], []).matches(QP(node1, null, null, null)));
    assert.isTrue(new Patch([new Quad(node1, node2, node3)], []).matches(QP(null, node2, null, null)));
    assert.isTrue(new Patch([new Quad(node1, node2, node3)], []).matches(QP(null, null, node3, null)));
  });
});