|
@@ -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()
|