Skip to content

Commit 5f4f4e6

Browse files
committed
add a test for complex __new__ behaviour
1 parent 8faa685 commit 5f4f4e6

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_class.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,48 @@ def test_new_not_descriptor():
5252
class C:
5353
__new__ = str
5454
assert C() == str(C)
55+
56+
57+
def test_meta_meta_new():
58+
class NewDescriptor():
59+
def new_descriptor_new(self):
60+
return lambda *a, **kw: ("a kind of NewDescriptor thing", a, kw)
61+
62+
def __get__(self, *args):
63+
return self.new_descriptor_new()
64+
65+
def __set__(self, *args):
66+
raise NotImplementedError
67+
68+
class MetaMeta(type):
69+
pass
70+
71+
class Meta(type, metaclass=MetaMeta):
72+
def __new__(*args, **kwargs):
73+
cls = super().__new__(*args, **kwargs)
74+
cls.metatype = Meta
75+
return cls
76+
77+
# setup done, now testing
78+
79+
class aMeta(metaclass=Meta):
80+
pass
81+
82+
MetaMeta.__new__ = Meta.__new__
83+
84+
class stillAMeta(metaclass=Meta):
85+
pass
86+
87+
class aMetaThatIsNotAMetaMeta(metaclass=MetaMeta):
88+
pass
89+
90+
MetaMeta.__new__ = NewDescriptor()
91+
92+
class notAMeta(metaclass=Meta):
93+
pass
94+
95+
assert aMeta[0] == 'a kind of Meta'
96+
assert stillAMeta[0] == 'a kind of Meta'
97+
assert aMetaThatIsNotAMetaMeta[0] == 'a kind of Meta'
98+
assert notAMeta[0] == 'a kind of NewDescriptor thing'
99+
q

0 commit comments

Comments
 (0)