13
from itertools import chain
14
from operator import itemgetter
13
15
from os.path import dirname, pathsep
16
18
from .. import pygram
17
19
from .. import pytree
18
20
from .. import refactor
19
from ..fixes import util
23
def __init__(self, **kwargs):
24
for k, v in kwargs.items():
21
from .. import fixer_util
29
24
class FixerTestCase(support.TestCase):
31
options = Options(fix=[self.fixer], print_function=False)
32
self.refactor = refactor.RefactoringTool(options)
25
def setUp(self, fix_list=None):
27
fix_list = [self.fixer]
28
options = {"print_function" : False}
29
self.refactor = support.get_refactorer(fix_list, options)
33
30
self.fixer_log = []
34
31
self.filename = "<string>"
36
from itertools import chain
37
33
for order in (self.refactor.pre_order.values(),\
38
34
self.refactor.post_order.values()):
39
35
for fixer in chain(*order):
1423
1441
self.check(b, a)
1425
1443
def test_import_from(self):
1426
for old, (new, members) in self.modules.items():
1427
for member in members:
1428
b = "from %s import %s" % (old, member)
1429
a = "from %s import %s" % (new, member)
1444
for old, new in self.modules.items():
1445
b = "from %s import foo" % old
1446
a = "from %s import foo" % new
1449
b = "from %s import foo, bar" % old
1450
a = "from %s import foo, bar" % new
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
1459
b = "import %s as foo_bar" % old
1460
a = "import %s as foo_bar" % new
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
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
1475
def test_import_module_usage(self):
1476
for old, new in self.modules.items():
1488
class Test_imports2(Test_imports):
1490
from ..fixes.fix_imports2 import MAPPING as modules
1493
class Test_imports_fixer_order(Test_imports):
1498
Test_imports.setUp(self, ['imports', 'imports2'])
1499
from ..fixes.fix_imports2 import MAPPING as mapping2
1500
self.modules = mapping2.copy()
1501
from ..fixes.fix_imports import MAPPING as mapping1
1502
for key in ('dbhash', 'dumbdbm', 'dbm', 'gdbm'):
1503
self.modules[key] = mapping1[key]
1506
class Test_urllib(FixerTestCase):
1508
from ..fixes.fix_urllib import MAPPING as modules
1510
def test_import_module(self):
1511
for old, changes in self.modules.items():
1512
b = "import %s" % old
1513
a = "import %s" % ", ".join(map(itemgetter(0), changes))
1516
def test_import_from(self):
1517
for old, changes in self.modules.items():
1519
for new, members in changes:
1520
for member in members:
1521
all_members.append(member)
1522
b = "from %s import %s" % (old, member)
1523
a = "from %s import %s" % (new, member)
1526
s = "from foo import %s" % member
1529
b = "from %s import %s" % (old, ", ".join(members))
1530
a = "from %s import %s" % (new, ", ".join(members))
1430
1531
self.check(b, a)
1432
s = "from foo import %s" % member
1533
s = "from foo import %s" % ", ".join(members)
1433
1534
self.unchanged(s)
1435
b = "from %s import %s" % (old, ", ".join(members))
1436
a = "from %s import %s" % (new, ", ".join(members))
1536
# test the breaking of a module into multiple replacements
1537
b = "from %s import %s" % (old, ", ".join(all_members))
1538
a = "\n".join(["from %s import %s" % (new, ", ".join(members))
1539
for (new, members) in changes])
1437
1540
self.check(b, a)
1439
s = "from foo import %s" % ", ".join(members)
1442
1542
def test_import_module_as(self):
1443
for old, (new, members) in self.modules.items():
1444
b = "import %s as foo_bar" % old
1445
a = "import %s as foo_bar" % new
1448
b = "import %s as foo_bar" % old
1449
a = "import %s as foo_bar" % new
1543
for old in self.modules:
1544
s = "import %s as foo" % old
1545
self.warns_unchanged(s, "This module is now multiple modules")
1452
1547
def test_import_from_as(self):
1453
for old, (new, members) in self.modules.items():
1454
for member in members:
1455
b = "from %s import %s as foo_bar" % (old, member)
1456
a = "from %s import %s as foo_bar" % (new, member)
1548
for old, changes in self.modules.items():
1549
for new, members in changes:
1550
for member in members:
1551
b = "from %s import %s as foo_bar" % (old, member)
1552
a = "from %s import %s as foo_bar" % (new, member)
1459
1555
def test_star(self):
1460
1556
for old in self.modules:
1462
1558
self.warns_unchanged(s, "Cannot handle star imports")
1464
1560
def test_import_module_usage(self):
1465
for old, (new, members) in self.modules.items():
1466
for member in members:
1470
""" % (old, old, old, member)
1474
""" % (new, new, new, member)
1477
def test_from_import_usage(self):
1478
for old, (new, members) in self.modules.items():
1479
for member in members:
1483
""" % (old, member, member, member)
1487
""" % (new, member, member, member)
1492
""" % (old, ", ".join(members), ", ".join(members))
1496
""" % (new, ", ".join(members), ", ".join(members))
1561
for old, changes in self.modules.items():
1562
for new, members in changes:
1563
for member in members:
1567
""" % (old, old, member)
1571
""" % (", ".join([n for (n, mems)
1572
in self.modules[old]]),
1500
1577
class Test_input(FixerTestCase):
3260
3346
a = "from . import foo.bar as bang"
3261
3347
self.check_both(b, a)
3349
def test_prefix(self):
3356
from . import foo.bar
3358
self.check_both(b, a)
3360
class Test_sys_exc(FixerTestCase):
3365
a = "sys.exc_info()[0]"
3370
a = "sys.exc_info()[1]"
3374
b = "sys.exc_traceback"
3375
a = "sys.exc_info()[2]"
3379
b = "sys.exc_type # Foo"
3380
a = "sys.exc_info()[0] # Foo"
3385
a = "sys. exc_info()[0]"
3390
a = "sys .exc_info()[0]"
3394
class Test_paren(FixerTestCase):
3398
b = """[i for i in 1, 2 ]"""
3399
a = """[i for i in (1, 2) ]"""
3403
b = """[i for i in 1, 2, ]"""
3404
a = """[i for i in (1, 2,) ]"""
3408
b = """[i for i in 1, 2 ]"""
3409
a = """[i for i in (1, 2) ]"""
3413
b = """[i for i in 1, 2 if i]"""
3414
a = """[i for i in (1, 2) if i]"""
3418
b = """[i for i in 1, 2 ]"""
3419
a = """[i for i in (1, 2) ]"""
3423
b = """(i for i in 1, 2)"""
3424
a = """(i for i in (1, 2))"""
3428
b = """(i for i in 1 ,2 if i)"""
3429
a = """(i for i in (1 ,2) if i)"""
3432
def test_unchanged_0(self):
3433
s = """[i for i in (1, 2)]"""
3436
def test_unchanged_1(self):
3437
s = """[i for i in foo()]"""
3440
def test_unchanged_2(self):
3441
s = """[i for i in (1, 2) if nothing]"""
3444
def test_unchanged_3(self):
3445
s = """(i for i in (1, 2))"""
3448
def test_unchanged_4(self):
3449
s = """[i for i in m]"""
3452
class Test_metaclass(FixerTestCase):
3456
def test_unchanged(self):
3457
self.unchanged("class X(): pass")
3458
self.unchanged("class X(object): pass")
3459
self.unchanged("class X(object1, object2): pass")
3460
self.unchanged("class X(object1, object2, object3): pass")
3461
self.unchanged("class X(metaclass=Meta): pass")
3462
self.unchanged("class X(b, arg=23, metclass=Meta): pass")
3463
self.unchanged("class X(b, arg=23, metaclass=Meta, other=42): pass")
3467
def __metaclass__(self): pass
3471
def test_comments(self):
3475
__metaclass__ = AppleMeta
3478
class X(metaclass=AppleMeta):
3486
__metaclass__ = Meta
3490
class X(metaclass=Meta):
3496
def test_meta(self):
3497
# no-parent class, odd body
3504
class X(metaclass=Q):
3509
# one parent class, no body
3510
b = """class X(object): __metaclass__ = Q"""
3511
a = """class X(object, metaclass=Q): pass"""
3515
# one parent, simple body
3518
__metaclass__ = Meta
3522
class X(object, metaclass=Meta):
3529
__metaclass__ = Meta; x = 4; g = 23
3532
class X(metaclass=Meta):
3537
# one parent, simple body, __metaclass__ last
3541
__metaclass__ = Meta
3544
class X(object, metaclass=Meta):
3549
# redefining __metaclass__
3557
class X(metaclass=B):
3562
# multiple inheritance, simple body
3564
class X(clsA, clsB):
3565
__metaclass__ = Meta
3569
class X(clsA, clsB, metaclass=Meta):
3574
# keywords in the class statement
3575
b = """class m(a, arg=23): __metaclass__ = Meta"""
3576
a = """class m(a, arg=23, metaclass=Meta): pass"""
3264
3580
if __name__ == "__main__":
3265
3581
import __main__