Completed
Pull Request — master (#1625)
by Abdeali
01:38
created

coalib.tests.results.ResultTest.test_add()   B

Complexity

Conditions 1

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 28
rs 8.8571
1
import unittest
2
from os.path import abspath
3
4
from coalib.results.Diff import Diff
5
from coalib.results.Result import RESULT_SEVERITY, Result
6
from coalib.results.SourceRange import SourceRange
7
8
9
class ResultTest(unittest.TestCase):
10
11
    def test_origin(self):
12
        uut = Result("origin", "msg")
13
        self.assertEqual(uut.origin, "origin")
14
15
        uut = Result(self, "msg")
16
        self.assertEqual(uut.origin, "ResultTest")
17
18
        uut = Result(None, "msg")
19
        self.assertEqual(uut.origin, "")
20
21
    def test_invalid_severity(self):
22
        with self.assertRaises(ValueError):
23
            Result("o", "m", severity=-5)
24
25
    def test_string_dict(self):
26
        uut = Result(None, "")
27
        output = uut.to_string_dict()
28
        self.assertEqual(output, {"id": str(uut.id),
29
                                  "origin": "",
30
                                  "message": "",
31
                                  "file": "",
32
                                  "line_nr": "",
33
                                  "severity": "NORMAL",
34
                                  "debug_msg": ""})
35
36
        uut = Result.from_values(origin="origin",
37
                                 message="msg",
38
                                 file="file",
39
                                 line=2,
40
                                 severity=RESULT_SEVERITY.INFO,
41
                                 debug_msg="dbg")
42
        output = uut.to_string_dict()
43
        self.assertEqual(output, {"id": str(uut.id),
44
                                  "origin": "origin",
45
                                  "message": "msg",
46
                                  "file": abspath("file"),
47
                                  "line_nr": "2",
48
                                  "severity": "INFO",
49
                                  "debug_msg": "dbg"})
50
51
        uut = Result.from_values(origin="o", message="m", file="f", line=5)
52
        output = uut.to_string_dict()
53
        self.assertEqual(output["line_nr"], "5")
54
55
    def test_apply(self):
56
        file_dict = {
57
            "f_a": ["1", "2", "3"],
58
            "f_b": ["1", "2", "3"]
59
        }
60
        expected_file_dict = {
61
            "f_a": ["1", "3_changed"],
62
            "f_b": ["1", "2", "3"]
63
        }
64
        diff = Diff(file_dict['f_a'])
65
        diff.delete_line(2)
66
        diff.change_line(3, "3", "3_changed")
67
68
        uut = Result("origin", "msg", diffs={"f_a": diff})
69
        uut.apply(file_dict)
70
71
        self.assertEqual(file_dict, expected_file_dict)
72
73
    def test_add(self):
74
        file_dict = {
75
            "f_a": ["1", "2", "3"],
76
            "f_b": ["1", "2", "3"],
77
            "f_c": ["1", "2", "3"]
78
        }
79
        expected_file_dict = {
80
            "f_a": ["1", "3_changed"],
81
            "f_b": ["1", "2", "3_changed"],
82
            "f_c": ["1", "2", "3"]
83
        }
84
85
        diff = Diff(file_dict['f_a'])
86
        diff.delete_line(2)
87
        uut1 = Result("origin", "msg", diffs={"f_a": diff})
88
89
        diff = Diff(file_dict['f_a'])
90
        diff.change_line(3, "3", "3_changed")
91
        uut2 = Result("origin", "msg", diffs={"f_a": diff})
92
93
        diff = Diff(file_dict['f_b'])
94
        diff.change_line(3, "3", "3_changed")
95
        uut3 = Result("origin", "msg", diffs={"f_b": diff})
96
97
        uut1 += uut2 + uut3
98
        uut1.apply(file_dict)
99
100
        self.assertEqual(file_dict, expected_file_dict)
101
102
    def test_overlaps(self):
103
        overlapping_range = SourceRange.from_values("file1", 1, 1, 2, 2)
104
        nonoverlapping_range = SourceRange.from_values("file2", 1, 1, 2, 2)
105
        uut = Result.from_values("origin",
106
                                 "message",
107
                                 file="file1",
108
                                 line=1,
109
                                 column=1,
110
                                 end_line=2,
111
                                 end_column=2)
112
        self.assertTrue(uut.overlaps(overlapping_range))
113
        self.assertTrue(uut.overlaps([overlapping_range]))
114
        self.assertFalse(uut.overlaps(nonoverlapping_range))
115
116
    def test_location_repr(self):
117
        result_a = Result(origin="o", message="m")
118
        self.assertEqual(result_a.location_repr(), "the whole project")
119
120
        result_b = Result.from_values("o", "m", file="e")
121
        self.assertEqual(result_b.location_repr(), "'e'")
122
123
        affected_code = (SourceRange.from_values('f'),
124
                         SourceRange.from_values('g'))
125
        result_c = Result("o", "m", affected_code=affected_code)
126
        self.assertEqual(result_c.location_repr(), "'f', 'g'")
127
128
        affected_code = (SourceRange.from_values('f'),
129
                         SourceRange.from_values('f'))
130
        result_d = Result("o", "m", affected_code=affected_code)
131
        self.assertEqual(result_d.location_repr(), "'f'")
132