Issue #20387: Add test capturing failure to roundtrip indented code in tokenize module.

This commit is contained in:
Jason R. Coombs 2015-06-20 19:52:22 -04:00
parent 7cf36387e4
commit 5713b3c5bf
1 changed files with 17 additions and 0 deletions

View File

@ -1229,6 +1229,22 @@ class UntokenizeTest(TestCase):
self.assertEqual(untokenize(iter(tokens)), b'Hello ') self.assertEqual(untokenize(iter(tokens)), b'Hello ')
class TestRoundtrip(TestCase):
def roundtrip(self, code):
if isinstance(code, str):
code = code.encode('utf-8')
return untokenize(tokenize(BytesIO(code).readline))
def test_indentation_semantics_retained(self):
"""
Ensure that although whitespace might be mutated in a roundtrip,
the semantic meaning of the indentation remains consistent.
"""
code = "if False:\n\tx=3\n\tx=3\n"
codelines = roundtrip(code).split('\n')
self.assertEqual(codelines[1], codelines[2])
__test__ = {"doctests" : doctests, 'decistmt': decistmt} __test__ = {"doctests" : doctests, 'decistmt': decistmt}
def test_main(): def test_main():
@ -1239,6 +1255,7 @@ def test_main():
support.run_unittest(TestDetectEncoding) support.run_unittest(TestDetectEncoding)
support.run_unittest(TestTokenize) support.run_unittest(TestTokenize)
support.run_unittest(UntokenizeTest) support.run_unittest(UntokenizeTest)
support.run_unittest(TestRoundtrip)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()