Przeglądaj źródła

pygrass: Add test to verify isolation of pygrass.modules.* from ctypes, thank you to Vaclav to share ideas

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@65592 15284696-431f-4ddb-bdfa-cd5b030d7da7
Pietro Zambelli 10 lat temu
rodzic
commit
7f033d370d

+ 53 - 0
lib/python/pygrass/modules/testsuite/test_import_isolation.py

@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+"""
+Authors:   pietro
+
+Copyright: (C) 2015 pietro
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+
+Created on  Wed Jul 15 11:34:32 2015
+"""
+from __future__ import absolute_import
+
+import sys
+import fnmatch
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+def check(*patterns):
+    """Return a set of the imported libraries that soddisfies several patterns.
+    """
+    result = []
+    imports = sorted(sys.modules.keys())
+    for pattern in patterns:
+        result.extend(fnmatch.filter(imports, pattern))
+    return set(result)
+
+
+class TestImportIsolation(TestCase):
+    patterns = ['grass.lib*']
+
+    def test_import_isolation(self):
+        """Check that modules  classes are not using ctypes"""
+        isolate = set()
+        self.assertEqual(isolate, check(*self.patterns),
+                         msg="Test isolation before any import.")
+        # same import done in __init__ file
+        from grass.pygrass.modules.interface import Module, ParallelModuleQueue
+        from grass.pygrass.modules import shortcuts
+        self.assertEqual(isolate, check(*self.patterns),
+                         msg="Test isolation after import Module.")
+        # test the other way round
+        from grass.pygrass.vector import VectorTopo
+        self.assertNotEqual(isolate, check(*self.patterns),
+                            msg=("Test the isolation is broken, therefore "
+                                 "the defined patterns are correct"))
+
+
+if __name__ == '__main__':
+    test()