-
Notifications
You must be signed in to change notification settings - Fork 0
/
doctest.py
61 lines (49 loc) · 2.57 KB
/
doctest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import sys, inspect, re
from os.path import basename, split
## import /nbdoctest.py ## see below
__all__ = ['this_tests']
def this_tests(testedapi):
RegisterTestsperAPI.this_tests(testedapi)
def full_name_with_qualname(klass):
return f'{klass.__module__}.{klass.__qualname__}'
def set_default(obj):
if isinstance(obj, set):
return list(obj)
raise TypeError
## TO DO: next two functions should go out and get imported from /nbdoctest.py#L92
def get_parent_func(lineno, lines):
for idx,l in enumerate(reversed(lines[:lineno])):
if re.match(f'^def test', l):
return (lineno - (idx+1)), l
return None
def get_lines(file):
with open(file, 'r') as f:
return f.readlines()
class RegisterTestsperAPI:
apiTestsMap = dict()
@staticmethod
def this_tests(testedapi):
previous_frame = inspect.currentframe().f_back.f_back
(pathfilename, line_number, test_function_name, lines, index) = inspect.getframeinfo(previous_frame)
## TO DO: these prints go out later
print('\n\n\n\n###############################################################')
print('\n\n############ previous_frame: filename =' + basename(pathfilename))
print('\n############ previous_frame: line_number =' + str(line_number))
print('\n############ previous_frame: test_function_name =' + test_function_name)
print('\n############ previous_frame: lines =' + str(lines))
print('\n############ previous_frame: index =' + str(index))
###
lineno_parentfunc, parent_func = get_parent_func(line_number, get_lines(pathfilename))
print('\n############ previous_frame: parent_func =' + str(parent_func))
print('\n############ previous_frame: lineno_parentfunc =' + str(lineno_parentfunc))
print('###############################################################\n\n\n\n')
###
list_test = [{'file: '+ basename(pathfilename), 'test: ' + test_function_name , 'line: ' + str(lineno_parentfunc)}]
print('\n############ list_test =' + str(list_test))
fq_apiname = full_name_with_qualname(testedapi)
print('\n############ fq_apiname =' + str(fq_apiname))
if(fq_apiname in RegisterTestsperAPI.apiTestsMap):
RegisterTestsperAPI.apiTestsMap[fq_apiname] = RegisterTestsperAPI.apiTestsMap[fq_apiname] + list_test
else:
RegisterTestsperAPI.apiTestsMap[fq_apiname] = list_test
print('\n############ RegisterTestsperAPI.apiTestsMap[fq_apiname] =' + str(RegisterTestsperAPI.apiTestsMap[fq_apiname]))