forked from pytorch/pytorch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_expecttest.py
105 lines (92 loc) · 2.76 KB
/
test_expecttest.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
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
import expecttest
import unittest
import string
import textwrap
import doctest
import hypothesis
from hypothesis.strategies import text, integers, composite, sampled_from, booleans
@composite
def text_lineno(draw):
t = draw(text("a\n"))
lineno = draw(integers(min_value=1, max_value=t.count("\n") + 1))
return (t, lineno)
class TestExpectTest(expecttest.TestCase):
@hypothesis.given(text_lineno())
def test_nth_line_ref(self, t_lineno):
t, lineno = t_lineno
hypothesis.event("lineno = {}".format(lineno))
def nth_line_ref(src, lineno):
xs = src.split("\n")[:lineno]
xs[-1] = ''
return len("\n".join(xs))
self.assertEqual(expecttest.nth_line(t, lineno), nth_line_ref(t, lineno))
@hypothesis.given(text(string.printable), booleans(), sampled_from(['"', "'"]))
def test_replace_string_literal_roundtrip(self, t, raw, quote):
if raw:
hypothesis.assume(expecttest.ok_for_raw_triple_quoted_string(t, quote=quote))
prog = """\
r = {r}{quote}placeholder{quote}
r2 = {r}{quote}placeholder2{quote}
r3 = {r}{quote}placeholder3{quote}
""".format(r='r' if raw else '', quote=quote * 3)
new_prog = expecttest.replace_string_literal(textwrap.dedent(prog), 2, t)[0]
ns = {}
exec(new_prog, ns)
msg = "program was:\n{}".format(new_prog)
self.assertEqual(ns['r'], 'placeholder', msg=msg) # noqa: F821
self.assertEqual(ns['r2'], expecttest.normalize_nl(t), msg=msg) # noqa: F821
self.assertEqual(ns['r3'], 'placeholder3', msg=msg) # noqa: F821
def test_sample(self):
prog = r"""
single_single('''0''')
single_multi('''1''')
multi_single('''\
2
''')
multi_multi_less('''\
3
4
''')
multi_multi_same('''\
5
''')
multi_multi_more('''\
6
''')
"""
# NB: These are the end of the statements, not beginning
# TODO: Test other permutations of these edits
edits = [(2, "a"),
(3, "b\n"),
(6, "c"),
(10, "d\n"),
(13, "e\n"),
(16, "f\ng\n")]
history = expecttest.EditHistory()
fn = 'not_a_real_file.py'
for lineno, actual in edits:
lineno = history.adjust_lineno(fn, lineno)
prog, delta = expecttest.replace_string_literal(prog, lineno, actual)
history.record_edit(fn, lineno, delta)
self.assertExpectedInline(prog, r"""
single_single('''a''')
single_multi('''\
b
''')
multi_single('''c''')
multi_multi_less('''\
d
''')
multi_multi_same('''\
e
''')
multi_multi_more('''\
f
g
''')
""")
def load_tests(loader, tests, ignore):
tests.addTests(doctest.DocTestSuite(expecttest))
return tests
if __name__ == '__main__':
unittest.main()