]> granicus.if.org Git - python/commitdiff
add tests for PyInstanceMethod_Type
authorBenjamin Peterson <benjamin@python.org>
Thu, 16 Oct 2008 23:56:29 +0000 (23:56 +0000)
committerBenjamin Peterson <benjamin@python.org>
Thu, 16 Oct 2008 23:56:29 +0000 (23:56 +0000)
Lib/test/test_capi.py
Modules/_testcapimodule.c

index 6c87645b0635bcd5c3b4dcf4c04d2ea8c445956a..efa7c345a4200753fa5a5f94fdf4990671413784 100644 (file)
@@ -2,10 +2,34 @@
 # these are all functions _testcapi exports whose name begins with 'test_'.
 
 import sys
+import unittest
 from test import support
 import _testcapi
 
+def testfunction(self):
+    """some doc"""
+    return self
+
+class InstanceMethod:
+    id = _testcapi.instancemethod(id)
+    testfunction = _testcapi.instancemethod(testfunction)
+
+class CAPITest(unittest.TestCase):
+
+    def test_instancemethod(self):
+        inst = InstanceMethod()
+        self.assertEqual(id(inst), inst.id())
+        self.assert_(inst.testfunction() is inst)
+        self.assertEqual(inst.testfunction.__doc__, testfunction.__doc__)
+        self.assertEqual(InstanceMethod.testfunction.__doc__, testfunction.__doc__)
+
+        InstanceMethod.testfunction.attribute = "test"
+        self.assertEqual(testfunction.attribute, "test")
+        self.assertRaises(AttributeError, setattr, inst.testfunction, "attribute", "test")
+
+
 def test_main():
+    support.run_unittest(CAPITest)
 
     for name in dir(_testcapi):
         if name.startswith('test_'):
@@ -47,5 +71,6 @@ def test_main():
         t.start()
         t.join()
 
+
 if __name__ == "__main__":
     test_main()
index 940605e47653c0ab8f3acfe9cd6441f9205e4797..b1cb6fe2404a9a2cfdea1f1e056eb8f147595f73 100644 (file)
@@ -1231,6 +1231,8 @@ PyInit__testcapi(void)
        PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyLong_FromSsize_t(PY_SSIZE_T_MAX));
        PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyLong_FromSsize_t(PY_SSIZE_T_MIN));
        PyModule_AddObject(m, "SIZEOF_PYGC_HEAD", PyLong_FromSsize_t(sizeof(PyGC_Head)));
+       Py_INCREF(&PyInstanceMethod_Type);
+       PyModule_AddObject(m, "instancemethod", (PyObject *)&PyInstanceMethod_Type);
 
        TestError = PyErr_NewException("_testcapi.error", NULL, NULL);
        Py_INCREF(TestError);