summaryrefslogtreecommitdiff
path: root/test/test_extras/test_infixowl/test_booleanclass.py
blob: 86f7a223e3d65f4024b98f1ab0a1ce5980c71a71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import pytest

from rdflib import OWL, Graph, Namespace
from rdflib.extras.infixowl import BooleanClass, Class, Individual

EXNS = Namespace("http://example.org/vocab/")


@pytest.fixture(scope="function")
def graph():
    g = Graph(identifier=EXNS.context0)
    g.bind("ex", EXNS)
    Individual.factoryGraph = g

    yield g

    del g


@pytest.mark.xfail(reason="assert len(props) == 1, repr(props), so AssertionError: []")
def test_booleanclass_operator_as_none(graph):
    fire = Class(EXNS.Fire)
    water = Class(EXNS.Water)

    id = EXNS.randoboolclass

    BooleanClass(identifier=id, operator=None, members=[fire, water], graph=graph)


@pytest.mark.xfail(reason="This is a previous boolean class description!'(  )")
def test_booleanclass_operator_as_none_with_intersection(graph):
    fire = Class(EXNS.Fire)
    water = Class(EXNS.Water)

    id = EXNS.randoboolclass

    graph.add((id, OWL.intersectionOf, EXNS.SomeClass))

    BooleanClass(identifier=id, operator=None, members=[fire, water], graph=graph)


def test_booleanclass_default_and_operator(graph):
    fire = Class(EXNS.Fire)
    water = Class(EXNS.Water)

    c = BooleanClass(identifier=EXNS.randoboolclass, members=[fire, water])

    assert c is not None

    assert str(c) == "( ex:Fire AND ex:Water )"


def test_booleanclass_with_or_operator(graph):
    fire = Class(EXNS.Fire)
    water = Class(EXNS.Water)

    c = BooleanClass(
        identifier=EXNS.randoboolclass, operator=OWL.unionOf, members=[fire, water]
    )

    assert c is not None

    assert str(c) == "( ex:Fire OR ex:Water )"


@pytest.mark.xfail(
    reason="BooleanClass.getIntersections() - TypeError: 'Callable' object is not callable"
)
def test_getintersections(graph):
    _ = BooleanClass.getIntersections()


@pytest.mark.xfail(
    reason="BooleanClass.getUnions() - TypeError: 'Callable' object is not callable"
)
def test_getunions(graph):
    _ = BooleanClass.getUnions()


def test_booleanclass_copy(graph):
    fire = Class(EXNS.Fire)
    water = Class(EXNS.Water)

    c = BooleanClass(identifier=EXNS.randoboolclass, members=[fire, water])

    d = c.copy()

    assert d is not None

    assert str(d) == "( ex:Fire AND ex:Water )"


def test_booleanclass_serialize(graph):
    fire = Class(EXNS.Fire)
    water = Class(EXNS.Water)

    c = BooleanClass(identifier=EXNS.randoboolclass, members=[fire, water])

    g1 = Graph()
    g1.bind("ex", EXNS, override=False)

    assert len(g1) == 0

    c.serialize(g1)

    assert len(g1) > 0

    assert g1.serialize(format="ttl") == (
        "@prefix ex: <http://example.org/vocab/> .\n"
        "@prefix owl: <http://www.w3.org/2002/07/owl#> .\n"
        "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n"
        "\n"
        "ex:randoboolclass a owl:Class ;\n"
        "    owl:intersectionOf ( ex:Fire ex:Water ) .\n"
        "\n"
        "ex:Fire a owl:Class .\n"
        "\n"
        "ex:Water a owl:Class .\n"
        "\n"
    )