Passed
Push — master ( b5a080...903f35 )
by Jan
06:45 queued 01:03
created

test_oval_tree.test_oval_node   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 149
Duplicated Lines 0 %

Importance

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

13 Methods

Rating   Name   Duplication   Size   Complexity  
A tests_oval_graph.test_oval_tree.test_oval_node.test_eval_big_tree() 0 2 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_bad_tree() 0 12 2
A tests_oval_graph.test_oval_tree.test_oval_node.test_uppercase_tree() 0 3 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_node_operator_negate_node_true() 0 8 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_node_value_negate_node_false() 0 8 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_add_to_tree() 0 12 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_change_value_tree() 0 34 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_find_node_with_id() 0 3 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_node_operator_negate_node_false() 0 8 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_bad_find_node_with_id() 0 3 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_node_value_negate_node_true() 0 8 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_tree_repr() 0 2 1
A tests_oval_graph.test_oval_tree.test_oval_node.test_build_and_convert_json_tree() 0 5 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
@pytest.mark.parametrize("node_id", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
41
def test_find_node_with_id(node_id):
42
    assert GetTree.big_oval_tree().find_node_with_id(node_id).node_id == node_id
43
44
45
@pytest.mark.parametrize("node_id", [0, 111, 212, 432, 342, -1])
46
def test_bad_find_node_with_id(node_id):
47
    assert GetTree.big_oval_tree().find_node_with_id(node_id) is None
48
49
50
def test_build_and_convert_json_tree():
51
    test_data_src = 'test_data/bigOvalTree.json'
52
    dict_of_tree = GetTree.json_of_tree(test_data_src)
53
    treedict_of_tree = Builder.dict_to_oval_tree(dict_of_tree)
54
    assert Converter(treedict_of_tree).to_dict() == dict_of_tree
55
56
57
def test_tree_repr():
58
    assert str(GetTree.tree_false()) == "and"
59
60
61
def test_add_to_tree():
62
    test_data_src = 'test_data/add_to_tree.json'
63
    dict_of_tree = GetTree.json_of_tree(test_data_src)
64
65
    tree = GetTree.tree_false()
66
    tree_node = OvalNode(
67
        node_id=3,
68
        node_type='value',
69
        value="true",
70
    )
71
    tree.add_child_to_node(1, tree_node)
72
    assert Converter(tree).to_dict() == dict_of_tree
73
74
75
@pytest.mark.parametrize("node_id, new_value, expect_evaluation", [
76
    (2, "true", "false"),
77
    (2, "false", "false"),
78
    (2, "error", "false"),
79
    (2, "noteval", "false"),
80
    (2, "notappl", "false"),
81
    (3, "true", "true"),
82
    (3, "false", "false"),
83
    (3, "error", "error"),
84
    (3, "noteval", "noteval"),
85
    (3, "notappl", "true"),
86
    (5, "true", "false"),
87
    (5, "false", "false"),
88
    (5, "error", "false"),
89
    (5, "noteval", "false"),
90
    (5, "notappl", "false"),
91
    (6, "true", "false"),
92
    (6, "false", "false"),
93
    (6, "error", "false"),
94
    (6, "noteval", "false"),
95
    (6, "notappl", "false"),
96
])
97
def test_change_value_tree(node_id, new_value, expect_evaluation):
98
    """ Created tree
99
        and
100
        /|\
101
       t f or
102
          / \
103
         f   t
104
    """
105
    tree = GetTree.simple_tree()
106
    assert tree.evaluate_tree() == "false"
107
    assert tree.change_value_of_node(node_id, new_value) is not None
108
    assert tree.evaluate_tree() == expect_evaluation
109
110
111
def test_node_operator_negate_node_false():
112
    """
113
        !and
114
         |
115
         f
116
    """
117
    tree = GetTree.negated_operator_node_false()
118
    assert tree.evaluate_tree() == "true"
119
120
121
def test_node_operator_negate_node_true():
122
    """
123
        !and
124
         |
125
         t
126
    """
127
    tree = GetTree.negated_operator_node_true()
128
    assert tree.evaluate_tree() == "false"
129
130
131
def test_node_value_negate_node_false():
132
    """
133
        and
134
         |
135
         !f
136
    """
137
    tree = GetTree.negate_value_node_false()
138
    assert tree.evaluate_tree() == "true"
139
140
141
def test_node_value_negate_node_true():
142
    """
143
        and
144
         |
145
         !t
146
    """
147
    tree = GetTree.negate_value_node_true()
148
    assert tree.evaluate_tree() == "false"
149