mirror of https://github.com/swig/swig
101 lines
2.6 KiB
Python
101 lines
2.6 KiB
Python
import python_nondynamic
|
|
|
|
def debug_print(s):
|
|
show_debug = False
|
|
if show_debug:
|
|
print(s)
|
|
|
|
aa = python_nondynamic.A()
|
|
|
|
aa.a = 1
|
|
aa.b = 2
|
|
|
|
# Check values are really set
|
|
if python_nondynamic.retrieve_A_a(aa) != 1: raise RuntimeError("a not set correctly")
|
|
if python_nondynamic.retrieve_A_b(aa) != 2: raise RuntimeError("b not set correctly")
|
|
|
|
try:
|
|
aa.c = 2
|
|
raise RuntimeError("A is not static")
|
|
except AttributeError as e:
|
|
debug_print(e)
|
|
pass
|
|
|
|
class PurePythonClass(object):
|
|
def __init__(self):
|
|
self.variables = dict()
|
|
def __set__(self, name, value):
|
|
self.variables[name] = value
|
|
pass
|
|
|
|
class B(python_nondynamic.A):
|
|
c = 4
|
|
cc = PurePythonClass()
|
|
cc.nnn = "new attrib"
|
|
|
|
def __init__(self):
|
|
python_nondynamic.A.__init__(self)
|
|
pass
|
|
pass
|
|
|
|
bb = B()
|
|
bb.a = 4
|
|
bb.b = 5
|
|
# Check values are really set
|
|
if python_nondynamic.retrieve_A_a(bb) != 4: raise RuntimeError("a not set correctly")
|
|
if python_nondynamic.retrieve_A_b(bb) != 5: raise RuntimeError("b not set correctly")
|
|
|
|
try:
|
|
bb.c = 3
|
|
raise RuntimeError("B.c class variable messes up nondynamic-ness of B bb.c={} B.c={}".format(bb.c, B.c))
|
|
except AttributeError as e:
|
|
debug_print(e)
|
|
pass
|
|
|
|
try:
|
|
bb.d = 2
|
|
raise RuntimeError("B is not static")
|
|
except AttributeError as e:
|
|
debug_print(e)
|
|
pass
|
|
|
|
cc = python_nondynamic.C()
|
|
cc.d = 3
|
|
|
|
# An inconsistency between builtin and non-builtin.
|
|
# Class variables cannot be set on builtin types, like other Python builtins, eg list.classvar=111 fails
|
|
if python_nondynamic.is_python_builtin():
|
|
try:
|
|
python_nondynamic.C.classvar = 111
|
|
raise RuntimeError("C should not allow static variables to be added when using builtin")
|
|
except AttributeError as e:
|
|
debug_print(e)
|
|
pass
|
|
else:
|
|
python_nondynamic.C.classvar = 111
|
|
|
|
if not python_nondynamic.is_python_builtin():
|
|
# Not working with builtin :(
|
|
try:
|
|
B.a = 10
|
|
raise RuntimeError("B should not allow adding a class variable by setting it as an instance variable")
|
|
except AttributeError as e:
|
|
debug_print(e)
|
|
pass
|
|
|
|
try:
|
|
python_nondynamic.A.a = 10
|
|
raise RuntimeError("A should not allow adding a class variable by setting it as an instance variable")
|
|
except AttributeError as e:
|
|
debug_print(e)
|
|
pass
|
|
|
|
if not python_nondynamic.is_python_builtin():
|
|
try:
|
|
bb.cc = 3
|
|
raise RuntimeError("B.cc class variable messes up nondynamic-ness of B bb.cc={} B.cc={}".format(bb.cc, B.cc))
|
|
except AttributeError as e:
|
|
debug_print(e)
|
|
pass
|
|
|