Completed
Push — master ( 3fb325...f65140 )
by Valentin
01:58
created

tests.ListOperatorTests.pred()   A

Complexity

Conditions 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 1.0008
Metric Value
cc 1
dl 0
loc 11
ccs 9
cts 10
cp 0.9
crap 1.0008
rs 9.4285
1 1
from ppp_datamodel import AbstractNode, Resource, List, Triple, Missing
2 1
from ppp_datamodel import Union, first, Nth, Exists
3
4 1
from unittest import TestCase
5
6 1
class ListOperatorTests(TestCase):
7 1
    def testListNodesType(self):
8 1
        d1 = {"type": "sort", "predicate": {"type": "resource", "value": "foo"},
9
              "list": [{"type": "resource", "value": "George Washington"},
10
                       {"type": "resource", "value": "Theodore Roosevelt"}]}
11 1
        self.assertRaises(TypeError, AbstractNode.from_dict, d1)
12 1
        d2 = {"type": "union",
13
              "list": [{"type": "resource", "value": "George Washington"},
14
                       {"type": "resource", "value": "Theodore Roosevelt"}]}
15 1
        AbstractNode.from_dict(d2)
16 1
        d3 = {"type": "sort", "predicate": {"type": "resource", "value": "foo"},
17
              "list": {"type": "resource", "value": "George Washington"}}
18 1
        AbstractNode.from_dict(d3)
19 1
    def testUnion(self):
20 1
        d1 = {"type": "union",
21
              "list": [{"type": "resource", "value": "George Washington"},
22
                       {"type": "resource", "value": "Theodore Roosevelt"}]}
23 1
        d2 = {"type": "union",
24
              "list": [{"type": "list", "list": [{"type": "resource", "value": "George Washington"}]},
25
                       {"type": "list", "list": [{"type": "resource", "value": "Theodore Roosevelt"}]}]}
26 1
        o1 = AbstractNode.from_dict(d1)
27 1
        o2 = AbstractNode.from_dict(d2)
28 1
        self.assertEqual(o1.as_dict(), d1)
29 1
        self.assertEqual(o2.as_dict(), d2)
30 1
        self.assertEqual(o1.list[0], Resource('George Washington'))
31 1
        o1.as_json()
32
33 1
    def testHash(self):
34 1
        o1 = List([Resource('foo'), Resource('bar')])
35 1
        o2 = List([Resource('foo'), Resource('bar')])
36 1
        h1 = hash(o1)
37 1
        h2 = hash(o2)
38 1
        self.assertEqual(h1, h2)
39 1
        o1.list.append(Resource('baz'))
40 1
        self.assertNotEqual(hash(o1), h2)
41 1
        hash(Union([o1, o2]))
42 1
        o1.as_json()
43
44 1
    def testFirst(self):
45 1
        first(List([Resource('foo'), Resource('bar')]))
46
47 1
    def testTraverseNoException(self):
48 1
        def pred(node):
49 1
            return node
50 1
        Union([List([Resource('foo')]), List([Resource('bar')])]).traverse(pred)
51 1
        first(List([Resource('foo'), Resource('bar')])).traverse(pred)
52 1
        Exists(List([Resource('foo'), Resource('bar')])).traverse(pred)
53 1
        Exists(Resource('foo')).traverse(pred)
54
55 1
    def testTraverseOrder(self):
56 1
        def pred(node):
57 1
            if isinstance(node, Exists):
58 1
                self.assertEqual(node.list, Resource('baz'))
59 1
                return Resource('qux')
60 1
            elif isinstance(node, List):
61 1
                self.assertEqual(node.list, [Resource('bar')])
62 1
                return Resource('baz')
63 1
            elif isinstance(node, Resource):
64 1
                return Resource('bar')
65
            else:
66
                assert False, node
67 1
        self.assertEqual(Exists(Resource('foo')).traverse(pred),
68
                Resource('qux'))
69
70 1
    def testTraverseReturnTriple(self):
71 1
        def pred(node):
72 1
            if isinstance(node, Exists):
73 1
                return Resource('qux')
74 1
            elif isinstance(node, List):
75 1
                return Triple(Resource('baz'), Missing(), Missing())
76 1
            elif isinstance(node, Resource):
77 1
                return Resource('bar')
78
            else:
79
                assert False, node
80 1
        self.assertEqual(Exists(Resource('foo')).traverse(pred),
81
                Resource('qux'))
82