import 'jest-rdf'; import { literal, namedNode, quad } from '@rdfjs/data-model'; import type { Quad } from 'rdf-js'; import { parseQuads, pushQuad, serializeQuads } from '../../../src/util/QuadUtil'; import { guardedStreamFrom, readableToString } from '../../../src/util/StreamUtil'; describe('QuadUtil', (): void => { describe('#pushQuad', (): void => { it('creates a quad and adds it to the given array.', async(): Promise => { const quads: Quad[] = []; pushQuad(quads, namedNode('sub'), namedNode('pred'), literal('obj')); expect(quads).toEqualRdfQuadArray([ quad(namedNode('sub'), namedNode('pred'), literal('obj')), ]); }); it('creates a quad from strings and adds it to the given array.', async(): Promise => { const quads: Quad[] = []; pushQuad(quads, 'sub', 'pred', 'obj'); expect(quads).toEqualRdfQuadArray([ quad(namedNode('sub'), namedNode('pred'), namedNode('obj')), ]); }); }); describe('#serializeQuads', (): void => { it('converts quads to the requested format.', async(): Promise => { const quads = [ quad( namedNode('pre:sub'), namedNode('pre:pred'), literal('obj'), ) ]; const stream = serializeQuads(quads, 'application/n-triples'); await expect(readableToString(stream)).resolves.toMatch(' "obj" .'); }); }); describe('#parseQuads', (): void => { it('parses quads.', async(): Promise => { const stream = guardedStreamFrom([ ' "obj".' ]); await expect(parseQuads(stream)).resolves.toEqualRdfQuadArray([ quad( namedNode('pre:sub'), namedNode('pre:pred'), literal('obj'), ) ]); }); it('parses quads with the given options.', async(): Promise => { const stream = guardedStreamFrom([ '<> "obj".' ]); await expect(parseQuads(stream, { baseIRI: 'pre:sub' })).resolves.toEqualRdfQuadArray([ quad( namedNode('pre:sub'), namedNode('pre:pred'), literal('obj'), ) ]); }); }); });