summaryrefslogtreecommitdiffstats
path: root/Lib/lib2to3/tests/test_fixers.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/lib2to3/tests/test_fixers.py')
-rwxr-xr-xLib/lib2to3/tests/test_fixers.py69
1 files changed, 66 insertions, 3 deletions
diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py
index ea361de..2e0092f 100755
--- a/Lib/lib2to3/tests/test_fixers.py
+++ b/Lib/lib2to3/tests/test_fixers.py
@@ -2725,16 +2725,79 @@ class Test_callable(FixerTestCase):
def test_prefix_preservation(self):
b = """callable( x)"""
- a = """hasattr( x, '__call__')"""
+ a = """import collections\nisinstance( x, collections.Callable)"""
self.check(b, a)
b = """if callable(x): pass"""
- a = """if hasattr(x, '__call__'): pass"""
+ a = """import collections
+if isinstance(x, collections.Callable): pass"""
self.check(b, a)
def test_callable_call(self):
b = """callable(x)"""
- a = """hasattr(x, '__call__')"""
+ a = """import collections\nisinstance(x, collections.Callable)"""
+ self.check(b, a)
+
+ def test_global_import(self):
+ b = """
+def spam(foo):
+ callable(foo)"""[1:]
+ a = """
+import collections
+def spam(foo):
+ isinstance(foo, collections.Callable)"""[1:]
+ self.check(b, a)
+
+ b = """
+import collections
+def spam(foo):
+ callable(foo)"""[1:]
+ # same output if it was already imported
+ self.check(b, a)
+
+ b = """
+from collections import *
+def spam(foo):
+ callable(foo)"""[1:]
+ a = """
+from collections import *
+import collections
+def spam(foo):
+ isinstance(foo, collections.Callable)"""[1:]
+ self.check(b, a)
+
+ b = """
+do_stuff()
+do_some_other_stuff()
+assert callable(do_stuff)"""[1:]
+ a = """
+import collections
+do_stuff()
+do_some_other_stuff()
+assert isinstance(do_stuff, collections.Callable)"""[1:]
+ self.check(b, a)
+
+ b = """
+if isinstance(do_stuff, Callable):
+ assert callable(do_stuff)
+ do_stuff(do_stuff)
+ if not callable(do_stuff):
+ exit(1)
+ else:
+ assert callable(do_stuff)
+else:
+ assert not callable(do_stuff)"""[1:]
+ a = """
+import collections
+if isinstance(do_stuff, Callable):
+ assert isinstance(do_stuff, collections.Callable)
+ do_stuff(do_stuff)
+ if not isinstance(do_stuff, collections.Callable):
+ exit(1)
+ else:
+ assert isinstance(do_stuff, collections.Callable)
+else:
+ assert not isinstance(do_stuff, collections.Callable)"""[1:]
self.check(b, a)
def test_callable_should_not_change(self):