Author: Matti Picus <matti.pi...@gmail.com>
Branch: missing-tp_new
Changeset: r88881:7fe5dcdd537f
Date: 2016-11-26 21:06 +0200
http://bitbucket.org/pypy/pypy/changeset/7fe5dcdd537f/

Log:    move tests and add one for tp_hash

diff --git a/pypy/module/cpyext/test/test_typeobject.py 
b/pypy/module/cpyext/test/test_typeobject.py
--- a/pypy/module/cpyext/test/test_typeobject.py
+++ b/pypy/module/cpyext/test/test_typeobject.py
@@ -452,48 +452,6 @@
         ref = make_ref(space, w_obj)
         api.Py_DecRef(ref)
 
-    def test_nb_add_from_python(self, space, api):
-        w_date = space.appexec([], """():
-            class DateType(object):
-                def __add__(self, other):
-                    return 'sum!'
-            return DateType()
-            """)
-        w_datetype = space.type(w_date)
-        py_date = make_ref(space, w_date)
-        py_datetype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_datetype))
-        assert py_datetype.c_tp_as_number
-        assert py_datetype.c_tp_as_number.c_nb_add
-        w_obj = generic_cpy_call(space, py_datetype.c_tp_as_number.c_nb_add,
-                                 py_date, py_date)
-        assert space.str_w(w_obj) == 'sum!'
-
-    def test_tp_new_from_python(self, space, api):
-        w_date = space.appexec([], """():
-            class Date(object):
-                def __new__(cls, year, month, day):
-                    self = object.__new__(cls)
-                    self.year = year
-                    self.month = month
-                    self.day = day
-                    return self
-            return Date
-            """)
-        py_datetype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_date))
-        one = space.newint(1)
-        arg = space.newtuple([one, one, one])
-        # call w_date.__new__
-        w_obj = space.call_function(w_date, one, one, one)
-        w_year = space.getattr(w_obj, space.newbytes('year'))
-        assert space.int_w(w_year) == 1
-
-        # currently fails with "object() takse no parameters,
-        # from the tp_new of space.w_object
-        w_obj = generic_cpy_call(space, py_datetype.c_tp_new, py_datetype, 
-                                 arg, space.newdict({}))
-        w_year = space.getattr(w_obj, space.newbytes('year'))
-        assert space.int_w(w_year) == 1
-
 class AppTestSlots(AppTestCpythonExtensionBase):
     def setup_class(cls):
         AppTestCpythonExtensionBase.setup_class.im_func(cls)
diff --git a/pypy/module/cpyext/test/test_userslots.py 
b/pypy/module/cpyext/test/test_userslots.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/cpyext/test/test_userslots.py
@@ -0,0 +1,63 @@
+from pypy.module.cpyext.test.test_api import BaseApiTest
+from rpython.rtyper.lltypesystem import rffi
+from pypy.module.cpyext.pyobject import make_ref, from_ref
+from pypy.module.cpyext.api import generic_cpy_call
+from pypy.module.cpyext.typeobject import PyTypeObjectPtr
+
+
+class TestAppLevelObject(BaseApiTest):
+    def test_nb_add_from_python(self, space, api):
+        w_date = space.appexec([], """():
+            class DateType(object):
+                def __add__(self, other):
+                    return 'sum!'
+            return DateType()
+            """)
+        w_datetype = space.type(w_date)
+        py_date = make_ref(space, w_date)
+        py_datetype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_datetype))
+        assert py_datetype.c_tp_as_number
+        assert py_datetype.c_tp_as_number.c_nb_add
+        w_obj = generic_cpy_call(space, py_datetype.c_tp_as_number.c_nb_add,
+                                 py_date, py_date)
+        assert space.str_w(w_obj) == 'sum!'
+
+    def test_tp_hash_from_python(self, space, api):
+        w_c = space.appexec([], """():
+            class C:
+                def __hash__(self):
+                    return -23
+            return C()
+        """)
+        w_ctype = space.type(w_c)
+        py_c = make_ref(space, w_c)
+        py_ctype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_ctype))
+        assert py_ctype.c_tp_hash
+        val = generic_cpy_call(space, py_ctype.c_tp_hash, py_c)
+        assert val == -23
+
+    def test_tp_new_from_python(self, space, api):
+        w_date = space.appexec([], """():
+            class Date(object):
+                def __new__(cls, year, month, day):
+                    self = object.__new__(cls)
+                    self.year = year
+                    self.month = month
+                    self.day = day
+                    return self
+            return Date
+            """)
+        py_datetype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_date))
+        one = space.newint(1)
+        arg = space.newtuple([one, one, one])
+        # call w_date.__new__
+        w_obj = space.call_function(w_date, one, one, one)
+        w_year = space.getattr(w_obj, space.newbytes('year'))
+        assert space.int_w(w_year) == 1
+
+        w_obj = generic_cpy_call(space, py_datetype.c_tp_new, py_datetype, 
+                                 arg, space.newdict({}))
+        w_year = space.getattr(w_obj, space.newbytes('year'))
+        assert space.int_w(w_year) == 1
+
+
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to