Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork252
Expand file tree
/
Copy pathtest_preprocess.py
More file actions
107 lines (86 loc) · 3.33 KB
/
test_preprocess.py
File metadata and controls
107 lines (86 loc) · 3.33 KB
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
importdifflib
importinspect
importre
importunittest
fromcodeimportcompile_commandascompiler
fromcodeopimportCommandCompiler
fromfunctoolsimportpartial
frombpython.curtsiesfrontend.interpreterimportcode_finished_will_parse
frombpython.curtsiesfrontend.preprocessimportpreprocess
frombpython.test.fodderimportoriginal,processed
preproc=partial(preprocess,compiler=CommandCompiler())
defget_fodder_source(test_name):
pattern=rf"#StartTest-{test_name}\n(.*?)#EndTest"
orig,xformed= (
re.search(pattern,inspect.getsource(module),re.DOTALL)
formodulein [original,processed]
)
ifnotorig:
raiseValueError(
f"Can't locate test{test_name} in original fodder file"
)
ifnotxformed:
raiseValueError(
f"Can't locate test{test_name} in processed fodder file"
)
returnorig.group(1),xformed.group(1)
classTestPreprocessing(unittest.TestCase):
defassertCompiles(self,source):
finished,parsable=code_finished_will_parse(source,compiler)
returnfinishedandparsable
deftest_indent_empty_lines_nops(self):
self.assertEqual(preproc("hello"),"hello")
self.assertEqual(preproc("hello\ngoodbye"),"hello\ngoodbye")
self.assertEqual(preproc("a\n b\nc\n"),"a\n b\nc\n")
defassertShowWhitespaceEqual(self,a,b):
self.assertEqual(
a,
b,
"".join(
difflib.context_diff(
a.replace(" ","~").splitlines(True),
b.replace(" ","~").splitlines(True),
fromfile="actual",
tofile="expected",
n=5,
)
),
)
defassertDefinitionIndented(self,obj):
name=obj.__name__
obj2=getattr(processed,name)
orig=inspect.getsource(obj)
xformed=inspect.getsource(obj2)
self.assertShowWhitespaceEqual(preproc(orig),xformed)
self.assertCompiles(xformed)
defassertLinesIndented(self,test_name):
orig,xformed=get_fodder_source(test_name)
self.assertShowWhitespaceEqual(preproc(orig),xformed)
self.assertCompiles(xformed)
defassertIndented(self,obj_or_name):
ifisinstance(obj_or_name,str):
self.assertLinesIndented(obj_or_name)
else:
self.assertDefinitionIndented(obj_or_name)
deftest_empty_line_between_methods(self):
self.assertIndented(original.BlankLineBetweenMethods)
deftest_empty_line_within_class(self):
self.assertIndented(original.BlankLineInFunction)
deftest_blank_lines_in_for_loop(self):
self.assertIndented("blank_lines_in_for_loop")
@unittest.skip(
"More advanced technique required: need to try compiling and "
"backtracking"
)
deftest_blank_line_in_try_catch(self):
self.assertIndented("blank_line_in_try_catch")
@unittest.skip(
"More advanced technique required: need to try compiling and "
"backtracking"
)
deftest_blank_line_in_try_catch_else(self):
self.assertIndented("blank_line_in_try_catch_else")
deftest_blank_trailing_line(self):
self.assertIndented("blank_trailing_line")
deftest_tabs(self):
self.assertIndented(original.tabs)