Completed
Pull Request — master (#1404)
by Abdeali
01:56
created

test_custom_regex()   A

Complexity

Conditions 1

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 15
rs 9.4285
1
import unittest
2
3
from bears.tests.BearTestHelper import generate_skip_decorator
4
from bears.c_languages.IndentBear import IndentBear
5
from coalib.bearlib.abstractions.Lint import Lint
6
from coalib.results.SourceRange import SourceRange
7
from coalib.results.RESULT_SEVERITY import RESULT_SEVERITY
8
from coalib.settings.Section import Section
9
10
11
class LintTest(unittest.TestCase):
12
13
    def setUp(self):
14
        section = Section("some_name")
15
        self.uut = Lint(section, None)
16
17
    def test_invalid_output(self):
18
        out = list(self.uut.process_output(
19
            ["1.0|0: Info message\n",
20
             "2.2|1: Normal message\n",
21
             "3.4|2: Major message\n"],
22
            "a/file.py",
23
            ['original_file_lines_placeholder']))
24
        self.assertEqual(len(out), 3)
25
        self.assertEqual(out[0].origin, "Lint")
26
27
        self.assertEqual(out[0].affected_code[0],
28
                         SourceRange.from_values("a/file.py", 1, 0))
29
        self.assertEqual(out[0].severity, RESULT_SEVERITY.INFO)
30
        self.assertEqual(out[0].message, "Info message")
31
32
        self.assertEqual(out[1].affected_code[0],
33
                         SourceRange.from_values("a/file.py", 2, 2))
34
        self.assertEqual(out[1].severity, RESULT_SEVERITY.NORMAL)
35
        self.assertEqual(out[1].message, "Normal message")
36
37
        self.assertEqual(out[2].affected_code[0],
38
                         SourceRange.from_values("a/file.py", 3, 4))
39
        self.assertEqual(out[2].severity, RESULT_SEVERITY.MAJOR)
40
        self.assertEqual(out[2].message, "Major message")
41
42
    def test_custom_regex(self):
43
        self.uut.output_regex = (r'(?P<line>\d+)\.(?P<column>\d+)\|'
44
                                 r'(?P<end_line>\d+)\.(?P<end_column>\d+)\|'
45
                                 r'(?P<severity>\d+): (?P<message>.*)')
46
        self.uut.severity_map = {"I": RESULT_SEVERITY.INFO}
47
        out = list(self.uut.process_output(
48
            ["1.0|2.3|0: Info message\n"],
49
            'a/file.py',
50
            ['original_file_lines_placeholder']))
51
        self.assertEqual(len(out), 1)
52
        self.assertEqual(out[0].affected_code[0].start.line, 1)
53
        self.assertEqual(out[0].affected_code[0].start.column, 0)
54
        self.assertEqual(out[0].affected_code[0].end.line, 2)
55
        self.assertEqual(out[0].affected_code[0].end.column, 3)
56
        self.assertEqual(out[0].severity, RESULT_SEVERITY.INFO)
57
58
    def test_valid_output(self):
59
        out = list(self.uut.process_output(
60
            ["Random line that shouldn't be captured\n",
61
             "*************\n"],
62
            'a/file.py',
63
            ['original_file_lines_placeholder']))
64
        self.assertEqual(len(out), 0)
65
66
    @generate_skip_decorator(IndentBear)
67
    def test_stdin_input(self):
68
        self.uut.executable = IndentBear.executable
69
        self.uut.use_stdin = True
70
        self.uut.use_stderr = False
71
        self.uut.process_output = lambda output, filename, file: output
72
73
        input_file = ["int main(){return 0;}"]
74
        out = self.uut.lint(file=input_file)
75
        self.assertEqual(out,
76
                         ['int\n', 'main ()\n', '{\n', '  return 0;\n', '}\n'])
77
78
    def test_missing_binary(self):
79
        old_binary = Lint.executable
80
        invalid_binary = "invalid_binary_which_doesnt_exist"
81
        Lint.executable = invalid_binary
82
83
        self.assertEqual(Lint.check_prerequisites(),
84
                         "'{}' is not installed.".format(invalid_binary))
85
86
        # "echo" is existent on nearly all platforms.
87
        Lint.executable = "echo"
88
        self.assertTrue(Lint.check_prerequisites())
89
90
        del Lint.executable
91
        self.assertTrue(Lint.check_prerequisites())
92
93
        Lint.executable = old_binary
94