Completed
Pull Request — master (#2615)
by Mischa
01:59
created

test_get_available_definitions_on_wrong_files()   A

Complexity

Conditions 1

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 14
rs 9.4285
1
import os.path
2
from tempfile import TemporaryDirectory
3
import unittest
4
from unittest.mock import patch
5
6
from coalib.bearlib.languages.documentation.DocstyleDefinition import (
7
    DocstyleDefinition)
8
9
10
class DocstyleDefinitionTest(unittest.TestCase):
11
12
    Metadata = DocstyleDefinition.Metadata
13
    dummy_metadata = Metadata(":param ", ":", ":return:")
14
15
    def test_fail_instantation(self):
16
        with self.assertRaises(ValueError):
17
            DocstyleDefinition("PYTHON", "doxyGEN",
18
                               (("##", "#"),), self.dummy_metadata)
19
20
        with self.assertRaises(ValueError):
21
            DocstyleDefinition("WEIRD-PY",
22
                               "schloxygen",
23
                               (("##+", "x", "y", "z"),),
24
                               self.dummy_metadata)
25
26
        with self.assertRaises(ValueError):
27
            DocstyleDefinition("PYTHON",
28
                               "doxygen",
29
                               (("##", "", "#"), ('"""', '"""')),
30
                               self.dummy_metadata)
31
32
        with self.assertRaises(TypeError):
33
            DocstyleDefinition(123, ["doxygen"], (('"""', '"""')),
34
                               self.dummy_metadata)
35
36
        with self.assertRaises(TypeError):
37
            DocstyleDefinition("language", ["doxygen"], (('"""', '"""')),
38
                               "metdata")
39
40
    def test_properties(self):
41
        uut = DocstyleDefinition("C", "doxygen",
42
                                 (("/**", "*", "*/"),), self.dummy_metadata)
43
44
        self.assertEqual(uut.language, "c")
45
        self.assertEqual(uut.docstyle, "doxygen")
46
        self.assertEqual(uut.markers, (("/**", "*", "*/"),))
47
        self.assertEqual(uut.metadata, self.dummy_metadata)
48
49
        uut = DocstyleDefinition("PYTHON", "doxyGEN",
50
                                 [("##", "", "#")], self.dummy_metadata)
51
52
        self.assertEqual(uut.language, "python")
53
        self.assertEqual(uut.docstyle, "doxygen")
54
        self.assertEqual(uut.markers, (("##", "", "#"),))
55
        self.assertEqual(uut.metadata, self.dummy_metadata)
56
57
        uut = DocstyleDefinition("I2C",
58
                                 "my-custom-tool",
59
                                 (["~~", "/~", "/~"], (">!", ">>", ">>")),
60
                                 self.dummy_metadata)
61
62
        self.assertEqual(uut.language, "i2c")
63
        self.assertEqual(uut.docstyle, "my-custom-tool")
64
        self.assertEqual(uut.markers, (("~~", "/~", "/~"), (">!", ">>", ">>")))
65
        self.assertEqual(uut.metadata, self.dummy_metadata)
66
67
        uut = DocstyleDefinition("Cpp", "doxygen",
68
                                 ("~~", "/~", "/~"), self.dummy_metadata)
69
70
        self.assertEqual(uut.language, "cpp")
71
        self.assertEqual(uut.docstyle, "doxygen")
72
        self.assertEqual(uut.markers, (("~~", "/~", "/~"),))
73
        self.assertEqual(uut.metadata, self.dummy_metadata)
74
75
    def test_load(self):
76
        # Test unregistered docstyle.
77
        with self.assertRaises(FileNotFoundError):
78
            next(DocstyleDefinition.load("PYTHON", "INVALID"))
79
80
        # Test unregistered language in existing docstyle.
81
        with self.assertRaises(KeyError):
82
            next(DocstyleDefinition.load("bake-a-cake", "default"))
83
84
        # Test wrong argument type.
85
        with self.assertRaises(TypeError):
86
            next(DocstyleDefinition.load(123, ["list"]))
87
88
        # Test python 3 default configuration and if everything is parsed
89
        # right.
90
        result = DocstyleDefinition.load("PYTHON3", "default")
91
92
        self.assertEqual(result.language, "python3")
93
        self.assertEqual(result.docstyle, "default")
94
        self.assertEqual(result.markers, (('"""', '', '"""'),))
95
96
        self.assertEqual(result.metadata, self.dummy_metadata)
97
98
    def test_get_available_definitions(self):
99
        # Test if the basic supported docstyle-language pairs exist.
100
        expected = {('default', 'python'),
101
                    ('default', 'python3'),
102
                    ('default', 'java'),
103
                    ('doxygen', 'c'),
104
                    ('doxygen', 'cpp'),
105
                    ('doxygen', 'cs'),
106
                    ('doxygen', 'fortran'),
107
                    ('doxygen', 'java'),
108
                    ('doxygen', 'python'),
109
                    ('doxygen', 'python3'),
110
                    ('doxygen', 'tcl'),
111
                    ('doxygen', 'vhdl'),
112
                    ('doxygen', 'php'),
113
                    ('doxygen', 'objective-c')}
114
115
        real = set(DocstyleDefinition.get_available_definitions())
116
117
        self.assertTrue(expected.issubset(real))
118
119
    @patch('coalib.bearlib.languages.documentation.DocstyleDefinition.iglob')
120
    @patch('coalib.bearlib.languages.documentation.DocstyleDefinition'
121
           '.ConfParser')
122
    def test_get_available_definitions_on_wrong_files(self,
123
                                                      confparser_mock,
124
                                                      iglob_mock):
125
        # Test the case when a coalang was provided with uppercase letters.
126
        confparser_instance_mock = confparser_mock.return_value
127
        confparser_instance_mock.parse.return_value = ["X"]
128
        iglob_mock.return_value = ['some/CUSTOMSTYLE.coalang',
129
                                   'SOME/xlang.coalang']
130
131
        self.assertEqual(list(DocstyleDefinition.get_available_definitions()),
132
                         [('xlang', 'x')])
133
134
    def test_load_external_coalang(self):
135
        empty_metadata = self.Metadata('', '', '')
136
        with TemporaryDirectory() as directory:
137
            coalang_file = os.path.join(directory, "custom.coalang")
138
            with open(coalang_file, "w") as file:
139
                file.write("[COOL]\ndoc-markers = @@,@@,@@\n")
140
141
            result = DocstyleDefinition.load(
142
                "cool", "custom", coalang_dir=directory)
143
            self.assertEqual(result.language, "cool")
144
            self.assertEqual(result.docstyle, "custom")
145
            self.assertEqual(result.markers, (('@@', '@@', '@@'),))
146
            self.assertEqual(result.metadata, empty_metadata)
147