symbian-qemu-0.9.1-12/python-2.6.1/Lib/lib2to3/tests/test_fixers.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #!/usr/bin/env python2.5
       
     2 """ Test suite for the fixer modules """
       
     3 # Author: Collin Winter
       
     4 
       
     5 # Testing imports
       
     6 try:
       
     7     from tests import support
       
     8 except ImportError:
       
     9     import support
       
    10 
       
    11 # Python imports
       
    12 import os
       
    13 import unittest
       
    14 from itertools import chain
       
    15 from operator import itemgetter
       
    16 
       
    17 # Local imports
       
    18 from lib2to3 import pygram, pytree, refactor, fixer_util
       
    19 
       
    20 
       
    21 class FixerTestCase(support.TestCase):
       
    22     def setUp(self, fix_list=None):
       
    23         if fix_list is None:
       
    24             fix_list = [self.fixer]
       
    25         options = {"print_function" : False}
       
    26         self.refactor = support.get_refactorer(fix_list, options)
       
    27         self.fixer_log = []
       
    28         self.filename = "<string>"
       
    29 
       
    30         for fixer in chain(self.refactor.pre_order,
       
    31                            self.refactor.post_order):
       
    32             fixer.log = self.fixer_log
       
    33 
       
    34     def _check(self, before, after):
       
    35         before = support.reformat(before)
       
    36         after = support.reformat(after)
       
    37         tree = self.refactor.refactor_string(before, self.filename)
       
    38         self.failUnlessEqual(after, str(tree))
       
    39         return tree
       
    40 
       
    41     def check(self, before, after, ignore_warnings=False):
       
    42         tree = self._check(before, after)
       
    43         self.failUnless(tree.was_changed)
       
    44         if not ignore_warnings:
       
    45             self.failUnlessEqual(self.fixer_log, [])
       
    46 
       
    47     def warns(self, before, after, message, unchanged=False):
       
    48         tree = self._check(before, after)
       
    49         self.failUnless(message in "".join(self.fixer_log))
       
    50         if not unchanged:
       
    51             self.failUnless(tree.was_changed)
       
    52 
       
    53     def warns_unchanged(self, before, message):
       
    54         self.warns(before, before, message, unchanged=True)
       
    55 
       
    56     def unchanged(self, before, ignore_warnings=False):
       
    57         self._check(before, before)
       
    58         if not ignore_warnings:
       
    59             self.failUnlessEqual(self.fixer_log, [])
       
    60 
       
    61     def assert_runs_after(self, *names):
       
    62         fixes = [self.fixer]
       
    63         fixes.extend(names)
       
    64         options = {"print_function" : False}
       
    65         r = support.get_refactorer(fixes, options)
       
    66         (pre, post) = r.get_fixers()
       
    67         n = "fix_" + self.fixer
       
    68         if post and post[-1].__class__.__module__.endswith(n):
       
    69             # We're the last fixer to run
       
    70             return
       
    71         if pre and pre[-1].__class__.__module__.endswith(n) and not post:
       
    72             # We're the last in pre and post is empty
       
    73             return
       
    74         self.fail("Fixer run order (%s) is incorrect; %s should be last."\
       
    75                %(", ".join([x.__class__.__module__ for x in (pre+post)]), n))
       
    76 
       
    77 class Test_ne(FixerTestCase):
       
    78     fixer = "ne"
       
    79 
       
    80     def test_basic(self):
       
    81         b = """if x <> y:
       
    82             pass"""
       
    83 
       
    84         a = """if x != y:
       
    85             pass"""
       
    86         self.check(b, a)
       
    87 
       
    88     def test_no_spaces(self):
       
    89         b = """if x<>y:
       
    90             pass"""
       
    91 
       
    92         a = """if x!=y:
       
    93             pass"""
       
    94         self.check(b, a)
       
    95 
       
    96     def test_chained(self):
       
    97         b = """if x<>y<>z:
       
    98             pass"""
       
    99 
       
   100         a = """if x!=y!=z:
       
   101             pass"""
       
   102         self.check(b, a)
       
   103 
       
   104 class Test_has_key(FixerTestCase):
       
   105     fixer = "has_key"
       
   106 
       
   107     def test_1(self):
       
   108         b = """x = d.has_key("x") or d.has_key("y")"""
       
   109         a = """x = "x" in d or "y" in d"""
       
   110         self.check(b, a)
       
   111 
       
   112     def test_2(self):
       
   113         b = """x = a.b.c.d.has_key("x") ** 3"""
       
   114         a = """x = ("x" in a.b.c.d) ** 3"""
       
   115         self.check(b, a)
       
   116 
       
   117     def test_3(self):
       
   118         b = """x = a.b.has_key(1 + 2).__repr__()"""
       
   119         a = """x = (1 + 2 in a.b).__repr__()"""
       
   120         self.check(b, a)
       
   121 
       
   122     def test_4(self):
       
   123         b = """x = a.b.has_key(1 + 2).__repr__() ** -3 ** 4"""
       
   124         a = """x = (1 + 2 in a.b).__repr__() ** -3 ** 4"""
       
   125         self.check(b, a)
       
   126 
       
   127     def test_5(self):
       
   128         b = """x = a.has_key(f or g)"""
       
   129         a = """x = (f or g) in a"""
       
   130         self.check(b, a)
       
   131 
       
   132     def test_6(self):
       
   133         b = """x = a + b.has_key(c)"""
       
   134         a = """x = a + (c in b)"""
       
   135         self.check(b, a)
       
   136 
       
   137     def test_7(self):
       
   138         b = """x = a.has_key(lambda: 12)"""
       
   139         a = """x = (lambda: 12) in a"""
       
   140         self.check(b, a)
       
   141 
       
   142     def test_8(self):
       
   143         b = """x = a.has_key(a for a in b)"""
       
   144         a = """x = (a for a in b) in a"""
       
   145         self.check(b, a)
       
   146 
       
   147     def test_9(self):
       
   148         b = """if not a.has_key(b): pass"""
       
   149         a = """if b not in a: pass"""
       
   150         self.check(b, a)
       
   151 
       
   152     def test_10(self):
       
   153         b = """if not a.has_key(b).__repr__(): pass"""
       
   154         a = """if not (b in a).__repr__(): pass"""
       
   155         self.check(b, a)
       
   156 
       
   157     def test_11(self):
       
   158         b = """if not a.has_key(b) ** 2: pass"""
       
   159         a = """if not (b in a) ** 2: pass"""
       
   160         self.check(b, a)
       
   161 
       
   162 class Test_apply(FixerTestCase):
       
   163     fixer = "apply"
       
   164 
       
   165     def test_1(self):
       
   166         b = """x = apply(f, g + h)"""
       
   167         a = """x = f(*g + h)"""
       
   168         self.check(b, a)
       
   169 
       
   170     def test_2(self):
       
   171         b = """y = apply(f, g, h)"""
       
   172         a = """y = f(*g, **h)"""
       
   173         self.check(b, a)
       
   174 
       
   175     def test_3(self):
       
   176         b = """z = apply(fs[0], g or h, h or g)"""
       
   177         a = """z = fs[0](*g or h, **h or g)"""
       
   178         self.check(b, a)
       
   179 
       
   180     def test_4(self):
       
   181         b = """apply(f, (x, y) + t)"""
       
   182         a = """f(*(x, y) + t)"""
       
   183         self.check(b, a)
       
   184 
       
   185     def test_5(self):
       
   186         b = """apply(f, args,)"""
       
   187         a = """f(*args)"""
       
   188         self.check(b, a)
       
   189 
       
   190     def test_6(self):
       
   191         b = """apply(f, args, kwds,)"""
       
   192         a = """f(*args, **kwds)"""
       
   193         self.check(b, a)
       
   194 
       
   195     # Test that complex functions are parenthesized
       
   196 
       
   197     def test_complex_1(self):
       
   198         b = """x = apply(f+g, args)"""
       
   199         a = """x = (f+g)(*args)"""
       
   200         self.check(b, a)
       
   201 
       
   202     def test_complex_2(self):
       
   203         b = """x = apply(f*g, args)"""
       
   204         a = """x = (f*g)(*args)"""
       
   205         self.check(b, a)
       
   206 
       
   207     def test_complex_3(self):
       
   208         b = """x = apply(f**g, args)"""
       
   209         a = """x = (f**g)(*args)"""
       
   210         self.check(b, a)
       
   211 
       
   212     # But dotted names etc. not
       
   213 
       
   214     def test_dotted_name(self):
       
   215         b = """x = apply(f.g, args)"""
       
   216         a = """x = f.g(*args)"""
       
   217         self.check(b, a)
       
   218 
       
   219     def test_subscript(self):
       
   220         b = """x = apply(f[x], args)"""
       
   221         a = """x = f[x](*args)"""
       
   222         self.check(b, a)
       
   223 
       
   224     def test_call(self):
       
   225         b = """x = apply(f(), args)"""
       
   226         a = """x = f()(*args)"""
       
   227         self.check(b, a)
       
   228 
       
   229     # Extreme case
       
   230     def test_extreme(self):
       
   231         b = """x = apply(a.b.c.d.e.f, args, kwds)"""
       
   232         a = """x = a.b.c.d.e.f(*args, **kwds)"""
       
   233         self.check(b, a)
       
   234 
       
   235     # XXX Comments in weird places still get lost
       
   236     def test_weird_comments(self):
       
   237         b = """apply(   # foo
       
   238           f, # bar
       
   239           args)"""
       
   240         a = """f(*args)"""
       
   241         self.check(b, a)
       
   242 
       
   243     # These should *not* be touched
       
   244 
       
   245     def test_unchanged_1(self):
       
   246         s = """apply()"""
       
   247         self.unchanged(s)
       
   248 
       
   249     def test_unchanged_2(self):
       
   250         s = """apply(f)"""
       
   251         self.unchanged(s)
       
   252 
       
   253     def test_unchanged_3(self):
       
   254         s = """apply(f,)"""
       
   255         self.unchanged(s)
       
   256 
       
   257     def test_unchanged_4(self):
       
   258         s = """apply(f, args, kwds, extras)"""
       
   259         self.unchanged(s)
       
   260 
       
   261     def test_unchanged_5(self):
       
   262         s = """apply(f, *args, **kwds)"""
       
   263         self.unchanged(s)
       
   264 
       
   265     def test_unchanged_6(self):
       
   266         s = """apply(f, *args)"""
       
   267         self.unchanged(s)
       
   268 
       
   269     def test_unchanged_7(self):
       
   270         s = """apply(func=f, args=args, kwds=kwds)"""
       
   271         self.unchanged(s)
       
   272 
       
   273     def test_unchanged_8(self):
       
   274         s = """apply(f, args=args, kwds=kwds)"""
       
   275         self.unchanged(s)
       
   276 
       
   277     def test_unchanged_9(self):
       
   278         s = """apply(f, args, kwds=kwds)"""
       
   279         self.unchanged(s)
       
   280 
       
   281     def test_space_1(self):
       
   282         a = """apply(  f,  args,   kwds)"""
       
   283         b = """f(*args, **kwds)"""
       
   284         self.check(a, b)
       
   285 
       
   286     def test_space_2(self):
       
   287         a = """apply(  f  ,args,kwds   )"""
       
   288         b = """f(*args, **kwds)"""
       
   289         self.check(a, b)
       
   290 
       
   291 class Test_intern(FixerTestCase):
       
   292     fixer = "intern"
       
   293 
       
   294     def test_prefix_preservation(self):
       
   295         b = """x =   intern(  a  )"""
       
   296         a = """x =   sys.intern(  a  )"""
       
   297         self.check(b, a)
       
   298 
       
   299         b = """y = intern("b" # test
       
   300               )"""
       
   301         a = """y = sys.intern("b" # test
       
   302               )"""
       
   303         self.check(b, a)
       
   304 
       
   305         b = """z = intern(a+b+c.d,   )"""
       
   306         a = """z = sys.intern(a+b+c.d,   )"""
       
   307         self.check(b, a)
       
   308 
       
   309     def test(self):
       
   310         b = """x = intern(a)"""
       
   311         a = """x = sys.intern(a)"""
       
   312         self.check(b, a)
       
   313 
       
   314         b = """z = intern(a+b+c.d,)"""
       
   315         a = """z = sys.intern(a+b+c.d,)"""
       
   316         self.check(b, a)
       
   317 
       
   318         b = """intern("y%s" % 5).replace("y", "")"""
       
   319         a = """sys.intern("y%s" % 5).replace("y", "")"""
       
   320         self.check(b, a)
       
   321 
       
   322     # These should not be refactored
       
   323 
       
   324     def test_unchanged(self):
       
   325         s = """intern(a=1)"""
       
   326         self.unchanged(s)
       
   327 
       
   328         s = """intern(f, g)"""
       
   329         self.unchanged(s)
       
   330 
       
   331         s = """intern(*h)"""
       
   332         self.unchanged(s)
       
   333 
       
   334         s = """intern(**i)"""
       
   335         self.unchanged(s)
       
   336 
       
   337         s = """intern()"""
       
   338         self.unchanged(s)
       
   339 
       
   340 class Test_print(FixerTestCase):
       
   341     fixer = "print"
       
   342 
       
   343     def test_prefix_preservation(self):
       
   344         b = """print 1,   1+1,   1+1+1"""
       
   345         a = """print(1,   1+1,   1+1+1)"""
       
   346         self.check(b, a)
       
   347 
       
   348     def test_idempotency(self):
       
   349         s = """print()"""
       
   350         self.unchanged(s)
       
   351 
       
   352         s = """print('')"""
       
   353         self.unchanged(s)
       
   354 
       
   355     def test_idempotency_print_as_function(self):
       
   356         print_stmt = pygram.python_grammar.keywords.pop("print")
       
   357         try:
       
   358             s = """print(1, 1+1, 1+1+1)"""
       
   359             self.unchanged(s)
       
   360 
       
   361             s = """print()"""
       
   362             self.unchanged(s)
       
   363 
       
   364             s = """print('')"""
       
   365             self.unchanged(s)
       
   366         finally:
       
   367             pygram.python_grammar.keywords["print"] = print_stmt
       
   368 
       
   369     def test_1(self):
       
   370         b = """print 1, 1+1, 1+1+1"""
       
   371         a = """print(1, 1+1, 1+1+1)"""
       
   372         self.check(b, a)
       
   373 
       
   374     def test_2(self):
       
   375         b = """print 1, 2"""
       
   376         a = """print(1, 2)"""
       
   377         self.check(b, a)
       
   378 
       
   379     def test_3(self):
       
   380         b = """print"""
       
   381         a = """print()"""
       
   382         self.check(b, a)
       
   383 
       
   384     def test_4(self):
       
   385         # from bug 3000
       
   386         b = """print whatever; print"""
       
   387         a = """print(whatever); print()"""
       
   388         self.check(b, a)
       
   389 
       
   390     def test_5(self):
       
   391         b = """print; print whatever;"""
       
   392         a = """print(); print(whatever);"""
       
   393 
       
   394     def test_tuple(self):
       
   395         b = """print (a, b, c)"""
       
   396         a = """print((a, b, c))"""
       
   397         self.check(b, a)
       
   398 
       
   399     # trailing commas
       
   400 
       
   401     def test_trailing_comma_1(self):
       
   402         b = """print 1, 2, 3,"""
       
   403         a = """print(1, 2, 3, end=' ')"""
       
   404         self.check(b, a)
       
   405 
       
   406     def test_trailing_comma_2(self):
       
   407         b = """print 1, 2,"""
       
   408         a = """print(1, 2, end=' ')"""
       
   409         self.check(b, a)
       
   410 
       
   411     def test_trailing_comma_3(self):
       
   412         b = """print 1,"""
       
   413         a = """print(1, end=' ')"""
       
   414         self.check(b, a)
       
   415 
       
   416     # >> stuff
       
   417 
       
   418     def test_vargs_without_trailing_comma(self):
       
   419         b = """print >>sys.stderr, 1, 2, 3"""
       
   420         a = """print(1, 2, 3, file=sys.stderr)"""
       
   421         self.check(b, a)
       
   422 
       
   423     def test_with_trailing_comma(self):
       
   424         b = """print >>sys.stderr, 1, 2,"""
       
   425         a = """print(1, 2, end=' ', file=sys.stderr)"""
       
   426         self.check(b, a)
       
   427 
       
   428     def test_no_trailing_comma(self):
       
   429         b = """print >>sys.stderr, 1+1"""
       
   430         a = """print(1+1, file=sys.stderr)"""
       
   431         self.check(b, a)
       
   432 
       
   433     def test_spaces_before_file(self):
       
   434         b = """print >>  sys.stderr"""
       
   435         a = """print(file=sys.stderr)"""
       
   436         self.check(b, a)
       
   437 
       
   438     # With from __future__ import print_function
       
   439     def test_with_future_print_function(self):
       
   440         # XXX: These tests won't actually do anything until the parser
       
   441         #      is fixed so it won't crash when it sees print(x=y).
       
   442         #      When #2412 is fixed, the try/except block can be taken
       
   443         #      out and the tests can be run like normal.
       
   444         # MvL: disable entirely for now, so that it doesn't print to stdout
       
   445         return
       
   446         try:
       
   447             s = "from __future__ import print_function\n"\
       
   448                 "print('Hai!', end=' ')"
       
   449             self.unchanged(s)
       
   450 
       
   451             b = "print 'Hello, world!'"
       
   452             a = "print('Hello, world!')"
       
   453             self.check(b, a)
       
   454 
       
   455             s = "from __future__ import *\n"\
       
   456                 "print('Hai!', end=' ')"
       
   457             self.unchanged(s)
       
   458         except:
       
   459             return
       
   460         else:
       
   461             self.assertFalse(True, "#2421 has been fixed -- printing tests "\
       
   462                                    "need to be updated!")
       
   463 
       
   464 class Test_exec(FixerTestCase):
       
   465     fixer = "exec"
       
   466 
       
   467     def test_prefix_preservation(self):
       
   468         b = """  exec code in ns1,   ns2"""
       
   469         a = """  exec(code, ns1,   ns2)"""
       
   470         self.check(b, a)
       
   471 
       
   472     def test_basic(self):
       
   473         b = """exec code"""
       
   474         a = """exec(code)"""
       
   475         self.check(b, a)
       
   476 
       
   477     def test_with_globals(self):
       
   478         b = """exec code in ns"""
       
   479         a = """exec(code, ns)"""
       
   480         self.check(b, a)
       
   481 
       
   482     def test_with_globals_locals(self):
       
   483         b = """exec code in ns1, ns2"""
       
   484         a = """exec(code, ns1, ns2)"""
       
   485         self.check(b, a)
       
   486 
       
   487     def test_complex_1(self):
       
   488         b = """exec (a.b()) in ns"""
       
   489         a = """exec((a.b()), ns)"""
       
   490         self.check(b, a)
       
   491 
       
   492     def test_complex_2(self):
       
   493         b = """exec a.b() + c in ns"""
       
   494         a = """exec(a.b() + c, ns)"""
       
   495         self.check(b, a)
       
   496 
       
   497     # These should not be touched
       
   498 
       
   499     def test_unchanged_1(self):
       
   500         s = """exec(code)"""
       
   501         self.unchanged(s)
       
   502 
       
   503     def test_unchanged_2(self):
       
   504         s = """exec (code)"""
       
   505         self.unchanged(s)
       
   506 
       
   507     def test_unchanged_3(self):
       
   508         s = """exec(code, ns)"""
       
   509         self.unchanged(s)
       
   510 
       
   511     def test_unchanged_4(self):
       
   512         s = """exec(code, ns1, ns2)"""
       
   513         self.unchanged(s)
       
   514 
       
   515 class Test_repr(FixerTestCase):
       
   516     fixer = "repr"
       
   517 
       
   518     def test_prefix_preservation(self):
       
   519         b = """x =   `1 + 2`"""
       
   520         a = """x =   repr(1 + 2)"""
       
   521         self.check(b, a)
       
   522 
       
   523     def test_simple_1(self):
       
   524         b = """x = `1 + 2`"""
       
   525         a = """x = repr(1 + 2)"""
       
   526         self.check(b, a)
       
   527 
       
   528     def test_simple_2(self):
       
   529         b = """y = `x`"""
       
   530         a = """y = repr(x)"""
       
   531         self.check(b, a)
       
   532 
       
   533     def test_complex(self):
       
   534         b = """z = `y`.__repr__()"""
       
   535         a = """z = repr(y).__repr__()"""
       
   536         self.check(b, a)
       
   537 
       
   538     def test_tuple(self):
       
   539         b = """x = `1, 2, 3`"""
       
   540         a = """x = repr((1, 2, 3))"""
       
   541         self.check(b, a)
       
   542 
       
   543     def test_nested(self):
       
   544         b = """x = `1 + `2``"""
       
   545         a = """x = repr(1 + repr(2))"""
       
   546         self.check(b, a)
       
   547 
       
   548     def test_nested_tuples(self):
       
   549         b = """x = `1, 2 + `3, 4``"""
       
   550         a = """x = repr((1, 2 + repr((3, 4))))"""
       
   551         self.check(b, a)
       
   552 
       
   553 class Test_except(FixerTestCase):
       
   554     fixer = "except"
       
   555 
       
   556     def test_prefix_preservation(self):
       
   557         b = """
       
   558             try:
       
   559                 pass
       
   560             except (RuntimeError, ImportError),    e:
       
   561                 pass"""
       
   562         a = """
       
   563             try:
       
   564                 pass
       
   565             except (RuntimeError, ImportError) as    e:
       
   566                 pass"""
       
   567         self.check(b, a)
       
   568 
       
   569     def test_simple(self):
       
   570         b = """
       
   571             try:
       
   572                 pass
       
   573             except Foo, e:
       
   574                 pass"""
       
   575         a = """
       
   576             try:
       
   577                 pass
       
   578             except Foo as e:
       
   579                 pass"""
       
   580         self.check(b, a)
       
   581 
       
   582     def test_simple_no_space_before_target(self):
       
   583         b = """
       
   584             try:
       
   585                 pass
       
   586             except Foo,e:
       
   587                 pass"""
       
   588         a = """
       
   589             try:
       
   590                 pass
       
   591             except Foo as e:
       
   592                 pass"""
       
   593         self.check(b, a)
       
   594 
       
   595     def test_tuple_unpack(self):
       
   596         b = """
       
   597             def foo():
       
   598                 try:
       
   599                     pass
       
   600                 except Exception, (f, e):
       
   601                     pass
       
   602                 except ImportError, e:
       
   603                     pass"""
       
   604 
       
   605         a = """
       
   606             def foo():
       
   607                 try:
       
   608                     pass
       
   609                 except Exception as xxx_todo_changeme:
       
   610                     (f, e) = xxx_todo_changeme.args
       
   611                     pass
       
   612                 except ImportError as e:
       
   613                     pass"""
       
   614         self.check(b, a)
       
   615 
       
   616     def test_multi_class(self):
       
   617         b = """
       
   618             try:
       
   619                 pass
       
   620             except (RuntimeError, ImportError), e:
       
   621                 pass"""
       
   622 
       
   623         a = """
       
   624             try:
       
   625                 pass
       
   626             except (RuntimeError, ImportError) as e:
       
   627                 pass"""
       
   628         self.check(b, a)
       
   629 
       
   630     def test_list_unpack(self):
       
   631         b = """
       
   632             try:
       
   633                 pass
       
   634             except Exception, [a, b]:
       
   635                 pass"""
       
   636 
       
   637         a = """
       
   638             try:
       
   639                 pass
       
   640             except Exception as xxx_todo_changeme:
       
   641                 [a, b] = xxx_todo_changeme.args
       
   642                 pass"""
       
   643         self.check(b, a)
       
   644 
       
   645     def test_weird_target_1(self):
       
   646         b = """
       
   647             try:
       
   648                 pass
       
   649             except Exception, d[5]:
       
   650                 pass"""
       
   651 
       
   652         a = """
       
   653             try:
       
   654                 pass
       
   655             except Exception as xxx_todo_changeme:
       
   656                 d[5] = xxx_todo_changeme
       
   657                 pass"""
       
   658         self.check(b, a)
       
   659 
       
   660     def test_weird_target_2(self):
       
   661         b = """
       
   662             try:
       
   663                 pass
       
   664             except Exception, a.foo:
       
   665                 pass"""
       
   666 
       
   667         a = """
       
   668             try:
       
   669                 pass
       
   670             except Exception as xxx_todo_changeme:
       
   671                 a.foo = xxx_todo_changeme
       
   672                 pass"""
       
   673         self.check(b, a)
       
   674 
       
   675     def test_weird_target_3(self):
       
   676         b = """
       
   677             try:
       
   678                 pass
       
   679             except Exception, a().foo:
       
   680                 pass"""
       
   681 
       
   682         a = """
       
   683             try:
       
   684                 pass
       
   685             except Exception as xxx_todo_changeme:
       
   686                 a().foo = xxx_todo_changeme
       
   687                 pass"""
       
   688         self.check(b, a)
       
   689 
       
   690     def test_bare_except(self):
       
   691         b = """
       
   692             try:
       
   693                 pass
       
   694             except Exception, a:
       
   695                 pass
       
   696             except:
       
   697                 pass"""
       
   698 
       
   699         a = """
       
   700             try:
       
   701                 pass
       
   702             except Exception as a:
       
   703                 pass
       
   704             except:
       
   705                 pass"""
       
   706         self.check(b, a)
       
   707 
       
   708     def test_bare_except_and_else_finally(self):
       
   709         b = """
       
   710             try:
       
   711                 pass
       
   712             except Exception, a:
       
   713                 pass
       
   714             except:
       
   715                 pass
       
   716             else:
       
   717                 pass
       
   718             finally:
       
   719                 pass"""
       
   720 
       
   721         a = """
       
   722             try:
       
   723                 pass
       
   724             except Exception as a:
       
   725                 pass
       
   726             except:
       
   727                 pass
       
   728             else:
       
   729                 pass
       
   730             finally:
       
   731                 pass"""
       
   732         self.check(b, a)
       
   733 
       
   734     def test_multi_fixed_excepts_before_bare_except(self):
       
   735         b = """
       
   736             try:
       
   737                 pass
       
   738             except TypeError, b:
       
   739                 pass
       
   740             except Exception, a:
       
   741                 pass
       
   742             except:
       
   743                 pass"""
       
   744 
       
   745         a = """
       
   746             try:
       
   747                 pass
       
   748             except TypeError as b:
       
   749                 pass
       
   750             except Exception as a:
       
   751                 pass
       
   752             except:
       
   753                 pass"""
       
   754         self.check(b, a)
       
   755 
       
   756     # These should not be touched:
       
   757 
       
   758     def test_unchanged_1(self):
       
   759         s = """
       
   760             try:
       
   761                 pass
       
   762             except:
       
   763                 pass"""
       
   764         self.unchanged(s)
       
   765 
       
   766     def test_unchanged_2(self):
       
   767         s = """
       
   768             try:
       
   769                 pass
       
   770             except Exception:
       
   771                 pass"""
       
   772         self.unchanged(s)
       
   773 
       
   774     def test_unchanged_3(self):
       
   775         s = """
       
   776             try:
       
   777                 pass
       
   778             except (Exception, SystemExit):
       
   779                 pass"""
       
   780         self.unchanged(s)
       
   781 
       
   782 class Test_raise(FixerTestCase):
       
   783     fixer = "raise"
       
   784 
       
   785     def test_basic(self):
       
   786         b = """raise Exception, 5"""
       
   787         a = """raise Exception(5)"""
       
   788         self.check(b, a)
       
   789 
       
   790     def test_prefix_preservation(self):
       
   791         b = """raise Exception,5"""
       
   792         a = """raise Exception(5)"""
       
   793         self.check(b, a)
       
   794 
       
   795         b = """raise   Exception,    5"""
       
   796         a = """raise   Exception(5)"""
       
   797         self.check(b, a)
       
   798 
       
   799     def test_with_comments(self):
       
   800         b = """raise Exception, 5 # foo"""
       
   801         a = """raise Exception(5) # foo"""
       
   802         self.check(b, a)
       
   803 
       
   804         b = """raise E, (5, 6) % (a, b) # foo"""
       
   805         a = """raise E((5, 6) % (a, b)) # foo"""
       
   806         self.check(b, a)
       
   807 
       
   808         b = """def foo():
       
   809                     raise Exception, 5, 6 # foo"""
       
   810         a = """def foo():
       
   811                     raise Exception(5).with_traceback(6) # foo"""
       
   812         self.check(b, a)
       
   813 
       
   814     def test_tuple_value(self):
       
   815         b = """raise Exception, (5, 6, 7)"""
       
   816         a = """raise Exception(5, 6, 7)"""
       
   817         self.check(b, a)
       
   818 
       
   819     def test_tuple_detection(self):
       
   820         b = """raise E, (5, 6) % (a, b)"""
       
   821         a = """raise E((5, 6) % (a, b))"""
       
   822         self.check(b, a)
       
   823 
       
   824     def test_tuple_exc_1(self):
       
   825         b = """raise (((E1, E2), E3), E4), V"""
       
   826         a = """raise E1(V)"""
       
   827         self.check(b, a)
       
   828 
       
   829     def test_tuple_exc_2(self):
       
   830         b = """raise (E1, (E2, E3), E4), V"""
       
   831         a = """raise E1(V)"""
       
   832         self.check(b, a)
       
   833 
       
   834     # These should produce a warning
       
   835 
       
   836     def test_string_exc(self):
       
   837         s = """raise 'foo'"""
       
   838         self.warns_unchanged(s, "Python 3 does not support string exceptions")
       
   839 
       
   840     def test_string_exc_val(self):
       
   841         s = """raise "foo", 5"""
       
   842         self.warns_unchanged(s, "Python 3 does not support string exceptions")
       
   843 
       
   844     def test_string_exc_val_tb(self):
       
   845         s = """raise "foo", 5, 6"""
       
   846         self.warns_unchanged(s, "Python 3 does not support string exceptions")
       
   847 
       
   848     # These should result in traceback-assignment
       
   849 
       
   850     def test_tb_1(self):
       
   851         b = """def foo():
       
   852                     raise Exception, 5, 6"""
       
   853         a = """def foo():
       
   854                     raise Exception(5).with_traceback(6)"""
       
   855         self.check(b, a)
       
   856 
       
   857     def test_tb_2(self):
       
   858         b = """def foo():
       
   859                     a = 5
       
   860                     raise Exception, 5, 6
       
   861                     b = 6"""
       
   862         a = """def foo():
       
   863                     a = 5
       
   864                     raise Exception(5).with_traceback(6)
       
   865                     b = 6"""
       
   866         self.check(b, a)
       
   867 
       
   868     def test_tb_3(self):
       
   869         b = """def foo():
       
   870                     raise Exception,5,6"""
       
   871         a = """def foo():
       
   872                     raise Exception(5).with_traceback(6)"""
       
   873         self.check(b, a)
       
   874 
       
   875     def test_tb_4(self):
       
   876         b = """def foo():
       
   877                     a = 5
       
   878                     raise Exception,5,6
       
   879                     b = 6"""
       
   880         a = """def foo():
       
   881                     a = 5
       
   882                     raise Exception(5).with_traceback(6)
       
   883                     b = 6"""
       
   884         self.check(b, a)
       
   885 
       
   886     def test_tb_5(self):
       
   887         b = """def foo():
       
   888                     raise Exception, (5, 6, 7), 6"""
       
   889         a = """def foo():
       
   890                     raise Exception(5, 6, 7).with_traceback(6)"""
       
   891         self.check(b, a)
       
   892 
       
   893     def test_tb_6(self):
       
   894         b = """def foo():
       
   895                     a = 5
       
   896                     raise Exception, (5, 6, 7), 6
       
   897                     b = 6"""
       
   898         a = """def foo():
       
   899                     a = 5
       
   900                     raise Exception(5, 6, 7).with_traceback(6)
       
   901                     b = 6"""
       
   902         self.check(b, a)
       
   903 
       
   904 class Test_throw(FixerTestCase):
       
   905     fixer = "throw"
       
   906 
       
   907     def test_1(self):
       
   908         b = """g.throw(Exception, 5)"""
       
   909         a = """g.throw(Exception(5))"""
       
   910         self.check(b, a)
       
   911 
       
   912     def test_2(self):
       
   913         b = """g.throw(Exception,5)"""
       
   914         a = """g.throw(Exception(5))"""
       
   915         self.check(b, a)
       
   916 
       
   917     def test_3(self):
       
   918         b = """g.throw(Exception, (5, 6, 7))"""
       
   919         a = """g.throw(Exception(5, 6, 7))"""
       
   920         self.check(b, a)
       
   921 
       
   922     def test_4(self):
       
   923         b = """5 + g.throw(Exception, 5)"""
       
   924         a = """5 + g.throw(Exception(5))"""
       
   925         self.check(b, a)
       
   926 
       
   927     # These should produce warnings
       
   928 
       
   929     def test_warn_1(self):
       
   930         s = """g.throw("foo")"""
       
   931         self.warns_unchanged(s, "Python 3 does not support string exceptions")
       
   932 
       
   933     def test_warn_2(self):
       
   934         s = """g.throw("foo", 5)"""
       
   935         self.warns_unchanged(s, "Python 3 does not support string exceptions")
       
   936 
       
   937     def test_warn_3(self):
       
   938         s = """g.throw("foo", 5, 6)"""
       
   939         self.warns_unchanged(s, "Python 3 does not support string exceptions")
       
   940 
       
   941     # These should not be touched
       
   942 
       
   943     def test_untouched_1(self):
       
   944         s = """g.throw(Exception)"""
       
   945         self.unchanged(s)
       
   946 
       
   947     def test_untouched_2(self):
       
   948         s = """g.throw(Exception(5, 6))"""
       
   949         self.unchanged(s)
       
   950 
       
   951     def test_untouched_3(self):
       
   952         s = """5 + g.throw(Exception(5, 6))"""
       
   953         self.unchanged(s)
       
   954 
       
   955     # These should result in traceback-assignment
       
   956 
       
   957     def test_tb_1(self):
       
   958         b = """def foo():
       
   959                     g.throw(Exception, 5, 6)"""
       
   960         a = """def foo():
       
   961                     g.throw(Exception(5).with_traceback(6))"""
       
   962         self.check(b, a)
       
   963 
       
   964     def test_tb_2(self):
       
   965         b = """def foo():
       
   966                     a = 5
       
   967                     g.throw(Exception, 5, 6)
       
   968                     b = 6"""
       
   969         a = """def foo():
       
   970                     a = 5
       
   971                     g.throw(Exception(5).with_traceback(6))
       
   972                     b = 6"""
       
   973         self.check(b, a)
       
   974 
       
   975     def test_tb_3(self):
       
   976         b = """def foo():
       
   977                     g.throw(Exception,5,6)"""
       
   978         a = """def foo():
       
   979                     g.throw(Exception(5).with_traceback(6))"""
       
   980         self.check(b, a)
       
   981 
       
   982     def test_tb_4(self):
       
   983         b = """def foo():
       
   984                     a = 5
       
   985                     g.throw(Exception,5,6)
       
   986                     b = 6"""
       
   987         a = """def foo():
       
   988                     a = 5
       
   989                     g.throw(Exception(5).with_traceback(6))
       
   990                     b = 6"""
       
   991         self.check(b, a)
       
   992 
       
   993     def test_tb_5(self):
       
   994         b = """def foo():
       
   995                     g.throw(Exception, (5, 6, 7), 6)"""
       
   996         a = """def foo():
       
   997                     g.throw(Exception(5, 6, 7).with_traceback(6))"""
       
   998         self.check(b, a)
       
   999 
       
  1000     def test_tb_6(self):
       
  1001         b = """def foo():
       
  1002                     a = 5
       
  1003                     g.throw(Exception, (5, 6, 7), 6)
       
  1004                     b = 6"""
       
  1005         a = """def foo():
       
  1006                     a = 5
       
  1007                     g.throw(Exception(5, 6, 7).with_traceback(6))
       
  1008                     b = 6"""
       
  1009         self.check(b, a)
       
  1010 
       
  1011     def test_tb_7(self):
       
  1012         b = """def foo():
       
  1013                     a + g.throw(Exception, 5, 6)"""
       
  1014         a = """def foo():
       
  1015                     a + g.throw(Exception(5).with_traceback(6))"""
       
  1016         self.check(b, a)
       
  1017 
       
  1018     def test_tb_8(self):
       
  1019         b = """def foo():
       
  1020                     a = 5
       
  1021                     a + g.throw(Exception, 5, 6)
       
  1022                     b = 6"""
       
  1023         a = """def foo():
       
  1024                     a = 5
       
  1025                     a + g.throw(Exception(5).with_traceback(6))
       
  1026                     b = 6"""
       
  1027         self.check(b, a)
       
  1028 
       
  1029 class Test_long(FixerTestCase):
       
  1030     fixer = "long"
       
  1031 
       
  1032     def test_1(self):
       
  1033         b = """x = long(x)"""
       
  1034         a = """x = int(x)"""
       
  1035         self.check(b, a)
       
  1036 
       
  1037     def test_2(self):
       
  1038         b = """y = isinstance(x, long)"""
       
  1039         a = """y = isinstance(x, int)"""
       
  1040         self.check(b, a)
       
  1041 
       
  1042     def test_3(self):
       
  1043         b = """z = type(x) in (int, long)"""
       
  1044         a = """z = type(x) in (int, int)"""
       
  1045         self.check(b, a)
       
  1046 
       
  1047     def test_4(self):
       
  1048         b = """a = 12L"""
       
  1049         a = """a = 12"""
       
  1050         self.check(b, a)
       
  1051 
       
  1052     def test_5(self):
       
  1053         b = """b = 0x12l"""
       
  1054         a = """b = 0x12"""
       
  1055         self.check(b, a)
       
  1056 
       
  1057     def test_unchanged_1(self):
       
  1058         s = """a = 12"""
       
  1059         self.unchanged(s)
       
  1060 
       
  1061     def test_unchanged_2(self):
       
  1062         s = """b = 0x12"""
       
  1063         self.unchanged(s)
       
  1064 
       
  1065     def test_unchanged_3(self):
       
  1066         s = """c = 3.14"""
       
  1067         self.unchanged(s)
       
  1068 
       
  1069     def test_prefix_preservation(self):
       
  1070         b = """x =   long(  x  )"""
       
  1071         a = """x =   int(  x  )"""
       
  1072         self.check(b, a)
       
  1073 
       
  1074 class Test_dict(FixerTestCase):
       
  1075     fixer = "dict"
       
  1076 
       
  1077     def test_prefix_preservation(self):
       
  1078         b = "if   d. keys  (  )  : pass"
       
  1079         a = "if   list(d. keys  (  ))  : pass"
       
  1080         self.check(b, a)
       
  1081 
       
  1082         b = "if   d. items  (  )  : pass"
       
  1083         a = "if   list(d. items  (  ))  : pass"
       
  1084         self.check(b, a)
       
  1085 
       
  1086         b = "if   d. iterkeys  ( )  : pass"
       
  1087         a = "if   iter(d. keys  ( ))  : pass"
       
  1088         self.check(b, a)
       
  1089 
       
  1090         b = "[i for i in    d.  iterkeys(  )  ]"
       
  1091         a = "[i for i in    d.  keys(  )  ]"
       
  1092         self.check(b, a)
       
  1093 
       
  1094     def test_trailing_comment(self):
       
  1095         b = "d.keys() # foo"
       
  1096         a = "list(d.keys()) # foo"
       
  1097         self.check(b, a)
       
  1098 
       
  1099         b = "d.items()  # foo"
       
  1100         a = "list(d.items())  # foo"
       
  1101         self.check(b, a)
       
  1102 
       
  1103         b = "d.iterkeys()  # foo"
       
  1104         a = "iter(d.keys())  # foo"
       
  1105         self.check(b, a)
       
  1106 
       
  1107         b = """[i for i in d.iterkeys() # foo
       
  1108                ]"""
       
  1109         a = """[i for i in d.keys() # foo
       
  1110                ]"""
       
  1111         self.check(b, a)
       
  1112 
       
  1113     def test_unchanged(self):
       
  1114         for wrapper in fixer_util.consuming_calls:
       
  1115             s = "s = %s(d.keys())" % wrapper
       
  1116             self.unchanged(s)
       
  1117 
       
  1118             s = "s = %s(d.values())" % wrapper
       
  1119             self.unchanged(s)
       
  1120 
       
  1121             s = "s = %s(d.items())" % wrapper
       
  1122             self.unchanged(s)
       
  1123 
       
  1124     def test_01(self):
       
  1125         b = "d.keys()"
       
  1126         a = "list(d.keys())"
       
  1127         self.check(b, a)
       
  1128 
       
  1129         b = "a[0].foo().keys()"
       
  1130         a = "list(a[0].foo().keys())"
       
  1131         self.check(b, a)
       
  1132 
       
  1133     def test_02(self):
       
  1134         b = "d.items()"
       
  1135         a = "list(d.items())"
       
  1136         self.check(b, a)
       
  1137 
       
  1138     def test_03(self):
       
  1139         b = "d.values()"
       
  1140         a = "list(d.values())"
       
  1141         self.check(b, a)
       
  1142 
       
  1143     def test_04(self):
       
  1144         b = "d.iterkeys()"
       
  1145         a = "iter(d.keys())"
       
  1146         self.check(b, a)
       
  1147 
       
  1148     def test_05(self):
       
  1149         b = "d.iteritems()"
       
  1150         a = "iter(d.items())"
       
  1151         self.check(b, a)
       
  1152 
       
  1153     def test_06(self):
       
  1154         b = "d.itervalues()"
       
  1155         a = "iter(d.values())"
       
  1156         self.check(b, a)
       
  1157 
       
  1158     def test_07(self):
       
  1159         s = "list(d.keys())"
       
  1160         self.unchanged(s)
       
  1161 
       
  1162     def test_08(self):
       
  1163         s = "sorted(d.keys())"
       
  1164         self.unchanged(s)
       
  1165 
       
  1166     def test_09(self):
       
  1167         b = "iter(d.keys())"
       
  1168         a = "iter(list(d.keys()))"
       
  1169         self.check(b, a)
       
  1170 
       
  1171     def test_10(self):
       
  1172         b = "foo(d.keys())"
       
  1173         a = "foo(list(d.keys()))"
       
  1174         self.check(b, a)
       
  1175 
       
  1176     def test_11(self):
       
  1177         b = "for i in d.keys(): print i"
       
  1178         a = "for i in list(d.keys()): print i"
       
  1179         self.check(b, a)
       
  1180 
       
  1181     def test_12(self):
       
  1182         b = "for i in d.iterkeys(): print i"
       
  1183         a = "for i in d.keys(): print i"
       
  1184         self.check(b, a)
       
  1185 
       
  1186     def test_13(self):
       
  1187         b = "[i for i in d.keys()]"
       
  1188         a = "[i for i in list(d.keys())]"
       
  1189         self.check(b, a)
       
  1190 
       
  1191     def test_14(self):
       
  1192         b = "[i for i in d.iterkeys()]"
       
  1193         a = "[i for i in d.keys()]"
       
  1194         self.check(b, a)
       
  1195 
       
  1196     def test_15(self):
       
  1197         b = "(i for i in d.keys())"
       
  1198         a = "(i for i in list(d.keys()))"
       
  1199         self.check(b, a)
       
  1200 
       
  1201     def test_16(self):
       
  1202         b = "(i for i in d.iterkeys())"
       
  1203         a = "(i for i in d.keys())"
       
  1204         self.check(b, a)
       
  1205 
       
  1206     def test_17(self):
       
  1207         b = "iter(d.iterkeys())"
       
  1208         a = "iter(d.keys())"
       
  1209         self.check(b, a)
       
  1210 
       
  1211     def test_18(self):
       
  1212         b = "list(d.iterkeys())"
       
  1213         a = "list(d.keys())"
       
  1214         self.check(b, a)
       
  1215 
       
  1216     def test_19(self):
       
  1217         b = "sorted(d.iterkeys())"
       
  1218         a = "sorted(d.keys())"
       
  1219         self.check(b, a)
       
  1220 
       
  1221     def test_20(self):
       
  1222         b = "foo(d.iterkeys())"
       
  1223         a = "foo(iter(d.keys()))"
       
  1224         self.check(b, a)
       
  1225 
       
  1226     def test_21(self):
       
  1227         b = "print h.iterkeys().next()"
       
  1228         a = "print iter(h.keys()).next()"
       
  1229         self.check(b, a)
       
  1230 
       
  1231     def test_22(self):
       
  1232         b = "print h.keys()[0]"
       
  1233         a = "print list(h.keys())[0]"
       
  1234         self.check(b, a)
       
  1235 
       
  1236     def test_23(self):
       
  1237         b = "print list(h.iterkeys().next())"
       
  1238         a = "print list(iter(h.keys()).next())"
       
  1239         self.check(b, a)
       
  1240 
       
  1241     def test_24(self):
       
  1242         b = "for x in h.keys()[0]: print x"
       
  1243         a = "for x in list(h.keys())[0]: print x"
       
  1244         self.check(b, a)
       
  1245 
       
  1246 class Test_xrange(FixerTestCase):
       
  1247     fixer = "xrange"
       
  1248 
       
  1249     def test_prefix_preservation(self):
       
  1250         b = """x =    xrange(  10  )"""
       
  1251         a = """x =    range(  10  )"""
       
  1252         self.check(b, a)
       
  1253 
       
  1254         b = """x = xrange(  1  ,  10   )"""
       
  1255         a = """x = range(  1  ,  10   )"""
       
  1256         self.check(b, a)
       
  1257 
       
  1258         b = """x = xrange(  0  ,  10 ,  2 )"""
       
  1259         a = """x = range(  0  ,  10 ,  2 )"""
       
  1260         self.check(b, a)
       
  1261 
       
  1262     def test_single_arg(self):
       
  1263         b = """x = xrange(10)"""
       
  1264         a = """x = range(10)"""
       
  1265         self.check(b, a)
       
  1266 
       
  1267     def test_two_args(self):
       
  1268         b = """x = xrange(1, 10)"""
       
  1269         a = """x = range(1, 10)"""
       
  1270         self.check(b, a)
       
  1271 
       
  1272     def test_three_args(self):
       
  1273         b = """x = xrange(0, 10, 2)"""
       
  1274         a = """x = range(0, 10, 2)"""
       
  1275         self.check(b, a)
       
  1276 
       
  1277     def test_wrap_in_list(self):
       
  1278         b = """x = range(10, 3, 9)"""
       
  1279         a = """x = list(range(10, 3, 9))"""
       
  1280         self.check(b, a)
       
  1281 
       
  1282         b = """x = foo(range(10, 3, 9))"""
       
  1283         a = """x = foo(list(range(10, 3, 9)))"""
       
  1284         self.check(b, a)
       
  1285 
       
  1286         b = """x = range(10, 3, 9) + [4]"""
       
  1287         a = """x = list(range(10, 3, 9)) + [4]"""
       
  1288         self.check(b, a)
       
  1289 
       
  1290     def test_xrange_in_for(self):
       
  1291         b = """for i in xrange(10):\n    j=i"""
       
  1292         a = """for i in range(10):\n    j=i"""
       
  1293         self.check(b, a)
       
  1294 
       
  1295         b = """[i for i in xrange(10)]"""
       
  1296         a = """[i for i in range(10)]"""
       
  1297         self.check(b, a)
       
  1298 
       
  1299     def test_range_in_for(self):
       
  1300         self.unchanged("for i in range(10): pass")
       
  1301         self.unchanged("[i for i in range(10)]")
       
  1302 
       
  1303     def test_in_contains_test(self):
       
  1304         self.unchanged("x in range(10, 3, 9)")
       
  1305 
       
  1306     def test_in_consuming_context(self):
       
  1307         for call in fixer_util.consuming_calls:
       
  1308             self.unchanged("a = %s(range(10))" % call)
       
  1309 
       
  1310 class Test_raw_input(FixerTestCase):
       
  1311     fixer = "raw_input"
       
  1312 
       
  1313     def test_prefix_preservation(self):
       
  1314         b = """x =    raw_input(   )"""
       
  1315         a = """x =    input(   )"""
       
  1316         self.check(b, a)
       
  1317 
       
  1318         b = """x = raw_input(   ''   )"""
       
  1319         a = """x = input(   ''   )"""
       
  1320         self.check(b, a)
       
  1321 
       
  1322     def test_1(self):
       
  1323         b = """x = raw_input()"""
       
  1324         a = """x = input()"""
       
  1325         self.check(b, a)
       
  1326 
       
  1327     def test_2(self):
       
  1328         b = """x = raw_input('')"""
       
  1329         a = """x = input('')"""
       
  1330         self.check(b, a)
       
  1331 
       
  1332     def test_3(self):
       
  1333         b = """x = raw_input('prompt')"""
       
  1334         a = """x = input('prompt')"""
       
  1335         self.check(b, a)
       
  1336 
       
  1337     def test_4(self):
       
  1338         b = """x = raw_input(foo(a) + 6)"""
       
  1339         a = """x = input(foo(a) + 6)"""
       
  1340         self.check(b, a)
       
  1341 
       
  1342     def test_5(self):
       
  1343         b = """x = raw_input(invite).split()"""
       
  1344         a = """x = input(invite).split()"""
       
  1345         self.check(b, a)
       
  1346 
       
  1347     def test_6(self):
       
  1348         b = """x = raw_input(invite) . split ()"""
       
  1349         a = """x = input(invite) . split ()"""
       
  1350         self.check(b, a)
       
  1351 
       
  1352     def test_8(self):
       
  1353         b = "x = int(raw_input())"
       
  1354         a = "x = int(input())"
       
  1355         self.check(b, a)
       
  1356 
       
  1357 class Test_funcattrs(FixerTestCase):
       
  1358     fixer = "funcattrs"
       
  1359 
       
  1360     attrs = ["closure", "doc", "name", "defaults", "code", "globals", "dict"]
       
  1361 
       
  1362     def test(self):
       
  1363         for attr in self.attrs:
       
  1364             b = "a.func_%s" % attr
       
  1365             a = "a.__%s__" % attr
       
  1366             self.check(b, a)
       
  1367 
       
  1368             b = "self.foo.func_%s.foo_bar" % attr
       
  1369             a = "self.foo.__%s__.foo_bar" % attr
       
  1370             self.check(b, a)
       
  1371 
       
  1372     def test_unchanged(self):
       
  1373         for attr in self.attrs:
       
  1374             s = "foo(func_%s + 5)" % attr
       
  1375             self.unchanged(s)
       
  1376 
       
  1377             s = "f(foo.__%s__)" % attr
       
  1378             self.unchanged(s)
       
  1379 
       
  1380             s = "f(foo.__%s__.foo)" % attr
       
  1381             self.unchanged(s)
       
  1382 
       
  1383 class Test_xreadlines(FixerTestCase):
       
  1384     fixer = "xreadlines"
       
  1385 
       
  1386     def test_call(self):
       
  1387         b = "for x in f.xreadlines(): pass"
       
  1388         a = "for x in f: pass"
       
  1389         self.check(b, a)
       
  1390 
       
  1391         b = "for x in foo().xreadlines(): pass"
       
  1392         a = "for x in foo(): pass"
       
  1393         self.check(b, a)
       
  1394 
       
  1395         b = "for x in (5 + foo()).xreadlines(): pass"
       
  1396         a = "for x in (5 + foo()): pass"
       
  1397         self.check(b, a)
       
  1398 
       
  1399     def test_attr_ref(self):
       
  1400         b = "foo(f.xreadlines + 5)"
       
  1401         a = "foo(f.__iter__ + 5)"
       
  1402         self.check(b, a)
       
  1403 
       
  1404         b = "foo(f().xreadlines + 5)"
       
  1405         a = "foo(f().__iter__ + 5)"
       
  1406         self.check(b, a)
       
  1407 
       
  1408         b = "foo((5 + f()).xreadlines + 5)"
       
  1409         a = "foo((5 + f()).__iter__ + 5)"
       
  1410         self.check(b, a)
       
  1411 
       
  1412     def test_unchanged(self):
       
  1413         s = "for x in f.xreadlines(5): pass"
       
  1414         self.unchanged(s)
       
  1415 
       
  1416         s = "for x in f.xreadlines(k=5): pass"
       
  1417         self.unchanged(s)
       
  1418 
       
  1419         s = "for x in f.xreadlines(*k, **v): pass"
       
  1420         self.unchanged(s)
       
  1421 
       
  1422         s = "foo(xreadlines)"
       
  1423         self.unchanged(s)
       
  1424 
       
  1425 class Test_imports(FixerTestCase):
       
  1426     fixer = "imports"
       
  1427     from ..fixes.fix_imports import MAPPING as modules
       
  1428 
       
  1429     def test_import_module(self):
       
  1430         for old, new in self.modules.items():
       
  1431             b = "import %s" % old
       
  1432             a = "import %s" % new
       
  1433             self.check(b, a)
       
  1434 
       
  1435             b = "import foo, %s, bar" % old
       
  1436             a = "import foo, %s, bar" % new
       
  1437             self.check(b, a)
       
  1438 
       
  1439     def test_import_from(self):
       
  1440         for old, new in self.modules.items():
       
  1441             b = "from %s import foo" % old
       
  1442             a = "from %s import foo" % new
       
  1443             self.check(b, a)
       
  1444 
       
  1445             b = "from %s import foo, bar" % old
       
  1446             a = "from %s import foo, bar" % new
       
  1447             self.check(b, a)
       
  1448 
       
  1449             b = "from %s import (yes, no)" % old
       
  1450             a = "from %s import (yes, no)" % new
       
  1451             self.check(b, a)
       
  1452 
       
  1453     def test_import_module_as(self):
       
  1454         for old, new in self.modules.items():
       
  1455             b = "import %s as foo_bar" % old
       
  1456             a = "import %s as foo_bar" % new
       
  1457             self.check(b, a)
       
  1458 
       
  1459             b = "import %s as foo_bar" % old
       
  1460             a = "import %s as foo_bar" % new
       
  1461             self.check(b, a)
       
  1462 
       
  1463     def test_import_from_as(self):
       
  1464         for old, new in self.modules.items():
       
  1465             b = "from %s import foo as bar" % old
       
  1466             a = "from %s import foo as bar" % new
       
  1467             self.check(b, a)
       
  1468 
       
  1469     def test_star(self):
       
  1470         for old, new in self.modules.items():
       
  1471             b = "from %s import *" % old
       
  1472             a = "from %s import *" % new
       
  1473             self.check(b, a)
       
  1474 
       
  1475     def test_import_module_usage(self):
       
  1476         for old, new in self.modules.items():
       
  1477             b = """
       
  1478                 import %s
       
  1479                 foo(%s.bar)
       
  1480                 """ % (old, old)
       
  1481             a = """
       
  1482                 import %s
       
  1483                 foo(%s.bar)
       
  1484                 """ % (new, new)
       
  1485             self.check(b, a)
       
  1486 
       
  1487             b = """
       
  1488                 from %s import x
       
  1489                 %s = 23
       
  1490                 """ % (old, old)
       
  1491             a = """
       
  1492                 from %s import x
       
  1493                 %s = 23
       
  1494                 """ % (new, old)
       
  1495             self.check(b, a)
       
  1496 
       
  1497             s = """
       
  1498                 def f():
       
  1499                     %s.method()
       
  1500                 """ % (old,)
       
  1501             self.unchanged(s)
       
  1502 
       
  1503             # test nested usage
       
  1504             b = """
       
  1505                 import %s
       
  1506                 %s.bar(%s.foo)
       
  1507                 """ % (old, old, old)
       
  1508             a = """
       
  1509                 import %s
       
  1510                 %s.bar(%s.foo)
       
  1511                 """ % (new, new, new)
       
  1512             self.check(b, a)
       
  1513 
       
  1514             b = """
       
  1515                 import %s
       
  1516                 x.%s
       
  1517                 """ % (old, old)
       
  1518             a = """
       
  1519                 import %s
       
  1520                 x.%s
       
  1521                 """ % (new, old)
       
  1522             self.check(b, a)
       
  1523 
       
  1524 
       
  1525 
       
  1526 class Test_imports2(Test_imports):
       
  1527     fixer = "imports2"
       
  1528     from ..fixes.fix_imports2 import MAPPING as modules
       
  1529 
       
  1530 
       
  1531 class Test_imports_fixer_order(Test_imports):
       
  1532 
       
  1533     fixer = None
       
  1534 
       
  1535     def setUp(self):
       
  1536         Test_imports.setUp(self, ['imports', 'imports2'])
       
  1537         from ..fixes.fix_imports2 import MAPPING as mapping2
       
  1538         self.modules = mapping2.copy()
       
  1539         from ..fixes.fix_imports import MAPPING as mapping1
       
  1540         for key in ('dbhash', 'dumbdbm', 'dbm', 'gdbm'):
       
  1541             self.modules[key] = mapping1[key]
       
  1542 
       
  1543 
       
  1544 class Test_urllib(FixerTestCase):
       
  1545     fixer = "urllib"
       
  1546     from ..fixes.fix_urllib import MAPPING as modules
       
  1547 
       
  1548     def test_import_module(self):
       
  1549         for old, changes in self.modules.items():
       
  1550             b = "import %s" % old
       
  1551             a = "import %s" % ", ".join(map(itemgetter(0), changes))
       
  1552             self.check(b, a)
       
  1553 
       
  1554     def test_import_from(self):
       
  1555         for old, changes in self.modules.items():
       
  1556             all_members = []
       
  1557             for new, members in changes:
       
  1558                 for member in members:
       
  1559                     all_members.append(member)
       
  1560                     b = "from %s import %s" % (old, member)
       
  1561                     a = "from %s import %s" % (new, member)
       
  1562                     self.check(b, a)
       
  1563 
       
  1564                     s = "from foo import %s" % member
       
  1565                     self.unchanged(s)
       
  1566 
       
  1567                 b = "from %s import %s" % (old, ", ".join(members))
       
  1568                 a = "from %s import %s" % (new, ", ".join(members))
       
  1569                 self.check(b, a)
       
  1570 
       
  1571                 s = "from foo import %s" % ", ".join(members)
       
  1572                 self.unchanged(s)
       
  1573 
       
  1574             # test the breaking of a module into multiple replacements
       
  1575             b = "from %s import %s" % (old, ", ".join(all_members))
       
  1576             a = "\n".join(["from %s import %s" % (new, ", ".join(members))
       
  1577                             for (new, members) in changes])
       
  1578             self.check(b, a)
       
  1579 
       
  1580     def test_import_module_as(self):
       
  1581         for old in self.modules:
       
  1582             s = "import %s as foo" % old
       
  1583             self.warns_unchanged(s, "This module is now multiple modules")
       
  1584 
       
  1585     def test_import_from_as(self):
       
  1586         for old, changes in self.modules.items():
       
  1587             for new, members in changes:
       
  1588                 for member in members:
       
  1589                     b = "from %s import %s as foo_bar" % (old, member)
       
  1590                     a = "from %s import %s as foo_bar" % (new, member)
       
  1591                     self.check(b, a)
       
  1592 
       
  1593     def test_star(self):
       
  1594         for old in self.modules:
       
  1595             s = "from %s import *" % old
       
  1596             self.warns_unchanged(s, "Cannot handle star imports")
       
  1597 
       
  1598     def test_import_module_usage(self):
       
  1599         for old, changes in self.modules.items():
       
  1600             for new, members in changes:
       
  1601                 for member in members:
       
  1602                     b = """
       
  1603                         import %s
       
  1604                         foo(%s.%s)
       
  1605                         """ % (old, old, member)
       
  1606                     a = """
       
  1607                         import %s
       
  1608                         foo(%s.%s)
       
  1609                         """ % (", ".join([n for (n, mems)
       
  1610                                            in self.modules[old]]),
       
  1611                                          new, member)
       
  1612                     self.check(b, a)
       
  1613 
       
  1614 
       
  1615 class Test_input(FixerTestCase):
       
  1616     fixer = "input"
       
  1617 
       
  1618     def test_prefix_preservation(self):
       
  1619         b = """x =   input(   )"""
       
  1620         a = """x =   eval(input(   ))"""
       
  1621         self.check(b, a)
       
  1622 
       
  1623         b = """x = input(   ''   )"""
       
  1624         a = """x = eval(input(   ''   ))"""
       
  1625         self.check(b, a)
       
  1626 
       
  1627     def test_trailing_comment(self):
       
  1628         b = """x = input()  #  foo"""
       
  1629         a = """x = eval(input())  #  foo"""
       
  1630         self.check(b, a)
       
  1631 
       
  1632     def test_idempotency(self):
       
  1633         s = """x = eval(input())"""
       
  1634         self.unchanged(s)
       
  1635 
       
  1636         s = """x = eval(input(''))"""
       
  1637         self.unchanged(s)
       
  1638 
       
  1639         s = """x = eval(input(foo(5) + 9))"""
       
  1640         self.unchanged(s)
       
  1641 
       
  1642     def test_1(self):
       
  1643         b = """x = input()"""
       
  1644         a = """x = eval(input())"""
       
  1645         self.check(b, a)
       
  1646 
       
  1647     def test_2(self):
       
  1648         b = """x = input('')"""
       
  1649         a = """x = eval(input(''))"""
       
  1650         self.check(b, a)
       
  1651 
       
  1652     def test_3(self):
       
  1653         b = """x = input('prompt')"""
       
  1654         a = """x = eval(input('prompt'))"""
       
  1655         self.check(b, a)
       
  1656 
       
  1657     def test_4(self):
       
  1658         b = """x = input(foo(5) + 9)"""
       
  1659         a = """x = eval(input(foo(5) + 9))"""
       
  1660         self.check(b, a)
       
  1661 
       
  1662 class Test_tuple_params(FixerTestCase):
       
  1663     fixer = "tuple_params"
       
  1664 
       
  1665     def test_unchanged_1(self):
       
  1666         s = """def foo(): pass"""
       
  1667         self.unchanged(s)
       
  1668 
       
  1669     def test_unchanged_2(self):
       
  1670         s = """def foo(a, b, c): pass"""
       
  1671         self.unchanged(s)
       
  1672 
       
  1673     def test_unchanged_3(self):
       
  1674         s = """def foo(a=3, b=4, c=5): pass"""
       
  1675         self.unchanged(s)
       
  1676 
       
  1677     def test_1(self):
       
  1678         b = """
       
  1679             def foo(((a, b), c)):
       
  1680                 x = 5"""
       
  1681 
       
  1682         a = """
       
  1683             def foo(xxx_todo_changeme):
       
  1684                 ((a, b), c) = xxx_todo_changeme
       
  1685                 x = 5"""
       
  1686         self.check(b, a)
       
  1687 
       
  1688     def test_2(self):
       
  1689         b = """
       
  1690             def foo(((a, b), c), d):
       
  1691                 x = 5"""
       
  1692 
       
  1693         a = """
       
  1694             def foo(xxx_todo_changeme, d):
       
  1695                 ((a, b), c) = xxx_todo_changeme
       
  1696                 x = 5"""
       
  1697         self.check(b, a)
       
  1698 
       
  1699     def test_3(self):
       
  1700         b = """
       
  1701             def foo(((a, b), c), d) -> e:
       
  1702                 x = 5"""
       
  1703 
       
  1704         a = """
       
  1705             def foo(xxx_todo_changeme, d) -> e:
       
  1706                 ((a, b), c) = xxx_todo_changeme
       
  1707                 x = 5"""
       
  1708         self.check(b, a)
       
  1709 
       
  1710     def test_semicolon(self):
       
  1711         b = """
       
  1712             def foo(((a, b), c)): x = 5; y = 7"""
       
  1713 
       
  1714         a = """
       
  1715             def foo(xxx_todo_changeme): ((a, b), c) = xxx_todo_changeme; x = 5; y = 7"""
       
  1716         self.check(b, a)
       
  1717 
       
  1718     def test_keywords(self):
       
  1719         b = """
       
  1720             def foo(((a, b), c), d, e=5) -> z:
       
  1721                 x = 5"""
       
  1722 
       
  1723         a = """
       
  1724             def foo(xxx_todo_changeme, d, e=5) -> z:
       
  1725                 ((a, b), c) = xxx_todo_changeme
       
  1726                 x = 5"""
       
  1727         self.check(b, a)
       
  1728 
       
  1729     def test_varargs(self):
       
  1730         b = """
       
  1731             def foo(((a, b), c), d, *vargs, **kwargs) -> z:
       
  1732                 x = 5"""
       
  1733 
       
  1734         a = """
       
  1735             def foo(xxx_todo_changeme, d, *vargs, **kwargs) -> z:
       
  1736                 ((a, b), c) = xxx_todo_changeme
       
  1737                 x = 5"""
       
  1738         self.check(b, a)
       
  1739 
       
  1740     def test_multi_1(self):
       
  1741         b = """
       
  1742             def foo(((a, b), c), (d, e, f)) -> z:
       
  1743                 x = 5"""
       
  1744 
       
  1745         a = """
       
  1746             def foo(xxx_todo_changeme, xxx_todo_changeme1) -> z:
       
  1747                 ((a, b), c) = xxx_todo_changeme
       
  1748                 (d, e, f) = xxx_todo_changeme1
       
  1749                 x = 5"""
       
  1750         self.check(b, a)
       
  1751 
       
  1752     def test_multi_2(self):
       
  1753         b = """
       
  1754             def foo(x, ((a, b), c), d, (e, f, g), y) -> z:
       
  1755                 x = 5"""
       
  1756 
       
  1757         a = """
       
  1758             def foo(x, xxx_todo_changeme, d, xxx_todo_changeme1, y) -> z:
       
  1759                 ((a, b), c) = xxx_todo_changeme
       
  1760                 (e, f, g) = xxx_todo_changeme1
       
  1761                 x = 5"""
       
  1762         self.check(b, a)
       
  1763 
       
  1764     def test_docstring(self):
       
  1765         b = """
       
  1766             def foo(((a, b), c), (d, e, f)) -> z:
       
  1767                 "foo foo foo foo"
       
  1768                 x = 5"""
       
  1769 
       
  1770         a = """
       
  1771             def foo(xxx_todo_changeme, xxx_todo_changeme1) -> z:
       
  1772                 "foo foo foo foo"
       
  1773                 ((a, b), c) = xxx_todo_changeme
       
  1774                 (d, e, f) = xxx_todo_changeme1
       
  1775                 x = 5"""
       
  1776         self.check(b, a)
       
  1777 
       
  1778     def test_lambda_no_change(self):
       
  1779         s = """lambda x: x + 5"""
       
  1780         self.unchanged(s)
       
  1781 
       
  1782     def test_lambda_parens_single_arg(self):
       
  1783         b = """lambda (x): x + 5"""
       
  1784         a = """lambda x: x + 5"""
       
  1785         self.check(b, a)
       
  1786 
       
  1787         b = """lambda(x): x + 5"""
       
  1788         a = """lambda x: x + 5"""
       
  1789         self.check(b, a)
       
  1790 
       
  1791         b = """lambda ((((x)))): x + 5"""
       
  1792         a = """lambda x: x + 5"""
       
  1793         self.check(b, a)
       
  1794 
       
  1795         b = """lambda((((x)))): x + 5"""
       
  1796         a = """lambda x: x + 5"""
       
  1797         self.check(b, a)
       
  1798 
       
  1799     def test_lambda_simple(self):
       
  1800         b = """lambda (x, y): x + f(y)"""
       
  1801         a = """lambda x_y: x_y[0] + f(x_y[1])"""
       
  1802         self.check(b, a)
       
  1803 
       
  1804         b = """lambda(x, y): x + f(y)"""
       
  1805         a = """lambda x_y: x_y[0] + f(x_y[1])"""
       
  1806         self.check(b, a)
       
  1807 
       
  1808         b = """lambda (((x, y))): x + f(y)"""
       
  1809         a = """lambda x_y: x_y[0] + f(x_y[1])"""
       
  1810         self.check(b, a)
       
  1811 
       
  1812         b = """lambda(((x, y))): x + f(y)"""
       
  1813         a = """lambda x_y: x_y[0] + f(x_y[1])"""
       
  1814         self.check(b, a)
       
  1815 
       
  1816     def test_lambda_one_tuple(self):
       
  1817         b = """lambda (x,): x + f(x)"""
       
  1818         a = """lambda x1: x1[0] + f(x1[0])"""
       
  1819         self.check(b, a)
       
  1820 
       
  1821         b = """lambda (((x,))): x + f(x)"""
       
  1822         a = """lambda x1: x1[0] + f(x1[0])"""
       
  1823         self.check(b, a)
       
  1824 
       
  1825     def test_lambda_simple_multi_use(self):
       
  1826         b = """lambda (x, y): x + x + f(x) + x"""
       
  1827         a = """lambda x_y: x_y[0] + x_y[0] + f(x_y[0]) + x_y[0]"""
       
  1828         self.check(b, a)
       
  1829 
       
  1830     def test_lambda_simple_reverse(self):
       
  1831         b = """lambda (x, y): y + x"""
       
  1832         a = """lambda x_y: x_y[1] + x_y[0]"""
       
  1833         self.check(b, a)
       
  1834 
       
  1835     def test_lambda_nested(self):
       
  1836         b = """lambda (x, (y, z)): x + y + z"""
       
  1837         a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + x_y_z[1][1]"""
       
  1838         self.check(b, a)
       
  1839 
       
  1840         b = """lambda (((x, (y, z)))): x + y + z"""
       
  1841         a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + x_y_z[1][1]"""
       
  1842         self.check(b, a)
       
  1843 
       
  1844     def test_lambda_nested_multi_use(self):
       
  1845         b = """lambda (x, (y, z)): x + y + f(y)"""
       
  1846         a = """lambda x_y_z: x_y_z[0] + x_y_z[1][0] + f(x_y_z[1][0])"""
       
  1847         self.check(b, a)
       
  1848 
       
  1849 class Test_methodattrs(FixerTestCase):
       
  1850     fixer = "methodattrs"
       
  1851 
       
  1852     attrs = ["func", "self", "class"]
       
  1853 
       
  1854     def test(self):
       
  1855         for attr in self.attrs:
       
  1856             b = "a.im_%s" % attr
       
  1857             if attr == "class":
       
  1858                 a = "a.__self__.__class__"
       
  1859             else:
       
  1860                 a = "a.__%s__" % attr
       
  1861             self.check(b, a)
       
  1862 
       
  1863             b = "self.foo.im_%s.foo_bar" % attr
       
  1864             if attr == "class":
       
  1865                 a = "self.foo.__self__.__class__.foo_bar"
       
  1866             else:
       
  1867                 a = "self.foo.__%s__.foo_bar" % attr
       
  1868             self.check(b, a)
       
  1869 
       
  1870     def test_unchanged(self):
       
  1871         for attr in self.attrs:
       
  1872             s = "foo(im_%s + 5)" % attr
       
  1873             self.unchanged(s)
       
  1874 
       
  1875             s = "f(foo.__%s__)" % attr
       
  1876             self.unchanged(s)
       
  1877 
       
  1878             s = "f(foo.__%s__.foo)" % attr
       
  1879             self.unchanged(s)
       
  1880 
       
  1881 class Test_next(FixerTestCase):
       
  1882     fixer = "next"
       
  1883 
       
  1884     def test_1(self):
       
  1885         b = """it.next()"""
       
  1886         a = """next(it)"""
       
  1887         self.check(b, a)
       
  1888 
       
  1889     def test_2(self):
       
  1890         b = """a.b.c.d.next()"""
       
  1891         a = """next(a.b.c.d)"""
       
  1892         self.check(b, a)
       
  1893 
       
  1894     def test_3(self):
       
  1895         b = """(a + b).next()"""
       
  1896         a = """next((a + b))"""
       
  1897         self.check(b, a)
       
  1898 
       
  1899     def test_4(self):
       
  1900         b = """a().next()"""
       
  1901         a = """next(a())"""
       
  1902         self.check(b, a)
       
  1903 
       
  1904     def test_5(self):
       
  1905         b = """a().next() + b"""
       
  1906         a = """next(a()) + b"""
       
  1907         self.check(b, a)
       
  1908 
       
  1909     def test_6(self):
       
  1910         b = """c(      a().next() + b)"""
       
  1911         a = """c(      next(a()) + b)"""
       
  1912         self.check(b, a)
       
  1913 
       
  1914     def test_prefix_preservation_1(self):
       
  1915         b = """
       
  1916             for a in b:
       
  1917                 foo(a)
       
  1918                 a.next()
       
  1919             """
       
  1920         a = """
       
  1921             for a in b:
       
  1922                 foo(a)
       
  1923                 next(a)
       
  1924             """
       
  1925         self.check(b, a)
       
  1926 
       
  1927     def test_prefix_preservation_2(self):
       
  1928         b = """
       
  1929             for a in b:
       
  1930                 foo(a) # abc
       
  1931                 # def
       
  1932                 a.next()
       
  1933             """
       
  1934         a = """
       
  1935             for a in b:
       
  1936                 foo(a) # abc
       
  1937                 # def
       
  1938                 next(a)
       
  1939             """
       
  1940         self.check(b, a)
       
  1941 
       
  1942     def test_prefix_preservation_3(self):
       
  1943         b = """
       
  1944             next = 5
       
  1945             for a in b:
       
  1946                 foo(a)
       
  1947                 a.next()
       
  1948             """
       
  1949         a = """
       
  1950             next = 5
       
  1951             for a in b:
       
  1952                 foo(a)
       
  1953                 a.__next__()
       
  1954             """
       
  1955         self.check(b, a, ignore_warnings=True)
       
  1956 
       
  1957     def test_prefix_preservation_4(self):
       
  1958         b = """
       
  1959             next = 5
       
  1960             for a in b:
       
  1961                 foo(a) # abc
       
  1962                 # def
       
  1963                 a.next()
       
  1964             """
       
  1965         a = """
       
  1966             next = 5
       
  1967             for a in b:
       
  1968                 foo(a) # abc
       
  1969                 # def
       
  1970                 a.__next__()
       
  1971             """
       
  1972         self.check(b, a, ignore_warnings=True)
       
  1973 
       
  1974     def test_prefix_preservation_5(self):
       
  1975         b = """
       
  1976             next = 5
       
  1977             for a in b:
       
  1978                 foo(foo(a), # abc
       
  1979                     a.next())
       
  1980             """
       
  1981         a = """
       
  1982             next = 5
       
  1983             for a in b:
       
  1984                 foo(foo(a), # abc
       
  1985                     a.__next__())
       
  1986             """
       
  1987         self.check(b, a, ignore_warnings=True)
       
  1988 
       
  1989     def test_prefix_preservation_6(self):
       
  1990         b = """
       
  1991             for a in b:
       
  1992                 foo(foo(a), # abc
       
  1993                     a.next())
       
  1994             """
       
  1995         a = """
       
  1996             for a in b:
       
  1997                 foo(foo(a), # abc
       
  1998                     next(a))
       
  1999             """
       
  2000         self.check(b, a)
       
  2001 
       
  2002     def test_method_1(self):
       
  2003         b = """
       
  2004             class A:
       
  2005                 def next(self):
       
  2006                     pass
       
  2007             """
       
  2008         a = """
       
  2009             class A:
       
  2010                 def __next__(self):
       
  2011                     pass
       
  2012             """
       
  2013         self.check(b, a)
       
  2014 
       
  2015     def test_method_2(self):
       
  2016         b = """
       
  2017             class A(object):
       
  2018                 def next(self):
       
  2019                     pass
       
  2020             """
       
  2021         a = """
       
  2022             class A(object):
       
  2023                 def __next__(self):
       
  2024                     pass
       
  2025             """
       
  2026         self.check(b, a)
       
  2027 
       
  2028     def test_method_3(self):
       
  2029         b = """
       
  2030             class A:
       
  2031                 def next(x):
       
  2032                     pass
       
  2033             """
       
  2034         a = """
       
  2035             class A:
       
  2036                 def __next__(x):
       
  2037                     pass
       
  2038             """
       
  2039         self.check(b, a)
       
  2040 
       
  2041     def test_method_4(self):
       
  2042         b = """
       
  2043             class A:
       
  2044                 def __init__(self, foo):
       
  2045                     self.foo = foo
       
  2046 
       
  2047                 def next(self):
       
  2048                     pass
       
  2049 
       
  2050                 def __iter__(self):
       
  2051                     return self
       
  2052             """
       
  2053         a = """
       
  2054             class A:
       
  2055                 def __init__(self, foo):
       
  2056                     self.foo = foo
       
  2057 
       
  2058                 def __next__(self):
       
  2059                     pass
       
  2060 
       
  2061                 def __iter__(self):
       
  2062                     return self
       
  2063             """
       
  2064         self.check(b, a)
       
  2065 
       
  2066     def test_method_unchanged(self):
       
  2067         s = """
       
  2068             class A:
       
  2069                 def next(self, a, b):
       
  2070                     pass
       
  2071             """
       
  2072         self.unchanged(s)
       
  2073 
       
  2074     def test_shadowing_assign_simple(self):
       
  2075         s = """
       
  2076             next = foo
       
  2077 
       
  2078             class A:
       
  2079                 def next(self, a, b):
       
  2080                     pass
       
  2081             """
       
  2082         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2083 
       
  2084     def test_shadowing_assign_tuple_1(self):
       
  2085         s = """
       
  2086             (next, a) = foo
       
  2087 
       
  2088             class A:
       
  2089                 def next(self, a, b):
       
  2090                     pass
       
  2091             """
       
  2092         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2093 
       
  2094     def test_shadowing_assign_tuple_2(self):
       
  2095         s = """
       
  2096             (a, (b, (next, c)), a) = foo
       
  2097 
       
  2098             class A:
       
  2099                 def next(self, a, b):
       
  2100                     pass
       
  2101             """
       
  2102         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2103 
       
  2104     def test_shadowing_assign_list_1(self):
       
  2105         s = """
       
  2106             [next, a] = foo
       
  2107 
       
  2108             class A:
       
  2109                 def next(self, a, b):
       
  2110                     pass
       
  2111             """
       
  2112         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2113 
       
  2114     def test_shadowing_assign_list_2(self):
       
  2115         s = """
       
  2116             [a, [b, [next, c]], a] = foo
       
  2117 
       
  2118             class A:
       
  2119                 def next(self, a, b):
       
  2120                     pass
       
  2121             """
       
  2122         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2123 
       
  2124     def test_builtin_assign(self):
       
  2125         s = """
       
  2126             def foo():
       
  2127                 __builtin__.next = foo
       
  2128 
       
  2129             class A:
       
  2130                 def next(self, a, b):
       
  2131                     pass
       
  2132             """
       
  2133         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2134 
       
  2135     def test_builtin_assign_in_tuple(self):
       
  2136         s = """
       
  2137             def foo():
       
  2138                 (a, __builtin__.next) = foo
       
  2139 
       
  2140             class A:
       
  2141                 def next(self, a, b):
       
  2142                     pass
       
  2143             """
       
  2144         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2145 
       
  2146     def test_builtin_assign_in_list(self):
       
  2147         s = """
       
  2148             def foo():
       
  2149                 [a, __builtin__.next] = foo
       
  2150 
       
  2151             class A:
       
  2152                 def next(self, a, b):
       
  2153                     pass
       
  2154             """
       
  2155         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2156 
       
  2157     def test_assign_to_next(self):
       
  2158         s = """
       
  2159             def foo():
       
  2160                 A.next = foo
       
  2161 
       
  2162             class A:
       
  2163                 def next(self, a, b):
       
  2164                     pass
       
  2165             """
       
  2166         self.unchanged(s)
       
  2167 
       
  2168     def test_assign_to_next_in_tuple(self):
       
  2169         s = """
       
  2170             def foo():
       
  2171                 (a, A.next) = foo
       
  2172 
       
  2173             class A:
       
  2174                 def next(self, a, b):
       
  2175                     pass
       
  2176             """
       
  2177         self.unchanged(s)
       
  2178 
       
  2179     def test_assign_to_next_in_list(self):
       
  2180         s = """
       
  2181             def foo():
       
  2182                 [a, A.next] = foo
       
  2183 
       
  2184             class A:
       
  2185                 def next(self, a, b):
       
  2186                     pass
       
  2187             """
       
  2188         self.unchanged(s)
       
  2189 
       
  2190     def test_shadowing_import_1(self):
       
  2191         s = """
       
  2192             import foo.bar as next
       
  2193 
       
  2194             class A:
       
  2195                 def next(self, a, b):
       
  2196                     pass
       
  2197             """
       
  2198         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2199 
       
  2200     def test_shadowing_import_2(self):
       
  2201         s = """
       
  2202             import bar, bar.foo as next
       
  2203 
       
  2204             class A:
       
  2205                 def next(self, a, b):
       
  2206                     pass
       
  2207             """
       
  2208         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2209 
       
  2210     def test_shadowing_import_3(self):
       
  2211         s = """
       
  2212             import bar, bar.foo as next, baz
       
  2213 
       
  2214             class A:
       
  2215                 def next(self, a, b):
       
  2216                     pass
       
  2217             """
       
  2218         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2219 
       
  2220     def test_shadowing_import_from_1(self):
       
  2221         s = """
       
  2222             from x import next
       
  2223 
       
  2224             class A:
       
  2225                 def next(self, a, b):
       
  2226                     pass
       
  2227             """
       
  2228         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2229 
       
  2230     def test_shadowing_import_from_2(self):
       
  2231         s = """
       
  2232             from x.a import next
       
  2233 
       
  2234             class A:
       
  2235                 def next(self, a, b):
       
  2236                     pass
       
  2237             """
       
  2238         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2239 
       
  2240     def test_shadowing_import_from_3(self):
       
  2241         s = """
       
  2242             from x import a, next, b
       
  2243 
       
  2244             class A:
       
  2245                 def next(self, a, b):
       
  2246                     pass
       
  2247             """
       
  2248         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2249 
       
  2250     def test_shadowing_import_from_4(self):
       
  2251         s = """
       
  2252             from x.a import a, next, b
       
  2253 
       
  2254             class A:
       
  2255                 def next(self, a, b):
       
  2256                     pass
       
  2257             """
       
  2258         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2259 
       
  2260     def test_shadowing_funcdef_1(self):
       
  2261         s = """
       
  2262             def next(a):
       
  2263                 pass
       
  2264 
       
  2265             class A:
       
  2266                 def next(self, a, b):
       
  2267                     pass
       
  2268             """
       
  2269         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2270 
       
  2271     def test_shadowing_funcdef_2(self):
       
  2272         b = """
       
  2273             def next(a):
       
  2274                 pass
       
  2275 
       
  2276             class A:
       
  2277                 def next(self):
       
  2278                     pass
       
  2279 
       
  2280             it.next()
       
  2281             """
       
  2282         a = """
       
  2283             def next(a):
       
  2284                 pass
       
  2285 
       
  2286             class A:
       
  2287                 def __next__(self):
       
  2288                     pass
       
  2289 
       
  2290             it.__next__()
       
  2291             """
       
  2292         self.warns(b, a, "Calls to builtin next() possibly shadowed")
       
  2293 
       
  2294     def test_shadowing_global_1(self):
       
  2295         s = """
       
  2296             def f():
       
  2297                 global next
       
  2298                 next = 5
       
  2299             """
       
  2300         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2301 
       
  2302     def test_shadowing_global_2(self):
       
  2303         s = """
       
  2304             def f():
       
  2305                 global a, next, b
       
  2306                 next = 5
       
  2307             """
       
  2308         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2309 
       
  2310     def test_shadowing_for_simple(self):
       
  2311         s = """
       
  2312             for next in it():
       
  2313                 pass
       
  2314 
       
  2315             b = 5
       
  2316             c = 6
       
  2317             """
       
  2318         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2319 
       
  2320     def test_shadowing_for_tuple_1(self):
       
  2321         s = """
       
  2322             for next, b in it():
       
  2323                 pass
       
  2324 
       
  2325             b = 5
       
  2326             c = 6
       
  2327             """
       
  2328         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2329 
       
  2330     def test_shadowing_for_tuple_2(self):
       
  2331         s = """
       
  2332             for a, (next, c), b in it():
       
  2333                 pass
       
  2334 
       
  2335             b = 5
       
  2336             c = 6
       
  2337             """
       
  2338         self.warns_unchanged(s, "Calls to builtin next() possibly shadowed")
       
  2339 
       
  2340     def test_noncall_access_1(self):
       
  2341         b = """gnext = g.next"""
       
  2342         a = """gnext = g.__next__"""
       
  2343         self.check(b, a)
       
  2344 
       
  2345     def test_noncall_access_2(self):
       
  2346         b = """f(g.next + 5)"""
       
  2347         a = """f(g.__next__ + 5)"""
       
  2348         self.check(b, a)
       
  2349 
       
  2350     def test_noncall_access_3(self):
       
  2351         b = """f(g().next + 5)"""
       
  2352         a = """f(g().__next__ + 5)"""
       
  2353         self.check(b, a)
       
  2354 
       
  2355 class Test_nonzero(FixerTestCase):
       
  2356     fixer = "nonzero"
       
  2357 
       
  2358     def test_1(self):
       
  2359         b = """
       
  2360             class A:
       
  2361                 def __nonzero__(self):
       
  2362                     pass
       
  2363             """
       
  2364         a = """
       
  2365             class A:
       
  2366                 def __bool__(self):
       
  2367                     pass
       
  2368             """
       
  2369         self.check(b, a)
       
  2370 
       
  2371     def test_2(self):
       
  2372         b = """
       
  2373             class A(object):
       
  2374                 def __nonzero__(self):
       
  2375                     pass
       
  2376             """
       
  2377         a = """
       
  2378             class A(object):
       
  2379                 def __bool__(self):
       
  2380                     pass
       
  2381             """
       
  2382         self.check(b, a)
       
  2383 
       
  2384     def test_unchanged_1(self):
       
  2385         s = """
       
  2386             class A(object):
       
  2387                 def __bool__(self):
       
  2388                     pass
       
  2389             """
       
  2390         self.unchanged(s)
       
  2391 
       
  2392     def test_unchanged_2(self):
       
  2393         s = """
       
  2394             class A(object):
       
  2395                 def __nonzero__(self, a):
       
  2396                     pass
       
  2397             """
       
  2398         self.unchanged(s)
       
  2399 
       
  2400     def test_unchanged_func(self):
       
  2401         s = """
       
  2402             def __nonzero__(self):
       
  2403                 pass
       
  2404             """
       
  2405         self.unchanged(s)
       
  2406 
       
  2407 class Test_numliterals(FixerTestCase):
       
  2408     fixer = "numliterals"
       
  2409 
       
  2410     def test_octal_1(self):
       
  2411         b = """0755"""
       
  2412         a = """0o755"""
       
  2413         self.check(b, a)
       
  2414 
       
  2415     def test_long_int_1(self):
       
  2416         b = """a = 12L"""
       
  2417         a = """a = 12"""
       
  2418         self.check(b, a)
       
  2419 
       
  2420     def test_long_int_2(self):
       
  2421         b = """a = 12l"""
       
  2422         a = """a = 12"""
       
  2423         self.check(b, a)
       
  2424 
       
  2425     def test_long_hex(self):
       
  2426         b = """b = 0x12l"""
       
  2427         a = """b = 0x12"""
       
  2428         self.check(b, a)
       
  2429 
       
  2430     def test_comments_and_spacing(self):
       
  2431         b = """b =   0x12L"""
       
  2432         a = """b =   0x12"""
       
  2433         self.check(b, a)
       
  2434 
       
  2435         b = """b = 0755 # spam"""
       
  2436         a = """b = 0o755 # spam"""
       
  2437         self.check(b, a)
       
  2438 
       
  2439     def test_unchanged_int(self):
       
  2440         s = """5"""
       
  2441         self.unchanged(s)
       
  2442 
       
  2443     def test_unchanged_float(self):
       
  2444         s = """5.0"""
       
  2445         self.unchanged(s)
       
  2446 
       
  2447     def test_unchanged_octal(self):
       
  2448         s = """0o755"""
       
  2449         self.unchanged(s)
       
  2450 
       
  2451     def test_unchanged_hex(self):
       
  2452         s = """0xABC"""
       
  2453         self.unchanged(s)
       
  2454 
       
  2455     def test_unchanged_exp(self):
       
  2456         s = """5.0e10"""
       
  2457         self.unchanged(s)
       
  2458 
       
  2459     def test_unchanged_complex_int(self):
       
  2460         s = """5 + 4j"""
       
  2461         self.unchanged(s)
       
  2462 
       
  2463     def test_unchanged_complex_float(self):
       
  2464         s = """5.4 + 4.9j"""
       
  2465         self.unchanged(s)
       
  2466 
       
  2467     def test_unchanged_complex_bare(self):
       
  2468         s = """4j"""
       
  2469         self.unchanged(s)
       
  2470         s = """4.4j"""
       
  2471         self.unchanged(s)
       
  2472 
       
  2473 class Test_renames(FixerTestCase):
       
  2474     fixer = "renames"
       
  2475 
       
  2476     modules = {"sys":  ("maxint", "maxsize"),
       
  2477               }
       
  2478 
       
  2479     def test_import_from(self):
       
  2480         for mod, (old, new) in self.modules.items():
       
  2481             b = "from %s import %s" % (mod, old)
       
  2482             a = "from %s import %s" % (mod, new)
       
  2483             self.check(b, a)
       
  2484 
       
  2485             s = "from foo import %s" % old
       
  2486             self.unchanged(s)
       
  2487 
       
  2488     def test_import_from_as(self):
       
  2489         for mod, (old, new) in self.modules.items():
       
  2490             b = "from %s import %s as foo_bar" % (mod, old)
       
  2491             a = "from %s import %s as foo_bar" % (mod, new)
       
  2492             self.check(b, a)
       
  2493 
       
  2494     def test_import_module_usage(self):
       
  2495         for mod, (old, new) in self.modules.items():
       
  2496             b = """
       
  2497                 import %s
       
  2498                 foo(%s, %s.%s)
       
  2499                 """ % (mod, mod, mod, old)
       
  2500             a = """
       
  2501                 import %s
       
  2502                 foo(%s, %s.%s)
       
  2503                 """ % (mod, mod, mod, new)
       
  2504             self.check(b, a)
       
  2505 
       
  2506     def XXX_test_from_import_usage(self):
       
  2507         # not implemented yet
       
  2508         for mod, (old, new) in self.modules.items():
       
  2509             b = """
       
  2510                 from %s import %s
       
  2511                 foo(%s, %s)
       
  2512                 """ % (mod, old, mod, old)
       
  2513             a = """
       
  2514                 from %s import %s
       
  2515                 foo(%s, %s)
       
  2516                 """ % (mod, new, mod, new)
       
  2517             self.check(b, a)
       
  2518 
       
  2519 class Test_unicode(FixerTestCase):
       
  2520     fixer = "unicode"
       
  2521 
       
  2522     def test_unicode_call(self):
       
  2523         b = """unicode(x, y, z)"""
       
  2524         a = """str(x, y, z)"""
       
  2525         self.check(b, a)
       
  2526 
       
  2527     def test_unicode_literal_1(self):
       
  2528         b = '''u"x"'''
       
  2529         a = '''"x"'''
       
  2530         self.check(b, a)
       
  2531 
       
  2532     def test_unicode_literal_2(self):
       
  2533         b = """ur'x'"""
       
  2534         a = """r'x'"""
       
  2535         self.check(b, a)
       
  2536 
       
  2537     def test_unicode_literal_3(self):
       
  2538         b = """UR'''x'''"""
       
  2539         a = """R'''x'''"""
       
  2540         self.check(b, a)
       
  2541 
       
  2542 class Test_callable(FixerTestCase):
       
  2543     fixer = "callable"
       
  2544 
       
  2545     def test_prefix_preservation(self):
       
  2546         b = """callable(    x)"""
       
  2547         a = """hasattr(    x, '__call__')"""
       
  2548         self.check(b, a)
       
  2549 
       
  2550         b = """if     callable(x): pass"""
       
  2551         a = """if     hasattr(x, '__call__'): pass"""
       
  2552         self.check(b, a)
       
  2553 
       
  2554     def test_callable_call(self):
       
  2555         b = """callable(x)"""
       
  2556         a = """hasattr(x, '__call__')"""
       
  2557         self.check(b, a)
       
  2558 
       
  2559     def test_callable_should_not_change(self):
       
  2560         a = """callable(*x)"""
       
  2561         self.unchanged(a)
       
  2562 
       
  2563         a = """callable(x, y)"""
       
  2564         self.unchanged(a)
       
  2565 
       
  2566         a = """callable(x, kw=y)"""
       
  2567         self.unchanged(a)
       
  2568 
       
  2569         a = """callable()"""
       
  2570         self.unchanged(a)
       
  2571 
       
  2572 class Test_filter(FixerTestCase):
       
  2573     fixer = "filter"
       
  2574 
       
  2575     def test_prefix_preservation(self):
       
  2576         b = """x =   filter(    foo,     'abc'   )"""
       
  2577         a = """x =   list(filter(    foo,     'abc'   ))"""
       
  2578         self.check(b, a)
       
  2579 
       
  2580         b = """x =   filter(  None , 'abc'  )"""
       
  2581         a = """x =   [_f for _f in 'abc' if _f]"""
       
  2582         self.check(b, a)
       
  2583 
       
  2584     def test_filter_basic(self):
       
  2585         b = """x = filter(None, 'abc')"""
       
  2586         a = """x = [_f for _f in 'abc' if _f]"""
       
  2587         self.check(b, a)
       
  2588 
       
  2589         b = """x = len(filter(f, 'abc'))"""
       
  2590         a = """x = len(list(filter(f, 'abc')))"""
       
  2591         self.check(b, a)
       
  2592 
       
  2593         b = """x = filter(lambda x: x%2 == 0, range(10))"""
       
  2594         a = """x = [x for x in range(10) if x%2 == 0]"""
       
  2595         self.check(b, a)
       
  2596 
       
  2597         # Note the parens around x
       
  2598         b = """x = filter(lambda (x): x%2 == 0, range(10))"""
       
  2599         a = """x = [x for x in range(10) if x%2 == 0]"""
       
  2600         self.check(b, a)
       
  2601 
       
  2602         # XXX This (rare) case is not supported
       
  2603 ##         b = """x = filter(f, 'abc')[0]"""
       
  2604 ##         a = """x = list(filter(f, 'abc'))[0]"""
       
  2605 ##         self.check(b, a)
       
  2606 
       
  2607     def test_filter_nochange(self):
       
  2608         a = """b.join(filter(f, 'abc'))"""
       
  2609         self.unchanged(a)
       
  2610         a = """(a + foo(5)).join(filter(f, 'abc'))"""
       
  2611         self.unchanged(a)
       
  2612         a = """iter(filter(f, 'abc'))"""
       
  2613         self.unchanged(a)
       
  2614         a = """list(filter(f, 'abc'))"""
       
  2615         self.unchanged(a)
       
  2616         a = """list(filter(f, 'abc'))[0]"""
       
  2617         self.unchanged(a)
       
  2618         a = """set(filter(f, 'abc'))"""
       
  2619         self.unchanged(a)
       
  2620         a = """set(filter(f, 'abc')).pop()"""
       
  2621         self.unchanged(a)
       
  2622         a = """tuple(filter(f, 'abc'))"""
       
  2623         self.unchanged(a)
       
  2624         a = """any(filter(f, 'abc'))"""
       
  2625         self.unchanged(a)
       
  2626         a = """all(filter(f, 'abc'))"""
       
  2627         self.unchanged(a)
       
  2628         a = """sum(filter(f, 'abc'))"""
       
  2629         self.unchanged(a)
       
  2630         a = """sorted(filter(f, 'abc'))"""
       
  2631         self.unchanged(a)
       
  2632         a = """sorted(filter(f, 'abc'), key=blah)"""
       
  2633         self.unchanged(a)
       
  2634         a = """sorted(filter(f, 'abc'), key=blah)[0]"""
       
  2635         self.unchanged(a)
       
  2636         a = """for i in filter(f, 'abc'): pass"""
       
  2637         self.unchanged(a)
       
  2638         a = """[x for x in filter(f, 'abc')]"""
       
  2639         self.unchanged(a)
       
  2640         a = """(x for x in filter(f, 'abc'))"""
       
  2641         self.unchanged(a)
       
  2642 
       
  2643     def test_future_builtins(self):
       
  2644         a = "from future_builtins import spam, filter; filter(f, 'ham')"
       
  2645         self.unchanged(a)
       
  2646 
       
  2647         b = """from future_builtins import spam; x = filter(f, 'abc')"""
       
  2648         a = """from future_builtins import spam; x = list(filter(f, 'abc'))"""
       
  2649         self.check(b, a)
       
  2650 
       
  2651         a = "from future_builtins import *; filter(f, 'ham')"
       
  2652         self.unchanged(a)
       
  2653 
       
  2654 class Test_map(FixerTestCase):
       
  2655     fixer = "map"
       
  2656 
       
  2657     def check(self, b, a):
       
  2658         self.unchanged("from future_builtins import map; " + b, a)
       
  2659         FixerTestCase.check(self, b, a)
       
  2660 
       
  2661     def test_prefix_preservation(self):
       
  2662         b = """x =    map(   f,    'abc'   )"""
       
  2663         a = """x =    list(map(   f,    'abc'   ))"""
       
  2664         self.check(b, a)
       
  2665 
       
  2666     def test_trailing_comment(self):
       
  2667         b = """x = map(f, 'abc')   #   foo"""
       
  2668         a = """x = list(map(f, 'abc'))   #   foo"""
       
  2669         self.check(b, a)
       
  2670 
       
  2671     def test_map_basic(self):
       
  2672         b = """x = map(f, 'abc')"""
       
  2673         a = """x = list(map(f, 'abc'))"""
       
  2674         self.check(b, a)
       
  2675 
       
  2676         b = """x = len(map(f, 'abc', 'def'))"""
       
  2677         a = """x = len(list(map(f, 'abc', 'def')))"""
       
  2678         self.check(b, a)
       
  2679 
       
  2680         b = """x = map(None, 'abc')"""
       
  2681         a = """x = list('abc')"""
       
  2682         self.check(b, a)
       
  2683 
       
  2684         b = """x = map(None, 'abc', 'def')"""
       
  2685         a = """x = list(map(None, 'abc', 'def'))"""
       
  2686         self.check(b, a)
       
  2687 
       
  2688         b = """x = map(lambda x: x+1, range(4))"""
       
  2689         a = """x = [x+1 for x in range(4)]"""
       
  2690         self.check(b, a)
       
  2691 
       
  2692         # Note the parens around x
       
  2693         b = """x = map(lambda (x): x+1, range(4))"""
       
  2694         a = """x = [x+1 for x in range(4)]"""
       
  2695         self.check(b, a)
       
  2696 
       
  2697         b = """
       
  2698             foo()
       
  2699             # foo
       
  2700             map(f, x)
       
  2701             """
       
  2702         a = """
       
  2703             foo()
       
  2704             # foo
       
  2705             list(map(f, x))
       
  2706             """
       
  2707         self.warns(b, a, "You should use a for loop here")
       
  2708 
       
  2709         # XXX This (rare) case is not supported
       
  2710 ##         b = """x = map(f, 'abc')[0]"""
       
  2711 ##         a = """x = list(map(f, 'abc'))[0]"""
       
  2712 ##         self.check(b, a)
       
  2713 
       
  2714     def test_map_nochange(self):
       
  2715         a = """b.join(map(f, 'abc'))"""
       
  2716         self.unchanged(a)
       
  2717         a = """(a + foo(5)).join(map(f, 'abc'))"""
       
  2718         self.unchanged(a)
       
  2719         a = """iter(map(f, 'abc'))"""
       
  2720         self.unchanged(a)
       
  2721         a = """list(map(f, 'abc'))"""
       
  2722         self.unchanged(a)
       
  2723         a = """list(map(f, 'abc'))[0]"""
       
  2724         self.unchanged(a)
       
  2725         a = """set(map(f, 'abc'))"""
       
  2726         self.unchanged(a)
       
  2727         a = """set(map(f, 'abc')).pop()"""
       
  2728         self.unchanged(a)
       
  2729         a = """tuple(map(f, 'abc'))"""
       
  2730         self.unchanged(a)
       
  2731         a = """any(map(f, 'abc'))"""
       
  2732         self.unchanged(a)
       
  2733         a = """all(map(f, 'abc'))"""
       
  2734         self.unchanged(a)
       
  2735         a = """sum(map(f, 'abc'))"""
       
  2736         self.unchanged(a)
       
  2737         a = """sorted(map(f, 'abc'))"""
       
  2738         self.unchanged(a)
       
  2739         a = """sorted(map(f, 'abc'), key=blah)"""
       
  2740         self.unchanged(a)
       
  2741         a = """sorted(map(f, 'abc'), key=blah)[0]"""
       
  2742         self.unchanged(a)
       
  2743         a = """for i in map(f, 'abc'): pass"""
       
  2744         self.unchanged(a)
       
  2745         a = """[x for x in map(f, 'abc')]"""
       
  2746         self.unchanged(a)
       
  2747         a = """(x for x in map(f, 'abc'))"""
       
  2748         self.unchanged(a)
       
  2749 
       
  2750     def test_future_builtins(self):
       
  2751         a = "from future_builtins import spam, map, eggs; map(f, 'ham')"
       
  2752         self.unchanged(a)
       
  2753 
       
  2754         b = """from future_builtins import spam, eggs; x = map(f, 'abc')"""
       
  2755         a = """from future_builtins import spam, eggs; x = list(map(f, 'abc'))"""
       
  2756         self.check(b, a)
       
  2757 
       
  2758         a = "from future_builtins import *; map(f, 'ham')"
       
  2759         self.unchanged(a)
       
  2760 
       
  2761 class Test_zip(FixerTestCase):
       
  2762     fixer = "zip"
       
  2763 
       
  2764     def check(self, b, a):
       
  2765         self.unchanged("from future_builtins import zip; " + b, a)
       
  2766         FixerTestCase.check(self, b, a)
       
  2767 
       
  2768     def test_zip_basic(self):
       
  2769         b = """x = zip(a, b, c)"""
       
  2770         a = """x = list(zip(a, b, c))"""
       
  2771         self.check(b, a)
       
  2772 
       
  2773         b = """x = len(zip(a, b))"""
       
  2774         a = """x = len(list(zip(a, b)))"""
       
  2775         self.check(b, a)
       
  2776 
       
  2777     def test_zip_nochange(self):
       
  2778         a = """b.join(zip(a, b))"""
       
  2779         self.unchanged(a)
       
  2780         a = """(a + foo(5)).join(zip(a, b))"""
       
  2781         self.unchanged(a)
       
  2782         a = """iter(zip(a, b))"""
       
  2783         self.unchanged(a)
       
  2784         a = """list(zip(a, b))"""
       
  2785         self.unchanged(a)
       
  2786         a = """list(zip(a, b))[0]"""
       
  2787         self.unchanged(a)
       
  2788         a = """set(zip(a, b))"""
       
  2789         self.unchanged(a)
       
  2790         a = """set(zip(a, b)).pop()"""
       
  2791         self.unchanged(a)
       
  2792         a = """tuple(zip(a, b))"""
       
  2793         self.unchanged(a)
       
  2794         a = """any(zip(a, b))"""
       
  2795         self.unchanged(a)
       
  2796         a = """all(zip(a, b))"""
       
  2797         self.unchanged(a)
       
  2798         a = """sum(zip(a, b))"""
       
  2799         self.unchanged(a)
       
  2800         a = """sorted(zip(a, b))"""
       
  2801         self.unchanged(a)
       
  2802         a = """sorted(zip(a, b), key=blah)"""
       
  2803         self.unchanged(a)
       
  2804         a = """sorted(zip(a, b), key=blah)[0]"""
       
  2805         self.unchanged(a)
       
  2806         a = """for i in zip(a, b): pass"""
       
  2807         self.unchanged(a)
       
  2808         a = """[x for x in zip(a, b)]"""
       
  2809         self.unchanged(a)
       
  2810         a = """(x for x in zip(a, b))"""
       
  2811         self.unchanged(a)
       
  2812 
       
  2813     def test_future_builtins(self):
       
  2814         a = "from future_builtins import spam, zip, eggs; zip(a, b)"
       
  2815         self.unchanged(a)
       
  2816 
       
  2817         b = """from future_builtins import spam, eggs; x = zip(a, b)"""
       
  2818         a = """from future_builtins import spam, eggs; x = list(zip(a, b))"""
       
  2819         self.check(b, a)
       
  2820 
       
  2821         a = "from future_builtins import *; zip(a, b)"
       
  2822         self.unchanged(a)
       
  2823 
       
  2824 class Test_standarderror(FixerTestCase):
       
  2825     fixer = "standarderror"
       
  2826 
       
  2827     def test(self):
       
  2828         b = """x =    StandardError()"""
       
  2829         a = """x =    Exception()"""
       
  2830         self.check(b, a)
       
  2831 
       
  2832         b = """x = StandardError(a, b, c)"""
       
  2833         a = """x = Exception(a, b, c)"""
       
  2834         self.check(b, a)
       
  2835 
       
  2836         b = """f(2 + StandardError(a, b, c))"""
       
  2837         a = """f(2 + Exception(a, b, c))"""
       
  2838         self.check(b, a)
       
  2839 
       
  2840 class Test_types(FixerTestCase):
       
  2841     fixer = "types"
       
  2842 
       
  2843     def test_basic_types_convert(self):
       
  2844         b = """types.StringType"""
       
  2845         a = """bytes"""
       
  2846         self.check(b, a)
       
  2847 
       
  2848         b = """types.DictType"""
       
  2849         a = """dict"""
       
  2850         self.check(b, a)
       
  2851 
       
  2852         b = """types . IntType"""
       
  2853         a = """int"""
       
  2854         self.check(b, a)
       
  2855 
       
  2856         b = """types.ListType"""
       
  2857         a = """list"""
       
  2858         self.check(b, a)
       
  2859 
       
  2860         b = """types.LongType"""
       
  2861         a = """int"""
       
  2862         self.check(b, a)
       
  2863 
       
  2864         b = """types.NoneType"""
       
  2865         a = """type(None)"""
       
  2866         self.check(b, a)
       
  2867 
       
  2868 class Test_idioms(FixerTestCase):
       
  2869     fixer = "idioms"
       
  2870 
       
  2871     def test_while(self):
       
  2872         b = """while 1: foo()"""
       
  2873         a = """while True: foo()"""
       
  2874         self.check(b, a)
       
  2875 
       
  2876         b = """while   1: foo()"""
       
  2877         a = """while   True: foo()"""
       
  2878         self.check(b, a)
       
  2879 
       
  2880         b = """
       
  2881             while 1:
       
  2882                 foo()
       
  2883             """
       
  2884         a = """
       
  2885             while True:
       
  2886                 foo()
       
  2887             """
       
  2888         self.check(b, a)
       
  2889 
       
  2890     def test_while_unchanged(self):
       
  2891         s = """while 11: foo()"""
       
  2892         self.unchanged(s)
       
  2893 
       
  2894         s = """while 0: foo()"""
       
  2895         self.unchanged(s)
       
  2896 
       
  2897         s = """while foo(): foo()"""
       
  2898         self.unchanged(s)
       
  2899 
       
  2900         s = """while []: foo()"""
       
  2901         self.unchanged(s)
       
  2902 
       
  2903     def test_eq_simple(self):
       
  2904         b = """type(x) == T"""
       
  2905         a = """isinstance(x, T)"""
       
  2906         self.check(b, a)
       
  2907 
       
  2908         b = """if   type(x) == T: pass"""
       
  2909         a = """if   isinstance(x, T): pass"""
       
  2910         self.check(b, a)
       
  2911 
       
  2912     def test_eq_reverse(self):
       
  2913         b = """T == type(x)"""
       
  2914         a = """isinstance(x, T)"""
       
  2915         self.check(b, a)
       
  2916 
       
  2917         b = """if   T == type(x): pass"""
       
  2918         a = """if   isinstance(x, T): pass"""
       
  2919         self.check(b, a)
       
  2920 
       
  2921     def test_eq_expression(self):
       
  2922         b = """type(x+y) == d.get('T')"""
       
  2923         a = """isinstance(x+y, d.get('T'))"""
       
  2924         self.check(b, a)
       
  2925 
       
  2926         b = """type(   x  +  y) == d.get('T')"""
       
  2927         a = """isinstance(x  +  y, d.get('T'))"""
       
  2928         self.check(b, a)
       
  2929 
       
  2930     def test_is_simple(self):
       
  2931         b = """type(x) is T"""
       
  2932         a = """isinstance(x, T)"""
       
  2933         self.check(b, a)
       
  2934 
       
  2935         b = """if   type(x) is T: pass"""
       
  2936         a = """if   isinstance(x, T): pass"""
       
  2937         self.check(b, a)
       
  2938 
       
  2939     def test_is_reverse(self):
       
  2940         b = """T is type(x)"""
       
  2941         a = """isinstance(x, T)"""
       
  2942         self.check(b, a)
       
  2943 
       
  2944         b = """if   T is type(x): pass"""
       
  2945         a = """if   isinstance(x, T): pass"""
       
  2946         self.check(b, a)
       
  2947 
       
  2948     def test_is_expression(self):
       
  2949         b = """type(x+y) is d.get('T')"""
       
  2950         a = """isinstance(x+y, d.get('T'))"""
       
  2951         self.check(b, a)
       
  2952 
       
  2953         b = """type(   x  +  y) is d.get('T')"""
       
  2954         a = """isinstance(x  +  y, d.get('T'))"""
       
  2955         self.check(b, a)
       
  2956 
       
  2957     def test_is_not_simple(self):
       
  2958         b = """type(x) is not T"""
       
  2959         a = """not isinstance(x, T)"""
       
  2960         self.check(b, a)
       
  2961 
       
  2962         b = """if   type(x) is not T: pass"""
       
  2963         a = """if   not isinstance(x, T): pass"""
       
  2964         self.check(b, a)
       
  2965 
       
  2966     def test_is_not_reverse(self):
       
  2967         b = """T is not type(x)"""
       
  2968         a = """not isinstance(x, T)"""
       
  2969         self.check(b, a)
       
  2970 
       
  2971         b = """if   T is not type(x): pass"""
       
  2972         a = """if   not isinstance(x, T): pass"""
       
  2973         self.check(b, a)
       
  2974 
       
  2975     def test_is_not_expression(self):
       
  2976         b = """type(x+y) is not d.get('T')"""
       
  2977         a = """not isinstance(x+y, d.get('T'))"""
       
  2978         self.check(b, a)
       
  2979 
       
  2980         b = """type(   x  +  y) is not d.get('T')"""
       
  2981         a = """not isinstance(x  +  y, d.get('T'))"""
       
  2982         self.check(b, a)
       
  2983 
       
  2984     def test_ne_simple(self):
       
  2985         b = """type(x) != T"""
       
  2986         a = """not isinstance(x, T)"""
       
  2987         self.check(b, a)
       
  2988 
       
  2989         b = """if   type(x) != T: pass"""
       
  2990         a = """if   not isinstance(x, T): pass"""
       
  2991         self.check(b, a)
       
  2992 
       
  2993     def test_ne_reverse(self):
       
  2994         b = """T != type(x)"""
       
  2995         a = """not isinstance(x, T)"""
       
  2996         self.check(b, a)
       
  2997 
       
  2998         b = """if   T != type(x): pass"""
       
  2999         a = """if   not isinstance(x, T): pass"""
       
  3000         self.check(b, a)
       
  3001 
       
  3002     def test_ne_expression(self):
       
  3003         b = """type(x+y) != d.get('T')"""
       
  3004         a = """not isinstance(x+y, d.get('T'))"""
       
  3005         self.check(b, a)
       
  3006 
       
  3007         b = """type(   x  +  y) != d.get('T')"""
       
  3008         a = """not isinstance(x  +  y, d.get('T'))"""
       
  3009         self.check(b, a)
       
  3010 
       
  3011     def test_type_unchanged(self):
       
  3012         a = """type(x).__name__"""
       
  3013         self.unchanged(a)
       
  3014 
       
  3015     def test_sort_list_call(self):
       
  3016         b = """
       
  3017             v = list(t)
       
  3018             v.sort()
       
  3019             foo(v)
       
  3020             """
       
  3021         a = """
       
  3022             v = sorted(t)
       
  3023             foo(v)
       
  3024             """
       
  3025         self.check(b, a)
       
  3026 
       
  3027         b = """
       
  3028             v = list(foo(b) + d)
       
  3029             v.sort()
       
  3030             foo(v)
       
  3031             """
       
  3032         a = """
       
  3033             v = sorted(foo(b) + d)
       
  3034             foo(v)
       
  3035             """
       
  3036         self.check(b, a)
       
  3037 
       
  3038         b = """
       
  3039             while x:
       
  3040                 v = list(t)
       
  3041                 v.sort()
       
  3042                 foo(v)
       
  3043             """
       
  3044         a = """
       
  3045             while x:
       
  3046                 v = sorted(t)
       
  3047                 foo(v)
       
  3048             """
       
  3049         self.check(b, a)
       
  3050 
       
  3051         b = """
       
  3052             v = list(t)
       
  3053             # foo
       
  3054             v.sort()
       
  3055             foo(v)
       
  3056             """
       
  3057         a = """
       
  3058             v = sorted(t)
       
  3059             # foo
       
  3060             foo(v)
       
  3061             """
       
  3062         self.check(b, a)
       
  3063 
       
  3064         b = r"""
       
  3065             v = list(   t)
       
  3066             v.sort()
       
  3067             foo(v)
       
  3068             """
       
  3069         a = r"""
       
  3070             v = sorted(   t)
       
  3071             foo(v)
       
  3072             """
       
  3073         self.check(b, a)
       
  3074 
       
  3075     def test_sort_simple_expr(self):
       
  3076         b = """
       
  3077             v = t
       
  3078             v.sort()
       
  3079             foo(v)
       
  3080             """
       
  3081         a = """
       
  3082             v = sorted(t)
       
  3083             foo(v)
       
  3084             """
       
  3085         self.check(b, a)
       
  3086 
       
  3087         b = """
       
  3088             v = foo(b)
       
  3089             v.sort()
       
  3090             foo(v)
       
  3091             """
       
  3092         a = """
       
  3093             v = sorted(foo(b))
       
  3094             foo(v)
       
  3095             """
       
  3096         self.check(b, a)
       
  3097 
       
  3098         b = """
       
  3099             v = b.keys()
       
  3100             v.sort()
       
  3101             foo(v)
       
  3102             """
       
  3103         a = """
       
  3104             v = sorted(b.keys())
       
  3105             foo(v)
       
  3106             """
       
  3107         self.check(b, a)
       
  3108 
       
  3109         b = """
       
  3110             v = foo(b) + d
       
  3111             v.sort()
       
  3112             foo(v)
       
  3113             """
       
  3114         a = """
       
  3115             v = sorted(foo(b) + d)
       
  3116             foo(v)
       
  3117             """
       
  3118         self.check(b, a)
       
  3119 
       
  3120         b = """
       
  3121             while x:
       
  3122                 v = t
       
  3123                 v.sort()
       
  3124                 foo(v)
       
  3125             """
       
  3126         a = """
       
  3127             while x:
       
  3128                 v = sorted(t)
       
  3129                 foo(v)
       
  3130             """
       
  3131         self.check(b, a)
       
  3132 
       
  3133         b = """
       
  3134             v = t
       
  3135             # foo
       
  3136             v.sort()
       
  3137             foo(v)
       
  3138             """
       
  3139         a = """
       
  3140             v = sorted(t)
       
  3141             # foo
       
  3142             foo(v)
       
  3143             """
       
  3144         self.check(b, a)
       
  3145 
       
  3146         b = r"""
       
  3147             v =   t
       
  3148             v.sort()
       
  3149             foo(v)
       
  3150             """
       
  3151         a = r"""
       
  3152             v =   sorted(t)
       
  3153             foo(v)
       
  3154             """
       
  3155         self.check(b, a)
       
  3156 
       
  3157     def test_sort_unchanged(self):
       
  3158         s = """
       
  3159             v = list(t)
       
  3160             w.sort()
       
  3161             foo(w)
       
  3162             """
       
  3163         self.unchanged(s)
       
  3164 
       
  3165         s = """
       
  3166             v = list(t)
       
  3167             v.sort(u)
       
  3168             foo(v)
       
  3169             """
       
  3170         self.unchanged(s)
       
  3171 
       
  3172 class Test_basestring(FixerTestCase):
       
  3173     fixer = "basestring"
       
  3174 
       
  3175     def test_basestring(self):
       
  3176         b = """isinstance(x, basestring)"""
       
  3177         a = """isinstance(x, str)"""
       
  3178         self.check(b, a)
       
  3179 
       
  3180 class Test_buffer(FixerTestCase):
       
  3181     fixer = "buffer"
       
  3182 
       
  3183     def test_buffer(self):
       
  3184         b = """x = buffer(y)"""
       
  3185         a = """x = memoryview(y)"""
       
  3186         self.check(b, a)
       
  3187 
       
  3188 class Test_future(FixerTestCase):
       
  3189     fixer = "future"
       
  3190 
       
  3191     def test_future(self):
       
  3192         b = """from __future__ import braces"""
       
  3193         a = """"""
       
  3194         self.check(b, a)
       
  3195 
       
  3196         b = """# comment\nfrom __future__ import braces"""
       
  3197         a = """# comment\n"""
       
  3198         self.check(b, a)
       
  3199 
       
  3200         b = """from __future__ import braces\n# comment"""
       
  3201         a = """\n# comment"""
       
  3202         self.check(b, a)
       
  3203 
       
  3204     def test_run_order(self):
       
  3205         self.assert_runs_after('print')
       
  3206 
       
  3207 class Test_itertools(FixerTestCase):
       
  3208     fixer = "itertools"
       
  3209 
       
  3210     def checkall(self, before, after):
       
  3211         # Because we need to check with and without the itertools prefix
       
  3212         # and on each of the three functions, these loops make it all
       
  3213         # much easier
       
  3214         for i in ('itertools.', ''):
       
  3215             for f in ('map', 'filter', 'zip'):
       
  3216                 b = before %(i+'i'+f)
       
  3217                 a = after %(f)
       
  3218                 self.check(b, a)
       
  3219 
       
  3220     def test_0(self):
       
  3221         # A simple example -- test_1 covers exactly the same thing,
       
  3222         # but it's not quite as clear.
       
  3223         b = "itertools.izip(a, b)"
       
  3224         a = "zip(a, b)"
       
  3225         self.check(b, a)
       
  3226 
       
  3227     def test_1(self):
       
  3228         b = """%s(f, a)"""
       
  3229         a = """%s(f, a)"""
       
  3230         self.checkall(b, a)
       
  3231 
       
  3232     def test_2(self):
       
  3233         b = """itertools.ifilterfalse(a, b)"""
       
  3234         a = """itertools.filterfalse(a, b)"""
       
  3235         self.check(b, a)
       
  3236 
       
  3237     def test_4(self):
       
  3238         b = """ifilterfalse(a, b)"""
       
  3239         a = """filterfalse(a, b)"""
       
  3240         self.check(b, a)
       
  3241 
       
  3242     def test_space_1(self):
       
  3243         b = """    %s(f, a)"""
       
  3244         a = """    %s(f, a)"""
       
  3245         self.checkall(b, a)
       
  3246 
       
  3247     def test_space_2(self):
       
  3248         b = """    itertools.ifilterfalse(a, b)"""
       
  3249         a = """    itertools.filterfalse(a, b)"""
       
  3250         self.check(b, a)
       
  3251 
       
  3252     def test_run_order(self):
       
  3253         self.assert_runs_after('map', 'zip', 'filter')
       
  3254 
       
  3255 class Test_itertools_imports(FixerTestCase):
       
  3256     fixer = 'itertools_imports'
       
  3257 
       
  3258     def test_reduced(self):
       
  3259         b = "from itertools import imap, izip, foo"
       
  3260         a = "from itertools import foo"
       
  3261         self.check(b, a)
       
  3262 
       
  3263         b = "from itertools import bar, imap, izip, foo"
       
  3264         a = "from itertools import bar, foo"
       
  3265         self.check(b, a)
       
  3266 
       
  3267     def test_comments(self):
       
  3268         b = "#foo\nfrom itertools import imap, izip"
       
  3269         a = "#foo\n"
       
  3270         self.check(b, a)
       
  3271 
       
  3272     def test_none(self):
       
  3273         b = "from itertools import imap, izip"
       
  3274         a = ""
       
  3275         self.check(b, a)
       
  3276 
       
  3277         b = "from itertools import izip"
       
  3278         a = ""
       
  3279         self.check(b, a)
       
  3280 
       
  3281     def test_import_as(self):
       
  3282         b = "from itertools import izip, bar as bang, imap"
       
  3283         a = "from itertools import bar as bang"
       
  3284         self.check(b, a)
       
  3285 
       
  3286         s = "from itertools import bar as bang"
       
  3287         self.unchanged(s)
       
  3288 
       
  3289     def test_ifilter(self):
       
  3290         b = "from itertools import ifilterfalse"
       
  3291         a = "from itertools import filterfalse"
       
  3292         self.check(b, a)
       
  3293 
       
  3294         b = "from itertools import imap, ifilterfalse, foo"
       
  3295         a = "from itertools import filterfalse, foo"
       
  3296         self.check(b, a)
       
  3297 
       
  3298         b = "from itertools import bar, ifilterfalse, foo"
       
  3299         a = "from itertools import bar, filterfalse, foo"
       
  3300         self.check(b, a)
       
  3301 
       
  3302 
       
  3303     def test_unchanged(self):
       
  3304         s = "from itertools import foo"
       
  3305         self.unchanged(s)
       
  3306 
       
  3307 class Test_import(FixerTestCase):
       
  3308     fixer = "import"
       
  3309 
       
  3310     def setUp(self):
       
  3311         FixerTestCase.setUp(self)
       
  3312         # Need to replace fix_import's exists method
       
  3313         # so we can check that it's doing the right thing
       
  3314         self.files_checked = []
       
  3315         self.present_files = set()
       
  3316         self.always_exists = True
       
  3317         def fake_exists(name):
       
  3318             self.files_checked.append(name)
       
  3319             return self.always_exists or (name in self.present_files)
       
  3320 
       
  3321         from ..fixes import fix_import
       
  3322         fix_import.exists = fake_exists
       
  3323 
       
  3324     def tearDown(self):
       
  3325         from lib2to3.fixes import fix_import
       
  3326         fix_import.exists = os.path.exists
       
  3327 
       
  3328     def check_both(self, b, a):
       
  3329         self.always_exists = True
       
  3330         FixerTestCase.check(self, b, a)
       
  3331         self.always_exists = False
       
  3332         FixerTestCase.unchanged(self, b)
       
  3333 
       
  3334     def test_files_checked(self):
       
  3335         def p(path):
       
  3336             # Takes a unix path and returns a path with correct separators
       
  3337             return os.path.pathsep.join(path.split("/"))
       
  3338 
       
  3339         self.always_exists = False
       
  3340         self.present_files = set(['__init__.py'])
       
  3341         expected_extensions = ('.py', os.path.pathsep, '.pyc', '.so',
       
  3342                                '.sl', '.pyd')
       
  3343         names_to_test = (p("/spam/eggs.py"), "ni.py", p("../../shrubbery.py"))
       
  3344 
       
  3345         for name in names_to_test:
       
  3346             self.files_checked = []
       
  3347             self.filename = name
       
  3348             self.unchanged("import jam")
       
  3349 
       
  3350             if os.path.dirname(name):
       
  3351                 name = os.path.dirname(name) + '/jam'
       
  3352             else:
       
  3353                 name = 'jam'
       
  3354             expected_checks = set(name + ext for ext in expected_extensions)
       
  3355             expected_checks.add("__init__.py")
       
  3356 
       
  3357             self.assertEqual(set(self.files_checked), expected_checks)
       
  3358 
       
  3359     def test_not_in_package(self):
       
  3360         s = "import bar"
       
  3361         self.always_exists = False
       
  3362         self.present_files = set(["bar.py"])
       
  3363         self.unchanged(s)
       
  3364 
       
  3365     def test_in_package(self):
       
  3366         b = "import bar"
       
  3367         a = "from . import bar"
       
  3368         self.always_exists = False
       
  3369         self.present_files = set(["__init__.py", "bar.py"])
       
  3370         self.check(b, a)
       
  3371 
       
  3372     def test_comments_and_indent(self):
       
  3373         b = "import bar # Foo"
       
  3374         a = "from . import bar # Foo"
       
  3375         self.check(b, a)
       
  3376 
       
  3377     def test_from(self):
       
  3378         b = "from foo import bar, baz"
       
  3379         a = "from .foo import bar, baz"
       
  3380         self.check_both(b, a)
       
  3381 
       
  3382         b = "from foo import bar"
       
  3383         a = "from .foo import bar"
       
  3384         self.check_both(b, a)
       
  3385 
       
  3386         b = "from foo import (bar, baz)"
       
  3387         a = "from .foo import (bar, baz)"
       
  3388         self.check_both(b, a)
       
  3389 
       
  3390     def test_dotted_from(self):
       
  3391         b = "from green.eggs import ham"
       
  3392         a = "from .green.eggs import ham"
       
  3393         self.check_both(b, a)
       
  3394 
       
  3395     def test_from_as(self):
       
  3396         b = "from green.eggs import ham as spam"
       
  3397         a = "from .green.eggs import ham as spam"
       
  3398         self.check_both(b, a)
       
  3399 
       
  3400     def test_import(self):
       
  3401         b = "import foo"
       
  3402         a = "from . import foo"
       
  3403         self.check_both(b, a)
       
  3404 
       
  3405         b = "import foo, bar"
       
  3406         a = "from . import foo, bar"
       
  3407         self.check_both(b, a)
       
  3408 
       
  3409     def test_dotted_import(self):
       
  3410         b = "import foo.bar"
       
  3411         a = "from . import foo.bar"
       
  3412         self.check_both(b, a)
       
  3413 
       
  3414     def test_dotted_import_as(self):
       
  3415         b = "import foo.bar as bang"
       
  3416         a = "from . import foo.bar as bang"
       
  3417         self.check_both(b, a)
       
  3418 
       
  3419     def test_prefix(self):
       
  3420         b = """
       
  3421         # prefix
       
  3422         import foo.bar
       
  3423         """
       
  3424         a = """
       
  3425         # prefix
       
  3426         from . import foo.bar
       
  3427         """
       
  3428         self.check_both(b, a)
       
  3429 
       
  3430 
       
  3431 class Test_set_literal(FixerTestCase):
       
  3432 
       
  3433     fixer = "set_literal"
       
  3434 
       
  3435     def test_basic(self):
       
  3436         b = """set([1, 2, 3])"""
       
  3437         a = """{1, 2, 3}"""
       
  3438         self.check(b, a)
       
  3439 
       
  3440         b = """set((1, 2, 3))"""
       
  3441         a = """{1, 2, 3}"""
       
  3442         self.check(b, a)
       
  3443 
       
  3444         b = """set((1,))"""
       
  3445         a = """{1}"""
       
  3446         self.check(b, a)
       
  3447 
       
  3448         b = """set([1])"""
       
  3449         self.check(b, a)
       
  3450 
       
  3451         b = """set((a, b))"""
       
  3452         a = """{a, b}"""
       
  3453         self.check(b, a)
       
  3454 
       
  3455         b = """set([a, b])"""
       
  3456         self.check(b, a)
       
  3457 
       
  3458         b = """set((a*234, f(args=23)))"""
       
  3459         a = """{a*234, f(args=23)}"""
       
  3460         self.check(b, a)
       
  3461 
       
  3462         b = """set([a*23, f(23)])"""
       
  3463         a = """{a*23, f(23)}"""
       
  3464         self.check(b, a)
       
  3465 
       
  3466         b = """set([a-234**23])"""
       
  3467         a = """{a-234**23}"""
       
  3468         self.check(b, a)
       
  3469 
       
  3470     def test_listcomps(self):
       
  3471         b = """set([x for x in y])"""
       
  3472         a = """{x for x in y}"""
       
  3473         self.check(b, a)
       
  3474 
       
  3475         b = """set([x for x in y if x == m])"""
       
  3476         a = """{x for x in y if x == m}"""
       
  3477         self.check(b, a)
       
  3478 
       
  3479         b = """set([x for x in y for a in b])"""
       
  3480         a = """{x for x in y for a in b}"""
       
  3481         self.check(b, a)
       
  3482 
       
  3483         b = """set([f(x) - 23 for x in y])"""
       
  3484         a = """{f(x) - 23 for x in y}"""
       
  3485         self.check(b, a)
       
  3486 
       
  3487     def test_whitespace(self):
       
  3488         b = """set( [1, 2])"""
       
  3489         a = """{1, 2}"""
       
  3490         self.check(b, a)
       
  3491 
       
  3492         b = """set([1 ,  2])"""
       
  3493         a = """{1 ,  2}"""
       
  3494         self.check(b, a)
       
  3495 
       
  3496         b = """set([ 1 ])"""
       
  3497         a = """{ 1 }"""
       
  3498         self.check(b, a)
       
  3499 
       
  3500         b = """set( [1] )"""
       
  3501         a = """{1}"""
       
  3502         self.check(b, a)
       
  3503 
       
  3504         b = """set([  1,  2  ])"""
       
  3505         a = """{  1,  2  }"""
       
  3506         self.check(b, a)
       
  3507 
       
  3508         b = """set([x  for x in y ])"""
       
  3509         a = """{x  for x in y }"""
       
  3510         self.check(b, a)
       
  3511 
       
  3512         b = """set(
       
  3513                    [1, 2]
       
  3514                )
       
  3515             """
       
  3516         a = """{1, 2}\n"""
       
  3517         self.check(b, a)
       
  3518 
       
  3519     def test_comments(self):
       
  3520         b = """set((1, 2)) # Hi"""
       
  3521         a = """{1, 2} # Hi"""
       
  3522         self.check(b, a)
       
  3523 
       
  3524         # This isn't optimal behavior, but the fixer is optional.
       
  3525         b = """
       
  3526             # Foo
       
  3527             set( # Bar
       
  3528                (1, 2)
       
  3529             )
       
  3530             """
       
  3531         a = """
       
  3532             # Foo
       
  3533             {1, 2}
       
  3534             """
       
  3535         self.check(b, a)
       
  3536 
       
  3537     def test_unchanged(self):
       
  3538         s = """set()"""
       
  3539         self.unchanged(s)
       
  3540 
       
  3541         s = """set(a)"""
       
  3542         self.unchanged(s)
       
  3543 
       
  3544         s = """set(a, b, c)"""
       
  3545         self.unchanged(s)
       
  3546 
       
  3547         # Don't transform generators because they might have to be lazy.
       
  3548         s = """set(x for x in y)"""
       
  3549         self.unchanged(s)
       
  3550 
       
  3551         s = """set(x for x in y if z)"""
       
  3552         self.unchanged(s)
       
  3553 
       
  3554         s = """set(a*823-23**2 + f(23))"""
       
  3555         self.unchanged(s)
       
  3556 
       
  3557 
       
  3558 class Test_sys_exc(FixerTestCase):
       
  3559     fixer = "sys_exc"
       
  3560 
       
  3561     def test_0(self):
       
  3562         b = "sys.exc_type"
       
  3563         a = "sys.exc_info()[0]"
       
  3564         self.check(b, a)
       
  3565 
       
  3566     def test_1(self):
       
  3567         b = "sys.exc_value"
       
  3568         a = "sys.exc_info()[1]"
       
  3569         self.check(b, a)
       
  3570 
       
  3571     def test_2(self):
       
  3572         b = "sys.exc_traceback"
       
  3573         a = "sys.exc_info()[2]"
       
  3574         self.check(b, a)
       
  3575 
       
  3576     def test_3(self):
       
  3577         b = "sys.exc_type # Foo"
       
  3578         a = "sys.exc_info()[0] # Foo"
       
  3579         self.check(b, a)
       
  3580 
       
  3581     def test_4(self):
       
  3582         b = "sys.  exc_type"
       
  3583         a = "sys.  exc_info()[0]"
       
  3584         self.check(b, a)
       
  3585 
       
  3586     def test_5(self):
       
  3587         b = "sys  .exc_type"
       
  3588         a = "sys  .exc_info()[0]"
       
  3589         self.check(b, a)
       
  3590 
       
  3591 
       
  3592 class Test_paren(FixerTestCase):
       
  3593     fixer = "paren"
       
  3594 
       
  3595     def test_0(self):
       
  3596         b = """[i for i in 1, 2 ]"""
       
  3597         a = """[i for i in (1, 2) ]"""
       
  3598         self.check(b, a)
       
  3599 
       
  3600     def test_1(self):
       
  3601         b = """[i for i in 1, 2, ]"""
       
  3602         a = """[i for i in (1, 2,) ]"""
       
  3603         self.check(b, a)
       
  3604 
       
  3605     def test_2(self):
       
  3606         b = """[i for i  in     1, 2 ]"""
       
  3607         a = """[i for i  in     (1, 2) ]"""
       
  3608         self.check(b, a)
       
  3609 
       
  3610     def test_3(self):
       
  3611         b = """[i for i in 1, 2 if i]"""
       
  3612         a = """[i for i in (1, 2) if i]"""
       
  3613         self.check(b, a)
       
  3614 
       
  3615     def test_4(self):
       
  3616         b = """[i for i in 1,    2    ]"""
       
  3617         a = """[i for i in (1,    2)    ]"""
       
  3618         self.check(b, a)
       
  3619 
       
  3620     def test_5(self):
       
  3621         b = """(i for i in 1, 2)"""
       
  3622         a = """(i for i in (1, 2))"""
       
  3623         self.check(b, a)
       
  3624 
       
  3625     def test_6(self):
       
  3626         b = """(i for i in 1   ,2   if i)"""
       
  3627         a = """(i for i in (1   ,2)   if i)"""
       
  3628         self.check(b, a)
       
  3629 
       
  3630     def test_unchanged_0(self):
       
  3631         s = """[i for i in (1, 2)]"""
       
  3632         self.unchanged(s)
       
  3633 
       
  3634     def test_unchanged_1(self):
       
  3635         s = """[i for i in foo()]"""
       
  3636         self.unchanged(s)
       
  3637 
       
  3638     def test_unchanged_2(self):
       
  3639         s = """[i for i in (1, 2) if nothing]"""
       
  3640         self.unchanged(s)
       
  3641 
       
  3642     def test_unchanged_3(self):
       
  3643         s = """(i for i in (1, 2))"""
       
  3644         self.unchanged(s)
       
  3645 
       
  3646     def test_unchanged_4(self):
       
  3647         s = """[i for i in m]"""
       
  3648         self.unchanged(s)
       
  3649 
       
  3650 class Test_metaclass(FixerTestCase):
       
  3651 
       
  3652     fixer = 'metaclass'
       
  3653 
       
  3654     def test_unchanged(self):
       
  3655         self.unchanged("class X(): pass")
       
  3656         self.unchanged("class X(object): pass")
       
  3657         self.unchanged("class X(object1, object2): pass")
       
  3658         self.unchanged("class X(object1, object2, object3): pass")
       
  3659         self.unchanged("class X(metaclass=Meta): pass")
       
  3660         self.unchanged("class X(b, arg=23, metclass=Meta): pass")
       
  3661         self.unchanged("class X(b, arg=23, metaclass=Meta, other=42): pass")
       
  3662 
       
  3663         s = """
       
  3664         class X:
       
  3665             def __metaclass__(self): pass
       
  3666         """
       
  3667         self.unchanged(s)
       
  3668 
       
  3669         s = """
       
  3670         class X:
       
  3671             a[23] = 74
       
  3672         """
       
  3673         self.unchanged(s)
       
  3674 
       
  3675     def test_comments(self):
       
  3676         b = """
       
  3677         class X:
       
  3678             # hi
       
  3679             __metaclass__ = AppleMeta
       
  3680         """
       
  3681         a = """
       
  3682         class X(metaclass=AppleMeta):
       
  3683             # hi
       
  3684             pass
       
  3685         """
       
  3686         self.check(b, a)
       
  3687 
       
  3688         b = """
       
  3689         class X:
       
  3690             __metaclass__ = Meta
       
  3691             # Bedtime!
       
  3692         """
       
  3693         a = """
       
  3694         class X(metaclass=Meta):
       
  3695             pass
       
  3696             # Bedtime!
       
  3697         """
       
  3698         self.check(b, a)
       
  3699 
       
  3700     def test_meta(self):
       
  3701         # no-parent class, odd body
       
  3702         b = """
       
  3703         class X():
       
  3704             __metaclass__ = Q
       
  3705             pass
       
  3706         """
       
  3707         a = """
       
  3708         class X(metaclass=Q):
       
  3709             pass
       
  3710         """
       
  3711         self.check(b, a)
       
  3712 
       
  3713         # one parent class, no body
       
  3714         b = """class X(object): __metaclass__ = Q"""
       
  3715         a = """class X(object, metaclass=Q): pass"""
       
  3716         self.check(b, a)
       
  3717 
       
  3718 
       
  3719         # one parent, simple body
       
  3720         b = """
       
  3721         class X(object):
       
  3722             __metaclass__ = Meta
       
  3723             bar = 7
       
  3724         """
       
  3725         a = """
       
  3726         class X(object, metaclass=Meta):
       
  3727             bar = 7
       
  3728         """
       
  3729         self.check(b, a)
       
  3730 
       
  3731         b = """
       
  3732         class X:
       
  3733             __metaclass__ = Meta; x = 4; g = 23
       
  3734         """
       
  3735         a = """
       
  3736         class X(metaclass=Meta):
       
  3737             x = 4; g = 23
       
  3738         """
       
  3739         self.check(b, a)
       
  3740 
       
  3741         # one parent, simple body, __metaclass__ last
       
  3742         b = """
       
  3743         class X(object):
       
  3744             bar = 7
       
  3745             __metaclass__ = Meta
       
  3746         """
       
  3747         a = """
       
  3748         class X(object, metaclass=Meta):
       
  3749             bar = 7
       
  3750         """
       
  3751         self.check(b, a)
       
  3752 
       
  3753         # redefining __metaclass__
       
  3754         b = """
       
  3755         class X():
       
  3756             __metaclass__ = A
       
  3757             __metaclass__ = B
       
  3758             bar = 7
       
  3759         """
       
  3760         a = """
       
  3761         class X(metaclass=B):
       
  3762             bar = 7
       
  3763         """
       
  3764         self.check(b, a)
       
  3765 
       
  3766         # multiple inheritance, simple body
       
  3767         b = """
       
  3768         class X(clsA, clsB):
       
  3769             __metaclass__ = Meta
       
  3770             bar = 7
       
  3771         """
       
  3772         a = """
       
  3773         class X(clsA, clsB, metaclass=Meta):
       
  3774             bar = 7
       
  3775         """
       
  3776         self.check(b, a)
       
  3777 
       
  3778         # keywords in the class statement
       
  3779         b = """class m(a, arg=23): __metaclass__ = Meta"""
       
  3780         a = """class m(a, arg=23, metaclass=Meta): pass"""
       
  3781         self.check(b, a)
       
  3782 
       
  3783         b = """
       
  3784         class X(expression(2 + 4)):
       
  3785             __metaclass__ = Meta
       
  3786         """
       
  3787         a = """
       
  3788         class X(expression(2 + 4), metaclass=Meta):
       
  3789             pass
       
  3790         """
       
  3791         self.check(b, a)
       
  3792 
       
  3793         b = """
       
  3794         class X(expression(2 + 4), x**4):
       
  3795             __metaclass__ = Meta
       
  3796         """
       
  3797         a = """
       
  3798         class X(expression(2 + 4), x**4, metaclass=Meta):
       
  3799             pass
       
  3800         """
       
  3801         self.check(b, a)
       
  3802 
       
  3803 
       
  3804 class Test_getcwdu(FixerTestCase):
       
  3805 
       
  3806     fixer = 'getcwdu'
       
  3807 
       
  3808     def test_basic(self):
       
  3809         b = """os.getcwdu"""
       
  3810         a = """os.getcwd"""
       
  3811         self.check(b, a)
       
  3812 
       
  3813         b = """os.getcwdu()"""
       
  3814         a = """os.getcwd()"""
       
  3815         self.check(b, a)
       
  3816 
       
  3817         b = """meth = os.getcwdu"""
       
  3818         a = """meth = os.getcwd"""
       
  3819         self.check(b, a)
       
  3820 
       
  3821         b = """os.getcwdu(args)"""
       
  3822         a = """os.getcwd(args)"""
       
  3823         self.check(b, a)
       
  3824 
       
  3825     def test_comment(self):
       
  3826         b = """os.getcwdu() # Foo"""
       
  3827         a = """os.getcwd() # Foo"""
       
  3828         self.check(b, a)
       
  3829 
       
  3830     def test_unchanged(self):
       
  3831         s = """os.getcwd()"""
       
  3832         self.unchanged(s)
       
  3833 
       
  3834         s = """getcwdu()"""
       
  3835         self.unchanged(s)
       
  3836 
       
  3837         s = """os.getcwdb()"""
       
  3838         self.unchanged(s)
       
  3839 
       
  3840     def test_indentation(self):
       
  3841         b = """
       
  3842             if 1:
       
  3843                 os.getcwdu()
       
  3844             """
       
  3845         a = """
       
  3846             if 1:
       
  3847                 os.getcwd()
       
  3848             """
       
  3849         self.check(b, a)
       
  3850 
       
  3851     def test_multilation(self):
       
  3852         b = """os .getcwdu()"""
       
  3853         a = """os .getcwd()"""
       
  3854         self.check(b, a)
       
  3855 
       
  3856         b = """os.  getcwdu"""
       
  3857         a = """os.  getcwd"""
       
  3858         self.check(b, a)
       
  3859 
       
  3860         b = """os.getcwdu (  )"""
       
  3861         a = """os.getcwd (  )"""
       
  3862         self.check(b, a)
       
  3863 
       
  3864 
       
  3865 if __name__ == "__main__":
       
  3866     import __main__
       
  3867     support.run_all_tests(__main__)