mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
- Issue #11250: Back port fix from 3.3 branch, so that 2to3 can handle files
with line feeds. This was ported from the sandbox to the 3.3 branch, but didn't make it into 3.2. - Re-enable lib2to3's test_parser.py tests, though with an expected failure (see issue 13125).
This commit is contained in:
parent
7b847a46bc
commit
78f89d8c38
5 changed files with 39 additions and 23 deletions
|
@ -14,10 +14,21 @@ from .support import driver, test_dir
|
|||
|
||||
# Python imports
|
||||
import os
|
||||
import unittest
|
||||
|
||||
# Local imports
|
||||
from lib2to3.pgen2 import tokenize
|
||||
from ..pgen2.parse import ParseError
|
||||
from lib2to3.pygram import python_symbols as syms
|
||||
|
||||
|
||||
class TestDriver(support.TestCase):
|
||||
|
||||
def test_formfeed(self):
|
||||
s = """print 1\n\x0Cprint 2\n"""
|
||||
t = driver.parse_string(s)
|
||||
self.assertEqual(t.children[0].children[0].type, syms.print_stmt)
|
||||
self.assertEqual(t.children[1].children[0].type, syms.print_stmt)
|
||||
|
||||
|
||||
class GrammarTest(support.TestCase):
|
||||
|
@ -147,19 +158,22 @@ class TestParserIdempotency(support.TestCase):
|
|||
|
||||
"""A cut-down version of pytree_idempotency.py."""
|
||||
|
||||
# Issue 13125
|
||||
@unittest.expectedFailure
|
||||
def test_all_project_files(self):
|
||||
for filepath in support.all_project_files():
|
||||
with open(filepath, "rb") as fp:
|
||||
encoding = tokenize.detect_encoding(fp.readline)[0]
|
||||
self.assertTrue(encoding is not None,
|
||||
"can't detect encoding for %s" % filepath)
|
||||
with open(filepath, "r") as fp:
|
||||
with open(filepath, "r", encoding=encoding) as fp:
|
||||
source = fp.read()
|
||||
source = source.decode(encoding)
|
||||
tree = driver.parse_string(source)
|
||||
try:
|
||||
tree = driver.parse_string(source)
|
||||
except ParseError as err:
|
||||
print('ParseError on file', filepath, err)
|
||||
continue
|
||||
new = str(tree)
|
||||
if encoding:
|
||||
new = new.encode(encoding)
|
||||
if diff(filepath, new):
|
||||
self.fail("Idempotency failed: %s" % filepath)
|
||||
|
||||
|
@ -202,14 +216,14 @@ class TestLiterals(GrammarTest):
|
|||
self.validate(s)
|
||||
|
||||
|
||||
def diff(fn, result, encoding):
|
||||
f = open("@", "w")
|
||||
try:
|
||||
f.write(result.encode(encoding))
|
||||
finally:
|
||||
f.close()
|
||||
def diff(fn, result):
|
||||
try:
|
||||
with open('@', 'w') as f:
|
||||
f.write(str(result))
|
||||
fn = fn.replace('"', '\\"')
|
||||
return os.system('diff -u "%s" @' % fn)
|
||||
finally:
|
||||
os.remove("@")
|
||||
try:
|
||||
os.remove("@")
|
||||
except OSError:
|
||||
pass
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue