Source

mino-pypy / pypy / module / cppyy / test / test_crossing.py

Diff from to

pypy/module/cppyy/test/test_crossing.py

 
 
 class AppTestCrossing(AppTestCpythonExtensionBase):
-    spaceconfig = dict(usemodules=['cpyext', 'cppyy', 'thread', '_rawffi', '_ffi', 'array'])
+    spaceconfig = dict(usemodules=['cpyext', 'cppyy', 'thread', '_rawffi', '_ffi',
+                                   'array', 'itertools', 'rctime', 'binascii'])
 
     def setup_class(cls):
         # following from AppTestCpythonExtensionBase, with cppyy added
 
         # cppyy specific additions (not that the test_dct is loaded late
         # to allow the generated extension module be loaded first)
-        cls.w_test_dct  = cls.space.wrap(test_dct)
-        cls.w_datatypes = cls.space.appexec([], """():
-            import cppyy, cpyext""")
+        cls.w_test_dct    = cls.space.wrap(test_dct)
+        cls.w_pre_imports = cls.space.appexec([], """():
+            import cppyy, ctypes""")    # prevents leak-checking complaints on ctypes
+        from pypy.module.imp.importing import get_so_extension
+        cls.w_soext = cls.space.wrap(get_so_extension(cls.space))
 
-    def setup_method(self, func):
-        AppTestCpythonExtensionBase.setup_method(self, func)
+    def test00_base_class(self):
+        """Test from cpyext; only here to see whether the imported class works"""
 
-        if hasattr(self, 'cmodule'):
-            return
+        import sys
+        init = """
+        if (Py_IsInitialized())
+            Py_InitModule("foo", NULL);
+        """
+        self.import_module(name='foo', init=init)
+        assert 'foo' in sys.modules
+
+    def test01_build_bar_extension(self):
+        """Test that builds the needed extension; runs as test to keep it loaded"""
 
         import os, ctypes
 
         if (Py_IsInitialized())
             Py_InitModule("bar", methods);
         """
+        # note: only the symbols are needed for C, none for python
         body = """
         long bar_unwrap(PyObject* arg)
         {
         };
         """
 
-        modname = self.import_module(name='bar', init=init, body=body, load_it=False)
-        from pypy.module.imp.importing import get_so_extension
-        soext = get_so_extension(self.space)
-        fullmodname = os.path.join(modname, 'bar' + soext)
+        dirname = self.import_module(name='bar', init=init, body=body, load_it=False)
+        fullmodname = os.path.join(dirname, 'bar' + self.soext)
         self.cmodule = ctypes.CDLL(fullmodname, ctypes.RTLD_GLOBAL)
 
-    def test00_base_class(self):
-        """Test from cpyext; only here to see whether the imported class works"""
-
-        import sys
-        init = """
-        if (Py_IsInitialized())
-            Py_InitModule("foo", NULL);
-        """
-        self.import_module(name='foo', init=init)
-        assert 'foo' in sys.modules
-
-    def test01_crossing_dict(self):
+    def test02_crossing_dict(self):
         """Test availability of all needed classes in the dict"""
 
         import cppyy
 
         assert crossing.A == crossing.A
 
-    def test02_send_pyobject(self):
+    def test03_send_pyobject(self):
         """Test sending a true pyobject to C++"""
 
         import cppyy
         a = crossing.A()
         assert a.unwrap(13) == 13
 
-    def test03_send_and_receive_pyobject(self):
+    def test04_send_and_receive_pyobject(self):
         """Test receiving a true pyobject from C++"""
 
         import cppyy