defmodule RDF.NQuads.EncoderTest do use ExUnit.Case, async: false alias RDF.NQuads doctest NQuads.Encoder alias RDF.{Dataset, Graph} alias RDF.NS.XSD import RDF.Sigils use RDF.Vocabulary.Namespace defvocab EX, base_iri: "http://example.org/#", terms: [], strict: false describe "serializing a graph" do test "an empty graph is serialized to an empty string" do assert NQuads.Encoder.encode!(Graph.new) == "" end test "statements with IRIs only" do assert NQuads.Encoder.encode!(Graph.new [ {EX.S1, EX.p1, EX.O1}, {EX.S1, EX.p1, EX.O2}, {EX.S1, EX.p2, EX.O3}, {EX.S2, EX.p3, EX.O4}, ]) == """ . . . . """ end test "statements with literals" do assert NQuads.Encoder.encode!(Graph.new [ {EX.S1, EX.p1, ~L"foo"}, {EX.S1, EX.p1, ~L"foo"en}, {EX.S1, EX.p2, 42}, {EX.S2, EX.p3, RDF.literal("strange things", datatype: EX.custom)}, ]) == """ "foo"@en . "foo" . "42"^^<#{XSD.integer}> . "strange things"^^<#{EX.custom}> . """ end test "statements with blank nodes" do assert NQuads.Encoder.encode!(Graph.new [ {EX.S1, EX.p1, RDF.bnode(1)}, {EX.S1, EX.p1, RDF.bnode("foo")}, {EX.S1, EX.p1, RDF.bnode(:bar)}, ]) == """ _:1 . _:bar . _:foo . """ end end describe "serializing a dataset" do test "an empty dataset is serialized to an empty string" do assert NQuads.Encoder.encode!(Dataset.new) == "" end test "statements with IRIs only" do assert NQuads.Encoder.encode!(Dataset.new [ {EX.S1, EX.p1, EX.O1, EX.G}, {EX.S1, EX.p1, EX.O2, EX.G}, {EX.S1, EX.p2, EX.O3, EX.G}, {EX.S2, EX.p3, EX.O4}, ]) == """ . . . . """ end test "statements with literals" do assert NQuads.Encoder.encode!(Dataset.new [ {EX.S1, EX.p1, ~L"foo", EX.G1}, {EX.S1, EX.p1, ~L"foo"en, EX.G2}, {EX.S1, EX.p2, 42, EX.G3}, {EX.S2, EX.p3, RDF.literal("strange things", datatype: EX.custom), EX.G3}, ]) == """ "foo" . "foo"@en . "42"^^<#{XSD.integer}> . "strange things"^^<#{EX.custom}> . """ end test "statements with blank nodes" do assert NQuads.Encoder.encode!(Dataset.new [ {EX.S1, EX.p1, RDF.bnode(1)}, {EX.S1, EX.p1, RDF.bnode("foo"), EX.G}, {EX.S1, EX.p1, RDF.bnode(:bar)}, ]) == """ _:1 . _:bar . _:foo . """ end end end