]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #20387: Add test capturing failure to roundtrip indented code in tokenize module.
authorJason R. Coombs <jaraco@jaraco.com>
Sat, 20 Jun 2015 23:52:22 +0000 (19:52 -0400)
committerJason R. Coombs <jaraco@jaraco.com>
Sat, 20 Jun 2015 23:52:22 +0000 (19:52 -0400)
Lib/test/test_tokenize.py

index 3e8a65474ed88a52a8c81f68d2ed147ca09c6f9f..00a2c2b30b5fbbc919b4605a477cfdaf89704108 100644 (file)
@@ -1229,6 +1229,22 @@ class UntokenizeTest(TestCase):
         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 @@ def test_main():
     support.run_unittest(TestDetectEncoding)
     support.run_unittest(TestTokenize)
     support.run_unittest(UntokenizeTest)
+    support.run_unittest(TestRoundtrip)
 
 if __name__ == "__main__":
     test_main()