Completed
Pull Request — master (#2423)
by
unknown
01:54
created

DocstyleDefinitionTest   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 101
rs 10
wmc 14

4 Methods

Rating   Name   Duplication   Size   Complexity  
B test_properties() 0 34 1
B test_fail_instantation() 0 24 6
A test_load_external_coalang() 0 13 3
B test_load() 0 22 4
1
import os.path
2
from tempfile import TemporaryDirectory
3
import unittest
4
5
from coalib.bearlib.languages.documentation.DocstyleDefinition import (
6
    DocstyleDefinition)
7
8
9
class DocstyleDefinitionTest(unittest.TestCase):
10
11
    Metadata = DocstyleDefinition.Metadata
12
    dummy_metadata = Metadata(":param ", ":", ":return:")
13
14
    def test_fail_instantation(self):
15
        with self.assertRaises(ValueError):
16
            DocstyleDefinition("PYTHON", "doxyGEN",
17
                               (("##", "#"),), self.dummy_metadata)
18
19
        with self.assertRaises(ValueError):
20
            DocstyleDefinition("WEIRD-PY",
21
                               "schloxygen",
22
                               (("##+", "x", "y", "z"),),
23
                               self.dummy_metadata)
24
25
        with self.assertRaises(ValueError):
26
            DocstyleDefinition("PYTHON",
27
                               "doxygen",
28
                               (("##", "", "#"), ('"""', '"""')),
29
                               self.dummy_metadata)
30
31
        with self.assertRaises(TypeError):
32
            DocstyleDefinition(123, ["doxygen"], (('"""', '"""')),
33
                               self.dummy_metadata)
34
35
        with self.assertRaises(TypeError):
36
            DocstyleDefinition("language", ["doxygen"], (('"""', '"""')),
37
                               "metdata")
38
39
    def test_properties(self):
40
        uut = DocstyleDefinition("C", "doxygen",
41
                                 (("/**", "*", "*/"),), self.dummy_metadata)
42
43
        self.assertEqual(uut.language, "c")
44
        self.assertEqual(uut.docstyle, "doxygen")
45
        self.assertEqual(uut.markers, (("/**", "*", "*/"),))
46
        self.assertEqual(uut.metadata, self.dummy_metadata)
47
48
        uut = DocstyleDefinition("PYTHON", "doxyGEN",
49
                                 [("##", "", "#")], self.dummy_metadata)
50
51
        self.assertEqual(uut.language, "python")
52
        self.assertEqual(uut.docstyle, "doxygen")
53
        self.assertEqual(uut.markers, (("##", "", "#"),))
54
        self.assertEqual(uut.metadata, self.dummy_metadata)
55
56
        uut = DocstyleDefinition("I2C",
57
                                 "my-custom-tool",
58
                                 (["~~", "/~", "/~"], (">!", ">>", ">>")),
59
                                 self.dummy_metadata)
60
61
        self.assertEqual(uut.language, "i2c")
62
        self.assertEqual(uut.docstyle, "my-custom-tool")
63
        self.assertEqual(uut.markers, (("~~", "/~", "/~"), (">!", ">>", ">>")))
64
        self.assertEqual(uut.metadata, self.dummy_metadata)
65
66
        uut = DocstyleDefinition("Cpp", "doxygen",
67
                                 ("~~", "/~", "/~"), self.dummy_metadata)
68
69
        self.assertEqual(uut.language, "cpp")
70
        self.assertEqual(uut.docstyle, "doxygen")
71
        self.assertEqual(uut.markers, (("~~", "/~", "/~"),))
72
        self.assertEqual(uut.metadata, self.dummy_metadata)
73
74
    def test_load(self):
75
        # Test unregistered docstyle.
76
        with self.assertRaises(FileNotFoundError):
77
            next(DocstyleDefinition.load("PYTHON", "INVALID"))
78
79
        # Test unregistered language in existing docstyle.
80
        with self.assertRaises(KeyError):
81
            next(DocstyleDefinition.load("bake-a-cake", "default"))
82
83
        # Test wrong argument type.
84
        with self.assertRaises(TypeError):
85
            next(DocstyleDefinition.load(123, ["list"]))
86
87
        # Test python 3 default configuration and if everything is parsed
88
        # right.
89
        result = DocstyleDefinition.load("PYTHON3", "default")
90
91
        self.assertEqual(result.language, "python3")
92
        self.assertEqual(result.docstyle, "default")
93
        self.assertEqual(result.markers, (('"""', '', '"""'),))
94
95
        self.assertEqual(result.metadata, self.dummy_metadata)
96
97
    def test_load_external_coalang(self):
98
        empty_metadata = self.Metadata('', '', '')
99
        with TemporaryDirectory() as directory:
100
            coalang_file = os.path.join(directory, "custom.coalang")
101
            with open(coalang_file, "w") as file:
102
                file.write("[COOL]\ndoc-markers = @@,@@,@@\n")
103
104
            result = DocstyleDefinition.load(
105
                "cool", "custom", coalang_dir=directory)
106
            self.assertEqual(result.language, "cool")
107
            self.assertEqual(result.docstyle, "custom")
108
            self.assertEqual(result.markers, (('@@', '@@', '@@'),))
109
            self.assertEqual(result.metadata, empty_metadata)
110