From 0344fa1ddfbe8674061fed8e904468b9bd2aa550 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 3 Nov 2014 16:09:39 +0000 Subject: py: Fix builtin callable so it checks user-defined instances correctly. Addresses issue #953. --- tests/basics/builtin_callable.py | 42 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/basics/builtin_callable.py b/tests/basics/builtin_callable.py index caddb885c..3ae49f004 100644 --- a/tests/basics/builtin_callable.py +++ b/tests/basics/builtin_callable.py @@ -1,5 +1,43 @@ -import sys +# test builtin callable + +# primitives should not be callable +print(callable(None)) print(callable(1)) +print(callable([])) print(callable("dfsd")) -print(callable(callable)) + +# modules should not be callabe +import sys print(callable(sys)) + +# builtins should be callable +print(callable(callable)) + +# lambdas should be callable +print(callable(lambda:None)) + +# user defined functions should be callable +def f(): + pass +print(callable(f)) + +# types should be callable, but not instances +class A: + pass +print(callable(A)) +print(callable(A())) + +# instances with __call__ method should be callable +class B: + def __call__(self): + pass +print(callable(B())) + +# this checks internal use of callable when extracting members from an instance +class C: + def f(self): + return "A.f" +class D: + g = C() # g is a value and is not callable +print(callable(D().g)) +print(D().g.f()) -- cgit v1.2.3