Quellcode durchsuchen

pygrass: change test to work on both python2 and python3

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@65595 15284696-431f-4ddb-bdfa-cd5b030d7da7
Pietro Zambelli vor 9 Jahren
Ursprung
Commit
42e33dde5c
1 geänderte Dateien mit 24 neuen und 4 gelöschten Zeilen
  1. 24 4
      lib/python/pygrass/modules/interface/testsuite/test_modules.py

+ 24 - 4
lib/python/pygrass/modules/interface/testsuite/test_modules.py

@@ -4,6 +4,7 @@ Created on Tue Jun 24 09:43:53 2014
 
 @author: pietro
 """
+import sys
 from fnmatch import fnmatch
 from grass.gunittest.case import TestCase
 from grass.gunittest.main import test
@@ -11,11 +12,30 @@ from grass.gunittest.main import test
 from grass.script.core import get_commands
 from grass.pygrass.modules.interface import Module
 
+PY2 = sys.version_info[0] == 2
+if PY2:
+    from StringIO import StringIO
+else:
+    from io import BytesIO as StringIO
+
 
 SKIP = ["g.parser", ]
 
 
-class TestModulesMeta(type):
+# taken from six
+def with_metaclass(meta, *bases):
+    """Create a base class with a metaclass."""
+    # This requires a bit of explanation: the basic idea is to make a dummy
+    # metaclass for one level of class instantiation that replaces itself with
+    # the actual metaclass.
+    class metaclass(meta):
+
+        def __new__(cls, name, this_bases, d):
+            return meta(name, bases, d)
+    return type.__new__(metaclass, 'temporary_class', (), {})
+
+
+class ModulesMeta(type):
     def __new__(mcs, name, bases, dict):
 
         def gen_test(cmd):
@@ -31,15 +51,15 @@ class TestModulesMeta(type):
         return type.__new__(mcs, name, bases, dict)
 
 
-class TestModules(TestCase):
-    __metaclass__ = TestModulesMeta
+class TestModules(with_metaclass(ModulesMeta, TestCase)):
+    pass
 
 
 class TestModulesPickability(TestCase):
     def test_rsun(self):
         """Test if a Module instance is pickable"""
         import pickle
-        from StringIO import StringIO
+
         out = StringIO()
         pickle.dump(Module('r.sun'), out)
         out.close()