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