X Tutup
# Copyright 2019 The go-python Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. doc="function" def fn(p): "docstring" return p+1 assert fn(1) == 2 # FIXME this doesn't work yet #assert fn.__doc__ == "docstring" #fn.__doc__ = "hello" #assert fn.__doc__ == "hello" assert str(type(fn)) == "" fn.x = 3 assert fn.x == 3 def f2(p): return p+2 doc="check __code__" fn.__code__ = f2.__code__ assert fn(1) == 3 try: fn.__code__ = "bad" except TypeError: pass else: assert False, "TypeError not raised" doc="check __defaults__" def f3(p=2): return p assert f3.__defaults__ == (2,) assert f3() == 2 f3.__defaults__ = (10,) assert f3() == 10 assert f3.__defaults__ == (10,) try: f3.__defaults__ = "bad" except TypeError: pass else: assert False, "TypeError not raised" del f3.__defaults__ assert f3.__defaults__ == None or f3.__defaults__ == () doc="check __kwdefaults__" def f4(*, b=2): return b assert f4.__kwdefaults__ == {"b":2} assert f4() == 2 f4.__kwdefaults__ = {"b":10} assert f4() == 10 assert f4.__kwdefaults__ == {"b":10} try: f4.__kwdefaults__ = "bad" except TypeError: pass else: assert False, "TypeError not raised" del f4.__kwdefaults__ assert f4.__kwdefaults__ == None or f4.__kwdefaults__ == {} doc="check __annotations__" def f5(a: "potato") -> "sausage": pass assert f5.__annotations__ == {'a': 'potato', 'return': 'sausage'} f5.__annotations__ = {'a': 'potato', 'return': 'SAUSAGE'} assert f5.__annotations__ == {'a': 'potato', 'return': 'SAUSAGE'} try: f5.__annotations__ = "bad" except TypeError: pass else: assert False, "TypeError not raised" del f5.__annotations__ assert f5.__annotations__ == None or f5.__annotations__ == {} doc="check __dict__" def f6(): pass assert f6.__dict__ == {} f6.__dict__ = {'a': 'potato'} assert f6.__dict__ == {'a': 'potato'} try: f6.__dict__ = "bad" except TypeError: pass else: assert False, "TypeError not raised" try: del f6.__dict__ except (TypeError, AttributeError): pass else: assert False, "Error not raised" doc="check __name__" def f7(): pass assert f7.__name__ == "f7" f7.__name__ = "new_name" assert f7.__name__ == "new_name" try: f7.__name__ = 1 except TypeError: pass else: assert False, "TypeError not raised" doc="check __qualname__" def f8(): pass assert f8.__qualname__ == "f8" f8.__qualname__ = "new_qualname" assert f8.__qualname__ == "new_qualname" try: f8.__qualname__ = 1 except TypeError: pass else: assert False, "TypeError not raised" doc="finished"
X Tutup