Completed
Pull Request — master (#2608)
by
unknown
02:05
created

ResultTest.test_invalid_confidence()   A

Complexity

Conditions 2

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
dl 0
loc 3
rs 10
c 1
b 0
f 0
1
import unittest
2
import json
3
from os.path import abspath
4
5
from coalib.results.Diff import Diff
6
from coalib.results.Result import RESULT_SEVERITY, Result
7
from coalib.results.SourceRange import SourceRange
8
from coalib.output.JSONEncoder import create_json_encoder
9
10
11
class ResultTest(unittest.TestCase):
12
13
    def test_origin(self):
14
        uut = Result("origin", "msg")
15
        self.assertEqual(uut.origin, "origin")
16
17
        uut = Result(self, "msg")
18
        self.assertEqual(uut.origin, "ResultTest")
19
20
        uut = Result(None, "msg")
21
        self.assertEqual(uut.origin, "")
22
23
    def test_invalid_severity(self):
24
        with self.assertRaises(ValueError):
25
            Result("o", "m", severity=-5)
26
27
    def test_invalid_confidence(self):
28
        with self.assertRaises(ValueError):
29
            Result("o", "m", confidence=-1)
30
31
    def test_string_dict(self):
32
        uut = Result(None, "")
33
        output = uut.to_string_dict()
34
        self.assertEqual(output, {"id": str(uut.id),
35
                                  "origin": "",
36
                                  "message": "",
37
                                  "file": "",
38
                                  "line_nr": "",
39
                                  "severity": "NORMAL",
40
                                  "debug_msg": "",
41
                                  "additional_info": "",
42
                                  "confidence": "100"})
43
44
        uut = Result.from_values(origin="origin",
45
                                 message="msg",
46
                                 file="file",
47
                                 line=2,
48
                                 severity=RESULT_SEVERITY.INFO,
49
                                 additional_info="hi!",
50
                                 debug_msg="dbg",
51
                                 confidence=50)
52
        output = uut.to_string_dict()
53
        self.assertEqual(output, {"id": str(uut.id),
54
                                  "origin": "origin",
55
                                  "message": "msg",
56
                                  "file": abspath("file"),
57
                                  "line_nr": "2",
58
                                  "severity": "INFO",
59
                                  "debug_msg": "dbg",
60
                                  "additional_info": "hi!",
61
                                  "confidence": "50"})
62
63
        uut = Result.from_values(origin="o", message="m", file="f", line=5)
64
        output = uut.to_string_dict()
65
        self.assertEqual(output["line_nr"], "5")
66
67
    def test_apply(self):
68
        file_dict = {
69
            "f_a": ["1", "2", "3"],
70
            "f_b": ["1", "2", "3"]
71
        }
72
        expected_file_dict = {
73
            "f_a": ["1", "3_changed"],
74
            "f_b": ["1", "2", "3"]
75
        }
76
        diff = Diff(file_dict['f_a'])
77
        diff.delete_line(2)
78
        diff.change_line(3, "3", "3_changed")
79
80
        uut = Result("origin", "msg", diffs={"f_a": diff})
81
        uut.apply(file_dict)
82
83
        self.assertEqual(file_dict, expected_file_dict)
84
85
    def test_add(self):
86
        file_dict = {
87
            "f_a": ["1", "2", "3"],
88
            "f_b": ["1", "2", "3"],
89
            "f_c": ["1", "2", "3"]
90
        }
91
        expected_file_dict = {
92
            "f_a": ["1", "3_changed"],
93
            "f_b": ["1", "2", "3_changed"],
94
            "f_c": ["1", "2", "3"]
95
        }
96
97
        diff = Diff(file_dict['f_a'])
98
        diff.delete_line(2)
99
        uut1 = Result("origin", "msg", diffs={"f_a": diff})
100
101
        diff = Diff(file_dict['f_a'])
102
        diff.change_line(3, "3", "3_changed")
103
        uut2 = Result("origin", "msg", diffs={"f_a": diff})
104
105
        diff = Diff(file_dict['f_b'])
106
        diff.change_line(3, "3", "3_changed")
107
        uut3 = Result("origin", "msg", diffs={"f_b": diff})
108
109
        uut1 += uut2 + uut3
110
        uut1.apply(file_dict)
111
112
        self.assertEqual(file_dict, expected_file_dict)
113
114
    def test_overlaps(self):
115
        overlapping_range = SourceRange.from_values("file1", 1, 1, 2, 2)
116
        nonoverlapping_range = SourceRange.from_values("file2", 1, 1, 2, 2)
117
        uut = Result.from_values("origin",
118
                                 "message",
119
                                 file="file1",
120
                                 line=1,
121
                                 column=1,
122
                                 end_line=2,
123
                                 end_column=2)
124
        self.assertTrue(uut.overlaps(overlapping_range))
125
        self.assertTrue(uut.overlaps([overlapping_range]))
126
        self.assertFalse(uut.overlaps(nonoverlapping_range))
127
128
    def test_location_repr(self):
129
        result_a = Result(origin="o", message="m")
130
        self.assertEqual(result_a.location_repr(), "the whole project")
131
132
        result_b = Result.from_values("o", "m", file="e")
133
        self.assertEqual(result_b.location_repr(), "'e'")
134
135
        affected_code = (SourceRange.from_values('f'),
136
                         SourceRange.from_values('g'))
137
        result_c = Result("o", "m", affected_code=affected_code)
138
        self.assertEqual(result_c.location_repr(), "'f', 'g'")
139
140
        affected_code = (SourceRange.from_values('f'),
141
                         SourceRange.from_values('f'))
142
        result_d = Result("o", "m", affected_code=affected_code)
143
        self.assertEqual(result_d.location_repr(), "'f'")
144
145
    def test_json_diff(self):
146
        file_dict = {
147
            "f_a": ["1", "2", "3"],
148
            "f_b": ["1", "2", "3"]
149
        }
150
        expected_file = {
151
            "f_a": ["1", "3_changed"],
152
            "f_b": ["1", "2", "3"]
153
        }
154
        diff = Diff(file_dict['f_a'])
155
        diff.delete_line(2)
156
        diff.change_line(3, "3", "3_changed")
157
        uut = Result("origin", "msg", diffs={"f_a": diff}).__json__(True)
158
        self.assertEqual(uut["diffs"]['f_a'].__json__(), "--- \n"
159
                                                         "+++ \n"
160
                                                         "@@ -1,3 +1,2 @@\n"
161
                                                         " 1-2-3+3_changed")
162
        JSONEncoder = create_json_encoder(use_relpath=True)
163
        json_dump = json.dumps(diff, cls=JSONEncoder, sort_keys=True)
164
        self.assertEqual(
165
            json_dump, '"--- \\n+++ \\n@@ -1,3 +1,2 @@\\n 1-2-3+3_changed"')
166