mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
Issue #21918: Convert test_tools.py to a sub-package of test.
This commit is contained in:
parent
52b2bc0369
commit
2b0a610297
10 changed files with 283 additions and 195 deletions
339
Lib/test/test_tools/test_pindent.py
Normal file
339
Lib/test/test_tools/test_pindent.py
Normal file
|
|
@ -0,0 +1,339 @@
|
|||
"""Tests for the pindent script in the Tools directory."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
import subprocess
|
||||
import textwrap
|
||||
from test import support
|
||||
from test.script_helper import assert_python_ok
|
||||
|
||||
from test.test_tools import scriptsdir, skip_if_missing
|
||||
|
||||
skip_if_missing()
|
||||
|
||||
|
||||
class PindentTests(unittest.TestCase):
|
||||
script = os.path.join(scriptsdir, 'pindent.py')
|
||||
|
||||
def assertFileEqual(self, fn1, fn2):
|
||||
with open(fn1) as f1, open(fn2) as f2:
|
||||
self.assertEqual(f1.readlines(), f2.readlines())
|
||||
|
||||
def pindent(self, source, *args):
|
||||
with subprocess.Popen(
|
||||
(sys.executable, self.script) + args,
|
||||
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
|
||||
universal_newlines=True) as proc:
|
||||
out, err = proc.communicate(source)
|
||||
self.assertIsNone(err)
|
||||
return out
|
||||
|
||||
def lstriplines(self, data):
|
||||
return '\n'.join(line.lstrip() for line in data.splitlines()) + '\n'
|
||||
|
||||
def test_selftest(self):
|
||||
self.maxDiff = None
|
||||
with support.temp_dir() as directory:
|
||||
data_path = os.path.join(directory, '_test.py')
|
||||
with open(self.script) as f:
|
||||
closed = f.read()
|
||||
with open(data_path, 'w') as f:
|
||||
f.write(closed)
|
||||
|
||||
rc, out, err = assert_python_ok(self.script, '-d', data_path)
|
||||
self.assertEqual(out, b'')
|
||||
self.assertEqual(err, b'')
|
||||
backup = data_path + '~'
|
||||
self.assertTrue(os.path.exists(backup))
|
||||
with open(backup) as f:
|
||||
self.assertEqual(f.read(), closed)
|
||||
with open(data_path) as f:
|
||||
clean = f.read()
|
||||
compile(clean, '_test.py', 'exec')
|
||||
self.assertEqual(self.pindent(clean, '-c'), closed)
|
||||
self.assertEqual(self.pindent(closed, '-d'), clean)
|
||||
|
||||
rc, out, err = assert_python_ok(self.script, '-c', data_path)
|
||||
self.assertEqual(out, b'')
|
||||
self.assertEqual(err, b'')
|
||||
with open(backup) as f:
|
||||
self.assertEqual(f.read(), clean)
|
||||
with open(data_path) as f:
|
||||
self.assertEqual(f.read(), closed)
|
||||
|
||||
broken = self.lstriplines(closed)
|
||||
with open(data_path, 'w') as f:
|
||||
f.write(broken)
|
||||
rc, out, err = assert_python_ok(self.script, '-r', data_path)
|
||||
self.assertEqual(out, b'')
|
||||
self.assertEqual(err, b'')
|
||||
with open(backup) as f:
|
||||
self.assertEqual(f.read(), broken)
|
||||
with open(data_path) as f:
|
||||
indented = f.read()
|
||||
compile(indented, '_test.py', 'exec')
|
||||
self.assertEqual(self.pindent(broken, '-r'), indented)
|
||||
|
||||
def pindent_test(self, clean, closed):
|
||||
self.assertEqual(self.pindent(clean, '-c'), closed)
|
||||
self.assertEqual(self.pindent(closed, '-d'), clean)
|
||||
broken = self.lstriplines(closed)
|
||||
self.assertEqual(self.pindent(broken, '-r', '-e', '-s', '4'), closed)
|
||||
|
||||
def test_statements(self):
|
||||
clean = textwrap.dedent("""\
|
||||
if a:
|
||||
pass
|
||||
|
||||
if a:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
if a:
|
||||
pass
|
||||
elif:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
while a:
|
||||
break
|
||||
|
||||
while a:
|
||||
break
|
||||
else:
|
||||
pass
|
||||
|
||||
for i in a:
|
||||
break
|
||||
|
||||
for i in a:
|
||||
break
|
||||
else:
|
||||
pass
|
||||
|
||||
try:
|
||||
pass
|
||||
finally:
|
||||
pass
|
||||
|
||||
try:
|
||||
pass
|
||||
except TypeError:
|
||||
pass
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
try:
|
||||
pass
|
||||
except TypeError:
|
||||
pass
|
||||
except ValueError:
|
||||
pass
|
||||
finally:
|
||||
pass
|
||||
|
||||
with a:
|
||||
pass
|
||||
|
||||
class A:
|
||||
pass
|
||||
|
||||
def f():
|
||||
pass
|
||||
""")
|
||||
|
||||
closed = textwrap.dedent("""\
|
||||
if a:
|
||||
pass
|
||||
# end if
|
||||
|
||||
if a:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
# end if
|
||||
|
||||
if a:
|
||||
pass
|
||||
elif:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
# end if
|
||||
|
||||
while a:
|
||||
break
|
||||
# end while
|
||||
|
||||
while a:
|
||||
break
|
||||
else:
|
||||
pass
|
||||
# end while
|
||||
|
||||
for i in a:
|
||||
break
|
||||
# end for
|
||||
|
||||
for i in a:
|
||||
break
|
||||
else:
|
||||
pass
|
||||
# end for
|
||||
|
||||
try:
|
||||
pass
|
||||
finally:
|
||||
pass
|
||||
# end try
|
||||
|
||||
try:
|
||||
pass
|
||||
except TypeError:
|
||||
pass
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
# end try
|
||||
|
||||
try:
|
||||
pass
|
||||
except TypeError:
|
||||
pass
|
||||
except ValueError:
|
||||
pass
|
||||
finally:
|
||||
pass
|
||||
# end try
|
||||
|
||||
with a:
|
||||
pass
|
||||
# end with
|
||||
|
||||
class A:
|
||||
pass
|
||||
# end class A
|
||||
|
||||
def f():
|
||||
pass
|
||||
# end def f
|
||||
""")
|
||||
self.pindent_test(clean, closed)
|
||||
|
||||
def test_multilevel(self):
|
||||
clean = textwrap.dedent("""\
|
||||
def foobar(a, b):
|
||||
if a == b:
|
||||
a = a+1
|
||||
elif a < b:
|
||||
b = b-1
|
||||
if b > a: a = a-1
|
||||
else:
|
||||
print 'oops!'
|
||||
""")
|
||||
closed = textwrap.dedent("""\
|
||||
def foobar(a, b):
|
||||
if a == b:
|
||||
a = a+1
|
||||
elif a < b:
|
||||
b = b-1
|
||||
if b > a: a = a-1
|
||||
# end if
|
||||
else:
|
||||
print 'oops!'
|
||||
# end if
|
||||
# end def foobar
|
||||
""")
|
||||
self.pindent_test(clean, closed)
|
||||
|
||||
def test_preserve_indents(self):
|
||||
clean = textwrap.dedent("""\
|
||||
if a:
|
||||
if b:
|
||||
pass
|
||||
""")
|
||||
closed = textwrap.dedent("""\
|
||||
if a:
|
||||
if b:
|
||||
pass
|
||||
# end if
|
||||
# end if
|
||||
""")
|
||||
self.assertEqual(self.pindent(clean, '-c'), closed)
|
||||
self.assertEqual(self.pindent(closed, '-d'), clean)
|
||||
broken = self.lstriplines(closed)
|
||||
self.assertEqual(self.pindent(broken, '-r', '-e', '-s', '9'), closed)
|
||||
clean = textwrap.dedent("""\
|
||||
if a:
|
||||
\tif b:
|
||||
\t\tpass
|
||||
""")
|
||||
closed = textwrap.dedent("""\
|
||||
if a:
|
||||
\tif b:
|
||||
\t\tpass
|
||||
\t# end if
|
||||
# end if
|
||||
""")
|
||||
self.assertEqual(self.pindent(clean, '-c'), closed)
|
||||
self.assertEqual(self.pindent(closed, '-d'), clean)
|
||||
broken = self.lstriplines(closed)
|
||||
self.assertEqual(self.pindent(broken, '-r'), closed)
|
||||
|
||||
def test_escaped_newline(self):
|
||||
clean = textwrap.dedent("""\
|
||||
class\\
|
||||
\\
|
||||
A:
|
||||
def\
|
||||
\\
|
||||
f:
|
||||
pass
|
||||
""")
|
||||
closed = textwrap.dedent("""\
|
||||
class\\
|
||||
\\
|
||||
A:
|
||||
def\
|
||||
\\
|
||||
f:
|
||||
pass
|
||||
# end def f
|
||||
# end class A
|
||||
""")
|
||||
self.assertEqual(self.pindent(clean, '-c'), closed)
|
||||
self.assertEqual(self.pindent(closed, '-d'), clean)
|
||||
|
||||
def test_empty_line(self):
|
||||
clean = textwrap.dedent("""\
|
||||
if a:
|
||||
|
||||
pass
|
||||
""")
|
||||
closed = textwrap.dedent("""\
|
||||
if a:
|
||||
|
||||
pass
|
||||
# end if
|
||||
""")
|
||||
self.pindent_test(clean, closed)
|
||||
|
||||
def test_oneline(self):
|
||||
clean = textwrap.dedent("""\
|
||||
if a: pass
|
||||
""")
|
||||
closed = textwrap.dedent("""\
|
||||
if a: pass
|
||||
# end if
|
||||
""")
|
||||
self.pindent_test(clean, closed)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue