diff options
author | Benjamin Peterson <benjamin@python.org> | 2008-12-16 03:57:54 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2008-12-16 03:57:54 (GMT) |
commit | 0b24b3d9511f8f838da4dfb9a59255aff5fcf72e (patch) | |
tree | 0c617b335a3ab6f55c7b6c27c432a993121457bd /Lib/lib2to3/tests | |
parent | 56b3a40e057954f4bdbf8e432755980a226900aa (diff) | |
download | cpython-0b24b3d9511f8f838da4dfb9a59255aff5fcf72e.zip cpython-0b24b3d9511f8f838da4dfb9a59255aff5fcf72e.tar.gz cpython-0b24b3d9511f8f838da4dfb9a59255aff5fcf72e.tar.bz2 |
Merged revisions 67806 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
................
r67806 | benjamin.peterson | 2008-12-15 21:35:28 -0600 (Mon, 15 Dec 2008) | 111 lines
Merged revisions 67427,67431,67433,67435,67630,67652,67656-67657,67674-67675,67678-67679,67705-67706,67716,67723,67765-67771,67774,67776,67778 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r67427 | benjamin.peterson | 2008-11-28 16:07:41 -0600 (Fri, 28 Nov 2008) | 1 line
fix spelling in comment
........
r67431 | benjamin.peterson | 2008-11-28 17:14:08 -0600 (Fri, 28 Nov 2008) | 1 line
add a scripts directory; move things to it
........
r67433 | benjamin.peterson | 2008-11-28 17:18:48 -0600 (Fri, 28 Nov 2008) | 1 line
run svneol.py
........
r67435 | benjamin.peterson | 2008-11-28 17:25:03 -0600 (Fri, 28 Nov 2008) | 1 line
rename pre/post_order_mapping to pre/post_order_heads
........
r67630 | alexandre.vassalotti | 2008-12-06 21:51:56 -0600 (Sat, 06 Dec 2008) | 2 lines
Fix typo in the urllib2.HTTPDigestAuthHandler fixer.
........
r67652 | armin.ronacher | 2008-12-07 15:39:43 -0600 (Sun, 07 Dec 2008) | 5 lines
Added a fixer that cleans up a tuple argument to isinstance after the tokens
in it were fixed. This is mainly used to remove double occurrences of
tokens as a leftover of the long -> int / unicode -> str conversion.
........
r67656 | armin.ronacher | 2008-12-07 16:54:16 -0600 (Sun, 07 Dec 2008) | 3 lines
Added missing copyright fo 2to3 fix_isinstance.
........
r67657 | armin.ronacher | 2008-12-07 18:29:35 -0600 (Sun, 07 Dec 2008) | 3 lines
2to3: intern and reduce fixes now add the imports if missing. Because that is a common task the fixer_util module now has a function "touch_import" that adds imports if missing.
........
r67674 | benjamin.peterson | 2008-12-08 19:58:11 -0600 (Mon, 08 Dec 2008) | 1 line
copy permission bits when making backup files #4602
........
r67675 | benjamin.peterson | 2008-12-08 19:59:11 -0600 (Mon, 08 Dec 2008) | 1 line
add forgotten import
........
r67678 | benjamin.peterson | 2008-12-08 20:08:30 -0600 (Mon, 08 Dec 2008) | 1 line
fix #4602 for real
........
r67679 | armin.ronacher | 2008-12-09 00:54:03 -0600 (Tue, 09 Dec 2008) | 3 lines
Removed redudant code from the 2to3 long fixer. This fixes #4590.
........
r67705 | benjamin.peterson | 2008-12-11 13:04:08 -0600 (Thu, 11 Dec 2008) | 1 line
put trailers after a range call after the list()
........
r67706 | benjamin.peterson | 2008-12-11 13:17:57 -0600 (Thu, 11 Dec 2008) | 1 line
add html related modules to the fix_imports mapping
........
r67716 | benjamin.peterson | 2008-12-11 22:16:47 -0600 (Thu, 11 Dec 2008) | 1 line
consolidate tests
........
r67723 | benjamin.peterson | 2008-12-12 19:49:31 -0600 (Fri, 12 Dec 2008) | 1 line
fix name
........
r67765 | benjamin.peterson | 2008-12-14 14:05:05 -0600 (Sun, 14 Dec 2008) | 1 line
run fix_isinstance after fix_long and fix_unicode
........
r67766 | benjamin.peterson | 2008-12-14 14:13:05 -0600 (Sun, 14 Dec 2008) | 1 line
use run_order instead of order
........
r67767 | benjamin.peterson | 2008-12-14 14:28:12 -0600 (Sun, 14 Dec 2008) | 1 line
don't retain parenthesis if there is only one item left
........
r67768 | benjamin.peterson | 2008-12-14 14:32:30 -0600 (Sun, 14 Dec 2008) | 1 line
use insert_child()
........
r67769 | benjamin.peterson | 2008-12-14 14:59:10 -0600 (Sun, 14 Dec 2008) | 1 line
parenthesize doesn't belong in pygram or FixerBase
........
r67770 | alexandre.vassalotti | 2008-12-14 15:15:36 -0600 (Sun, 14 Dec 2008) | 2 lines
Fix typo: html.paser -> html.parser.
........
r67771 | benjamin.peterson | 2008-12-14 15:22:09 -0600 (Sun, 14 Dec 2008) | 1 line
altering .children needs to call changed()
........
r67774 | benjamin.peterson | 2008-12-14 15:55:38 -0600 (Sun, 14 Dec 2008) | 1 line
employ an evil hack to fix multiple names in the same import statement
........
r67776 | benjamin.peterson | 2008-12-14 16:22:38 -0600 (Sun, 14 Dec 2008) | 1 line
make a common mixin class for Test_imports and friends
........
r67778 | alexandre.vassalotti | 2008-12-14 17:48:20 -0600 (Sun, 14 Dec 2008) | 2 lines
Make fix_imports refactor multiple imports as.
........
................
Diffstat (limited to 'Lib/lib2to3/tests')
-rw-r--r-- | Lib/lib2to3/tests/benchmark.py | 58 | ||||
-rwxr-xr-x | Lib/lib2to3/tests/test_fixers.py | 122 | ||||
-rw-r--r-- | Lib/lib2to3/tests/test_util.py | 27 |
3 files changed, 118 insertions, 89 deletions
diff --git a/Lib/lib2to3/tests/benchmark.py b/Lib/lib2to3/tests/benchmark.py deleted file mode 100644 index e1b293f..0000000 --- a/Lib/lib2to3/tests/benchmark.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python2.5 -""" -This is a benchmarking script to test the speed of 2to3's pattern matching -system. It's equivalent to "refactor.py -f all" for every Python module -in sys.modules, but without engaging the actual transformations. -""" - -__author__ = "Collin Winter <collinw at gmail.com>" - -# Python imports -import os.path -import sys -from time import time - -# Test imports -from .support import adjust_path -adjust_path() - -# Local imports -from .. import refactor - -### Mock code for refactor.py and the fixers -############################################################################### -class Options: - def __init__(self, **kwargs): - for k, v in list(kwargs.items()): - setattr(self, k, v) - - self.verbose = False - -def dummy_transform(*args, **kwargs): - pass - -### Collect list of modules to match against -############################################################################### -files = [] -for mod in list(sys.modules.values()): - if mod is None or not hasattr(mod, '__file__'): - continue - f = mod.__file__ - if f.endswith('.pyc'): - f = f[:-1] - if f.endswith('.py'): - files.append(f) - -### Set up refactor and run the benchmark -############################################################################### -options = Options(fix=["all"], print_function=False, doctests_only=False) -refactor = refactor.RefactoringTool(options) -for fixer in refactor.fixers: - # We don't want them to actually fix the tree, just match against it. - fixer.transform = dummy_transform - -t = time() -for f in files: - print("Matching", f) - refactor.refactor_file(f) -print("%d seconds to match %d files" % (time() - t, len(sys.modules))) diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index 7dd1c28..17baaed 100755 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -293,30 +293,30 @@ class Test_intern(FixerTestCase): def test_prefix_preservation(self): b = """x = intern( a )""" - a = """x = sys.intern( a )""" + a = """import sys\nx = sys.intern( a )""" self.check(b, a) b = """y = intern("b" # test )""" - a = """y = sys.intern("b" # test + a = """import sys\ny = sys.intern("b" # test )""" self.check(b, a) b = """z = intern(a+b+c.d, )""" - a = """z = sys.intern(a+b+c.d, )""" + a = """import sys\nz = sys.intern(a+b+c.d, )""" self.check(b, a) def test(self): b = """x = intern(a)""" - a = """x = sys.intern(a)""" + a = """import sys\nx = sys.intern(a)""" self.check(b, a) b = """z = intern(a+b+c.d,)""" - a = """z = sys.intern(a+b+c.d,)""" + a = """import sys\nz = sys.intern(a+b+c.d,)""" self.check(b, a) b = """intern("y%s" % 5).replace("y", "")""" - a = """sys.intern("y%s" % 5).replace("y", "")""" + a = """import sys\nsys.intern("y%s" % 5).replace("y", "")""" self.check(b, a) # These should not be refactored @@ -337,6 +337,35 @@ class Test_intern(FixerTestCase): s = """intern()""" self.unchanged(s) +class Test_reduce(FixerTestCase): + fixer = "reduce" + + def test_simple_call(self): + b = "reduce(a, b, c)" + a = "from functools import reduce\nreduce(a, b, c)" + self.check(b, a) + + def test_call_with_lambda(self): + b = "reduce(lambda x, y: x + y, seq)" + a = "from functools import reduce\nreduce(lambda x, y: x + y, seq)" + self.check(b, a) + + def test_unchanged(self): + s = "reduce(a)" + self.unchanged(s) + + s = "reduce(a, b=42)" + self.unchanged(s) + + s = "reduce(a, b, c, d)" + self.unchanged(s) + + s = "reduce(**c)" + self.unchanged(s) + + s = "reduce()" + self.unchanged(s) + class Test_print(FixerTestCase): fixer = "print" @@ -1044,33 +1073,39 @@ class Test_long(FixerTestCase): a = """z = type(x) in (int, int)""" self.check(b, a) - def test_4(self): - b = """a = 12L""" - a = """a = 12""" + def test_prefix_preservation(self): + b = """x = long( x )""" + a = """x = int( x )""" self.check(b, a) - def test_5(self): - b = """b = 0x12l""" - a = """b = 0x12""" +class Test_isinstance(FixerTestCase): + fixer = "isinstance" + + def test_remove_multiple_items(self): + b = """isinstance(x, (int, int, int))""" + a = """isinstance(x, int)""" self.check(b, a) - def test_unchanged_1(self): - s = """a = 12""" - self.unchanged(s) + b = """isinstance(x, (int, float, int, int, float))""" + a = """isinstance(x, (int, float))""" + self.check(b, a) - def test_unchanged_2(self): - s = """b = 0x12""" - self.unchanged(s) + b = """isinstance(x, (int, float, int, int, float, str))""" + a = """isinstance(x, (int, float, str))""" + self.check(b, a) - def test_unchanged_3(self): - s = """c = 3.14""" - self.unchanged(s) + b = """isinstance(foo() + bar(), (x(), y(), x(), int, int))""" + a = """isinstance(foo() + bar(), (x(), y(), x(), int))""" + self.check(b, a) def test_prefix_preservation(self): - b = """x = long( x )""" - a = """x = int( x )""" + b = """if isinstance( foo(), ( bar, bar, baz )) : pass""" + a = """if isinstance( foo(), ( bar, baz )) : pass""" self.check(b, a) + def test_unchanged(self): + self.unchanged("isinstance(x, (str, int))") + class Test_dict(FixerTestCase): fixer = "dict" @@ -1287,6 +1322,14 @@ class Test_xrange(FixerTestCase): a = """x = list(range(10, 3, 9)) + [4]""" self.check(b, a) + b = """x = range(10)[::-1]""" + a = """x = list(range(10))[::-1]""" + self.check(b, a) + + b = """x = range(10) [3]""" + a = """x = list(range(10)) [3]""" + self.check(b, a) + def test_xrange_in_for(self): b = """for i in xrange(10):\n j=i""" a = """for i in range(10):\n j=i""" @@ -1422,9 +1465,8 @@ class Test_xreadlines(FixerTestCase): s = "foo(xreadlines)" self.unchanged(s) -class Test_imports(FixerTestCase): - fixer = "imports" - from ..fixes.fix_imports import MAPPING as modules + +class ImportsFixerTests: def test_import_module(self): for old, new in self.modules.items(): @@ -1522,18 +1564,36 @@ class Test_imports(FixerTestCase): self.check(b, a) +class Test_imports(FixerTestCase, ImportsFixerTests): + fixer = "imports" + from ..fixes.fix_imports import MAPPING as modules + + def test_multiple_imports(self): + b = """import urlparse, cStringIO""" + a = """import urllib.parse, io""" + self.check(b, a) + + def test_multiple_imports_as(self): + b = """ + import copy_reg as bar, HTMLParser as foo, urlparse + s = urlparse.spam(bar.foo()) + """ + a = """ + import copyreg as bar, html.parser as foo, urllib.parse + s = urllib.parse.spam(bar.foo()) + """ + self.check(b, a) + -class Test_imports2(Test_imports): +class Test_imports2(FixerTestCase, ImportsFixerTests): fixer = "imports2" from ..fixes.fix_imports2 import MAPPING as modules -class Test_imports_fixer_order(Test_imports): - - fixer = None +class Test_imports_fixer_order(FixerTestCase, ImportsFixerTests): def setUp(self): - Test_imports.setUp(self, ['imports', 'imports2']) + super(Test_imports_fixer_order, self).setUp(['imports', 'imports2']) from ..fixes.fix_imports2 import MAPPING as mapping2 self.modules = mapping2.copy() from ..fixes.fix_imports import MAPPING as mapping1 diff --git a/Lib/lib2to3/tests/test_util.py b/Lib/lib2to3/tests/test_util.py index 5d02150..95b566a 100644 --- a/Lib/lib2to3/tests/test_util.py +++ b/Lib/lib2to3/tests/test_util.py @@ -526,6 +526,33 @@ class Test_find_binding(support.TestCase): b = 7""" self.failIf(self.find_binding("a", s)) +class Test_touch_import(support.TestCase): + + def test_after_docstring(self): + node = parse('"""foo"""\nbar()') + fixer_util.touch_import(None, "foo", node) + self.assertEqual(str(node), '"""foo"""\nimport foo\nbar()\n\n') + + def test_after_imports(self): + node = parse('"""foo"""\nimport bar\nbar()') + fixer_util.touch_import(None, "foo", node) + self.assertEqual(str(node), '"""foo"""\nimport bar\nimport foo\nbar()\n\n') + + def test_beginning(self): + node = parse('bar()') + fixer_util.touch_import(None, "foo", node) + self.assertEqual(str(node), 'import foo\nbar()\n\n') + + def test_from_import(self): + node = parse('bar()') + fixer_util.touch_import("cgi", "escape", node) + self.assertEqual(str(node), 'from cgi import escape\nbar()\n\n') + + def test_name_import(self): + node = parse('bar()') + fixer_util.touch_import(None, "cgi", node) + self.assertEqual(str(node), 'import cgi\nbar()\n\n') + if __name__ == "__main__": import __main__ |