Passed
Push — master ( 958bc0...1938a8 )
by Jan
05:51 queued 02:21
created

test_oval_tree.test_oval_node   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 150
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 85
dl 0
loc 150
rs 10
c 0
b 0
f 0
wmc 14

13 Functions

Rating   Name   Duplication   Size   Complexity  
A test_build_and_convert_json_tree() 0 5 1
A test_node_operator_negate_node_true() 0 8 1
A test_node_operator_negate_node_false() 0 8 1
A test_tree_repr() 0 2 1
A test_node_value_negate_node_true() 0 8 1
A test_add_to_tree() 0 12 1
A test_bad_tree() 0 12 2
A test_change_value_tree() 0 34 1
A test_bad_find_node_with_id() 0 3 1
A test_uppercase_tree() 0 3 1
A test_find_node_with_id() 0 3 1
A test_node_value_negate_node_false() 0 8 1
A test_eval_big_tree() 0 2 1
1
import pytest
2
3
from oval_graph.oval_tree.builder import Builder
4
from oval_graph.oval_tree.converter import Converter
5
from oval_graph.oval_tree.oval_node import OvalNode
6
7
from .get_tree import GetTree
8
9
BAD_VALUE_ERROR_PATTERN = (
10
    r'Wrong value of (negation|node_type|argument) (argument|value)(!| for (value|operator) node!)'
11
)
12
13
14
@pytest.mark.parametrize("get_tree, pattern", [
15
    (GetTree.bad_tree, "cannot contain any child"),
16
    (GetTree.tree_only_and, "must have a child"),
17
    (GetTree.tree_only_or, "must have a child"),
18
    (GetTree.tree_with_bad_type, BAD_VALUE_ERROR_PATTERN),
19
    (GetTree.tree_with_bad_value_of_operator, BAD_VALUE_ERROR_PATTERN),
20
    (GetTree.tree_with_bad_value_of_value, BAD_VALUE_ERROR_PATTERN),
21
    (GetTree.tree_with_bad_value_of_negation, BAD_VALUE_ERROR_PATTERN),
22
])
23
def test_bad_tree(get_tree, pattern):
24
    with pytest.raises(Exception, match=pattern):
25
        assert get_tree()
26
27
28
# normal trees
29
30
31
def test_uppercase_tree():
32
    tree = GetTree.uppercase_tree()
33
    assert tree.find_node_with_id(3).value == 'notappl'
34
35
36
def test_eval_big_tree():
37
    assert GetTree.big_oval_tree().evaluate_tree() == 'false'
38
39
40
# fix 11, 12 ids
41
@pytest.mark.parametrize("node_id", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
42
def test_find_node_with_id(node_id):
43
    assert GetTree.big_oval_tree().find_node_with_id(node_id).node_id == node_id
44
45
46
@pytest.mark.parametrize("node_id", [0, 111, 212, 432, 342, -1])
47
def test_bad_find_node_with_id(node_id):
48
    assert GetTree.big_oval_tree().find_node_with_id(node_id) is None
49
50
51
def test_build_and_convert_json_tree():
52
    test_data_src = 'test_data/bigOvalTree.json'
53
    dict_of_tree = GetTree.json_of_tree(test_data_src)
54
    treedict_of_tree = Builder.dict_to_oval_tree(dict_of_tree)
55
    assert Converter(treedict_of_tree).to_dict() == dict_of_tree
56
57
58
def test_tree_repr():
59
    assert str(GetTree.tree_false()) == "and"
60
61
62
def test_add_to_tree():
63
    test_data_src = 'test_data/add_to_tree.json'
64
    dict_of_tree = GetTree.json_of_tree(test_data_src)
65
66
    tree = GetTree.tree_false()
67
    tree_node = OvalNode(
68
        node_id=3,
69
        node_type='value',
70
        value="true",
71
    )
72
    tree.add_child_to_node(1, tree_node)
73
    assert Converter(tree).to_dict() == dict_of_tree
74
75
76
@pytest.mark.parametrize("node_id, new_value, expect_evaluation", [
77
    (2, "true", "false"),
78
    (2, "false", "false"),
79
    (2, "error", "false"),
80
    (2, "noteval", "false"),
81
    (2, "notappl", "false"),
82
    (3, "true", "true"),
83
    (3, "false", "false"),
84
    (3, "error", "error"),
85
    (3, "noteval", "noteval"),
86
    (3, "notappl", "true"),
87
    (5, "true", "false"),
88
    (5, "false", "false"),
89
    (5, "error", "false"),
90
    (5, "noteval", "false"),
91
    (5, "notappl", "false"),
92
    (6, "true", "false"),
93
    (6, "false", "false"),
94
    (6, "error", "false"),
95
    (6, "noteval", "false"),
96
    (6, "notappl", "false"),
97
])
98
def test_change_value_tree(node_id, new_value, expect_evaluation):
99
    """ Created tree
100
        and
101
        /|\
102
       t f or
103
          / \
104
         f   t
105
    """
106
    tree = GetTree.simple_tree()
107
    assert tree.evaluate_tree() == "false"
108
    assert tree.change_value_of_node(node_id, new_value) is not None
109
    assert tree.evaluate_tree() == expect_evaluation
110
111
112
def test_node_operator_negate_node_false():
113
    """
114
        !and
115
         |
116
         f
117
    """
118
    tree = GetTree.negated_operator_node_false()
119
    assert tree.evaluate_tree() == "true"
120
121
122
def test_node_operator_negate_node_true():
123
    """
124
        !and
125
         |
126
         t
127
    """
128
    tree = GetTree.negated_operator_node_true()
129
    assert tree.evaluate_tree() == "false"
130
131
132
def test_node_value_negate_node_false():
133
    """
134
        and
135
         |
136
         !f
137
    """
138
    tree = GetTree.negate_value_node_false()
139
    assert tree.evaluate_tree() == "true"
140
141
142
def test_node_value_negate_node_true():
143
    """
144
        and
145
         |
146
         !t
147
    """
148
    tree = GetTree.negate_value_node_true()
149
    assert tree.evaluate_tree() == "false"
150