from rdflib import BNode, Graph, Namespace
from rdflib.compare import isomorphic
NS = Namespace("http://example.org/")
def test_no_spurious_semicolon():
sparql = """
PREFIX :
CONSTRUCT {
:a :b :c ; :d :e .
} WHERE {}
"""
expected = Graph()
expected.addN(t + (expected,) for t in [
(NS.a, NS.b, NS.c),
(NS.a, NS.d, NS.e),
])
got = Graph().query(sparql).graph
assert isomorphic(got, expected), got.serialize(format="turtle")
def test_one_spurious_semicolon():
sparql = """
PREFIX :
CONSTRUCT {
:a :b :c ; :d :e ; .
} WHERE {}
"""
expected = Graph()
expected.addN(t + (expected,) for t in [
(NS.a, NS.b, NS.c),
(NS.a, NS.d, NS.e),
])
got = Graph().query(sparql).graph
assert isomorphic(got, expected), got.serialize(format="turtle")
def test_one_spurious_semicolon_no_perdiod():
sparql = """
PREFIX :
CONSTRUCT {
:a :b :c ; :d :e ;
} WHERE {}
"""
expected = Graph()
expected.addN(t + (expected,) for t in [
(NS.a, NS.b, NS.c),
(NS.a, NS.d, NS.e),
])
got = Graph().query(sparql).graph
assert isomorphic(got, expected), got.serialize(format="turtle")
def test_two_spurious_semicolons_no_period():
sparql = """
PREFIX :
CONSTRUCT {
:a :b :c ; :d :e ; ;
} WHERE {}
"""
expected = Graph()
expected.addN(t + (expected,) for t in [
(NS.a, NS.b, NS.c),
(NS.a, NS.d, NS.e),
])
got = Graph().query(sparql).graph
assert isomorphic(got, expected), got.serialize(format="turtle")
def test_one_spurious_semicolons_bnode():
sparql = """
PREFIX :
CONSTRUCT {
[ :b :c ; :d :e ; ]
} WHERE {}
"""
expected = Graph()
expected.addN(t + (expected,) for t in [
(BNode("a"), NS.b, NS.c),
(BNode("a"), NS.d, NS.e),
])
got = Graph().query(sparql).graph
assert isomorphic(got, expected), got.serialize(format="turtle")
def test_pathological():
"""
This test did not raise an exception,
but generated a graph completely different from the expected one.
"""
sparql = """
PREFIX :
CONSTRUCT {
:a :b :c ; ;
:d :e ; ;
:f :g ;
} WHERE {}
"""
expected = Graph()
expected.addN(t + (expected,) for t in [
(NS.a, NS.b, NS.c),
(NS.a, NS.d, NS.e),
(NS.a, NS.f, NS.g),
])
got = Graph().query(sparql).graph
assert isomorphic(got, expected), got.serialize(format="turtle")
def test_mixing_spurious_semicolons_and_commas():
sparql = """
PREFIX :
CONSTRUCT {
:a :b :c ; ;
:d :e, :f
} WHERE {}
"""
expected = Graph()
expected.addN(t + (expected,) for t in [
(NS.a, NS.b, NS.c),
(NS.a, NS.d, NS.e),
(NS.a, NS.d, NS.f),
])
got = Graph().query(sparql).graph
assert isomorphic(got, expected), got.serialize(format="turtle")