changeset: 96707:b784c842a63c branch: 3.4 user: Jason R. Coombs date: Sat Jun 20 19:52:22 2015 -0400 files: Lib/test/test_tokenize.py description: Issue #20387: Add test capturing failure to roundtrip indented code in tokenize module. diff -r 8bf1c158332f -r b784c842a63c Lib/test/test_tokenize.py --- a/Lib/test/test_tokenize.py Sat Jun 20 19:13:50 2015 -0400 +++ b/Lib/test/test_tokenize.py Sat Jun 20 19:52:22 2015 -0400 @@ -1229,6 +1229,22 @@ 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} def test_main(): @@ -1239,6 +1255,7 @@ support.run_unittest(TestDetectEncoding) support.run_unittest(TestTokenize) support.run_unittest(UntokenizeTest) + support.run_unittest(TestRoundtrip) if __name__ == "__main__": test_main()