44 DocstyleDefinition )
55from coalib .bearlib .languages .documentation .DocumentationComment import (
66 DocumentationComment )
7- from coalib .bearlib .languages .documentation .DocumentationExtraction import (
8- extract_documentation )
7+ from coalib .bearlib .languages .documentation .DocBaseClass import (
8+ DocBaseClass )
99from tests .bearlib .languages .documentation .TestUtils import (
1010 load_testdata )
1111from coalib .results .TextPosition import TextPosition
12+ from coalib .results .TextRange import TextRange
13+ from coalib .results .Diff import Diff
1214
1315
14- class DocumentationExtractionTest (unittest .TestCase ):
16+ class DocBaseClassTest (unittest .TestCase ):
17+
18+ def test_DocBaseClass_extraction_invalid_input (self ):
1519
16- def test_extract_documentation_invalid_input (self ):
1720 with self .assertRaises (FileNotFoundError ):
18- tuple (extract_documentation ('' , 'PYTHON' , 'INVALID' ))
21+ tuple (DocBaseClass . extract ('' , 'PYTHON' , 'INVALID' ))
1922
20- def test_extract_documentation_C (self ):
23+ def test_DocBaseClass_extraction_C (self ):
2124 data = load_testdata ('data.c' )
2225
2326 # No built-in documentation for C.
2427 with self .assertRaises (KeyError ):
25- tuple (extract_documentation (data , 'C' , 'default' ))
28+ tuple (DocBaseClass . extract (data , 'C' , 'default' ))
2629
2730 docstyle_C_doxygen = DocstyleDefinition .load ('C' , 'doxygen' )
2831
@@ -59,31 +62,31 @@ def test_extract_documentation_C(self):
5962 TextPosition (28 , 1 )))
6063
6164 self .assertEqual (tuple (
62- extract_documentation (data , 'C' , 'doxygen' )),
65+ DocBaseClass . extract (data , 'C' , 'doxygen' )),
6366 expected_results )
6467
65- def test_extract_documentation_C_2 (self ):
68+ def test_DocBaseClass_extraction_C_2 (self ):
6669 data = ['/** my main description\n ' , ' * continues here */' ]
6770
6871 docstyle_C_doxygen = DocstyleDefinition .load ('C' , 'doxygen' )
6972
7073 self .assertEqual (
71- list (extract_documentation (data , 'C' , 'doxygen' )),
74+ list (DocBaseClass . extract (data , 'C' , 'doxygen' )),
7275 [DocumentationComment (' my main description\n continues here' ,
7376 docstyle_C_doxygen , '' ,
7477 docstyle_C_doxygen .markers [0 ],
7578 TextPosition (1 , 1 ))])
7679
77- def test_extract_documentation_CPP (self ):
80+ def test_DocBaseClass_extraction_CPP (self ):
7881 data = load_testdata ('data.cpp' )
7982
8083 # No built-in documentation for C++.
8184 with self .assertRaises (KeyError ):
82- tuple (extract_documentation (data , 'CPP' , 'default' ))
85+ tuple (DocBaseClass . extract (data , 'CPP' , 'default' ))
8386
8487 docstyle_CPP_doxygen = DocstyleDefinition .load ('CPP' , 'doxygen' )
8588
86- self .assertEqual (tuple (extract_documentation (data , 'CPP' , 'doxygen' )),
89+ self .assertEqual (tuple (DocBaseClass . extract (data , 'CPP' , 'doxygen' )),
8790 (DocumentationComment (
8891 ('\n '
8992 ' This is the main function.\n '
@@ -118,20 +121,20 @@ def test_extract_documentation_CPP(self):
118121 docstyle_CPP_doxygen .markers [4 ],
119122 TextPosition (32 , 1 ))))
120123
121- def test_extract_documentation_CPP_2 (self ):
124+ def test_DocBaseClass_CPP_2 (self ):
122125 data = load_testdata ('data2.cpp' )
123126
124127 docstyle_CPP_doxygen = DocstyleDefinition .load ('CPP' , 'doxygen' )
125128
126- self .assertEqual (tuple (extract_documentation (data , 'CPP' , 'doxygen' )),
129+ self .assertEqual (tuple (DocBaseClass . extract (data , 'CPP' , 'doxygen' )),
127130 (DocumentationComment (
128131 ('module comment\n '
129132 ' hello world\n ' ),
130133 docstyle_CPP_doxygen , '' ,
131134 docstyle_CPP_doxygen .markers [0 ],
132135 TextPosition (1 , 1 )),))
133136
134- def test_extract_documentation_PYTHON3 (self ):
137+ def test_DocBaseClass_PYTHON3 (self ):
135138 data = load_testdata ('data.py' )
136139 docstyle_PYTHON3_default = DocstyleDefinition .load ('PYTHON3' ,
137140 'default' )
@@ -192,9 +195,8 @@ def test_extract_documentation_PYTHON3(self):
192195 )
193196
194197 self .assertEqual (
195- tuple (extract_documentation (data , 'PYTHON3' , 'default' )),
198+ tuple (DocBaseClass . extract (data , 'PYTHON3' , 'default' )),
196199 expected )
197-
198200 # Change only the docstyle in expected results.
199201 expected = list (DocumentationComment (r .documentation ,
200202 docstyle_PYTHON3_doxygen ,
@@ -214,37 +216,37 @@ def test_extract_documentation_PYTHON3(self):
214216 TextPosition (30 , 1 )))
215217
216218 self .assertEqual (
217- list (extract_documentation (data , 'PYTHON3' , 'doxygen' )),
219+ list (DocBaseClass . extract (data , 'PYTHON3' , 'doxygen' )),
218220 expected )
219221
220- def test_extract_documentation_PYTHON3_2 (self ):
222+ def test_DocBaseClass_extraction_PYTHON3_2 (self ):
221223 data = ['\n ' , '""" documentation in single line """\n ' , 'print(1)\n ' ]
222224
223225 docstyle_PYTHON3_default = DocstyleDefinition .load ('PYTHON3' ,
224226 'default' )
225227
226228 self .assertEqual (
227- list (extract_documentation (data , 'PYTHON3' , 'default' )),
229+ list (DocBaseClass . extract (data , 'PYTHON3' , 'default' )),
228230 [DocumentationComment (' documentation in single line ' ,
229231 docstyle_PYTHON3_default , '' ,
230232 docstyle_PYTHON3_default .markers [0 ],
231233 TextPosition (2 , 1 ))])
232234
233- def test_extract_documentation_PYTHON3_3 (self ):
235+ def test_DocBaseClass_extraction_PYTHON3_3 (self ):
234236 data = ['## documentation in single line without return at end.' ]
235237
236238 docstyle_PYTHON3_doxygen = DocstyleDefinition .load ('PYTHON3' ,
237239 'doxygen' )
238240
239241 self .assertEqual (
240- list (extract_documentation (data , 'PYTHON3' , 'doxygen' )),
242+ list (DocBaseClass . extract (data , 'PYTHON3' , 'doxygen' )),
241243 [DocumentationComment (' documentation in single line without '
242244 'return at end.' ,
243245 docstyle_PYTHON3_doxygen , '' ,
244246 docstyle_PYTHON3_doxygen .markers [1 ],
245247 TextPosition (1 , 1 ))])
246248
247- def test_extract_documentation_PYTHON3_4 (self ):
249+ def test_DocBaseClass_extraction_PYTHON3_4 (self ):
248250 data = ['\n ' , 'triple_quote_string_test = """\n ' ,
249251 'This is not a docstring\n ' , '"""\n ' ]
250252
@@ -254,5 +256,35 @@ def test_extract_documentation_PYTHON3_4(self):
254256 # Nothing is yielded as triple quote string literals are being
255257 # ignored.
256258 self .assertEqual (
257- list (extract_documentation (data , 'PYTHON3' , 'default' )),
259+ list (DocBaseClass . extract (data , 'PYTHON3' , 'default' )),
258260 [])
261+
262+ def test_generate_diff (self ):
263+ data_old = ['\n ' , '""" documentation in single line """\n ' ]
264+ for doc_comment in DocBaseClass .extract (
265+ data_old , 'PYTHON3' , 'default' ):
266+ old_doc_comment = doc_comment
267+
268+ old_range = TextRange .from_values (
269+ old_doc_comment .range .start .line ,
270+ 1 ,
271+ old_doc_comment .range .end .line ,
272+ old_doc_comment .range .end .column )
273+
274+ data_new = ['\n ' , '"""\n documentation in single line\n """\n ' ]
275+ for doc_comment in DocBaseClass .extract (
276+ data_new , 'PYTHON3' , 'default' ):
277+ new_doc_comment = doc_comment
278+
279+ diff = DocBaseClass .generate_diff (
280+ data_old , old_doc_comment , new_doc_comment )
281+
282+ diff_expected = Diff (data_old )
283+ diff_expected .replace (old_range , new_doc_comment .assemble ())
284+
285+ self .assertEqual (diff , diff_expected )
286+
287+ def test_DocBaseClass_process_documentation_not_implemented (self ):
288+ test_object = DocBaseClass ()
289+ self .assertRaises (NotImplementedError ,
290+ test_object .process_documentation )
0 commit comments