Fix Python 2 & 3 compatibility in test_generate_test_code.py
diff --git a/tests/scripts/test_generate_test_code.py b/tests/scripts/test_generate_test_code.py
index 149159c..2ef12e1 100755
--- a/tests/scripts/test_generate_test_code.py
+++ b/tests/scripts/test_generate_test_code.py
@@ -23,9 +23,19 @@
 """
 
 
-from StringIO import StringIO
+try:
+    # Python 2
+    from StringIO import StringIO
+except ImportError:
+    # Python 3
+    from io import StringIO
 from unittest import TestCase, main as unittest_main
-from mock import patch
+try:
+    # Python 2
+    from mock import patch
+except ImportError:
+    # Python 3
+    from unittest.mock import patch
 from generate_test_code import gen_dependencies, gen_dependencies_one_line
 from generate_test_code import gen_function_wrapper, gen_dispatch
 from generate_test_code import parse_until_pattern, GeneratorInputError
@@ -307,9 +317,16 @@
 
         :return: Line read from file.
         """
-        line = super(StringIOWrapper, self).next()
+        parent = super(StringIOWrapper, self)
+        if getattr(parent, 'next', None):
+            # Python 2
+            line = parent.next()
+        else:
+            # Python 3
+            line = parent.__next__()
         return line
 
+    # Python 3
     __next__ = next
 
     def readline(self, length=0):
@@ -532,6 +549,38 @@
     Test suite for testing parse_function_code()
     """
 
+    def assert_raises_regex(self, exp, regex, func, *args):
+        """
+        Python 2 & 3 portable wrapper of assertRaisesRegex(p)? function.
+
+        :param exp: Exception type expected to be raised by cb.
+        :param regex: Expected exception message
+        :param func: callable object under test
+        :param args: variable positional arguments
+        """
+        parent = super(ParseFunctionCode, self)
+
+        # Pylint does not appreciate that the super method called
+        # conditionally can be available in other Python version
+        # then that of Pylint.
+        # Workaround is to call the method via getattr.
+        # Pylint ignores that the method got via getattr is
+        # conditionally executed. Method has to be a callable.
+        # Hence, using a dummy callable for getattr default.
+        dummy = lambda *x: None
+        # First Python 3 assertRaisesRegex is checked, since Python 2
+        # assertRaisesRegexp is also available in Python 3 but is
+        # marked deprecated.
+        for name in ('assertRaisesRegex', 'assertRaisesRegexp'):
+            method = getattr(parent, name, dummy)
+            if method is not dummy:
+                method(exp, regex, func, *args)
+                break
+        else:
+            raise AttributeError(" 'ParseFunctionCode' object has no attribute"
+                                 " 'assertRaisesRegex' or 'assertRaisesRegexp'"
+                                )
+
     def test_no_function(self):
         """
         Test no test function found.
@@ -544,8 +593,8 @@
 '''
         stream = StringIOWrapper('test_suite_ut.function', data)
         err_msg = 'file: test_suite_ut.function - Test functions not found!'
-        self.assertRaisesRegexp(GeneratorInputError, err_msg,
-                                parse_function_code, stream, [], [])
+        self.assert_raises_regex(GeneratorInputError, err_msg,
+                                 parse_function_code, stream, [], [])
 
     def test_no_end_case_comment(self):
         """
@@ -560,8 +609,8 @@
         stream = StringIOWrapper('test_suite_ut.function', data)
         err_msg = r'file: test_suite_ut.function - '\
                   'end case pattern .*? not found!'
-        self.assertRaisesRegexp(GeneratorInputError, err_msg,
-                                parse_function_code, stream, [], [])
+        self.assert_raises_regex(GeneratorInputError, err_msg,
+                                 parse_function_code, stream, [], [])
 
     @patch("generate_test_code.parse_function_arguments")
     def test_function_called(self,
@@ -678,8 +727,8 @@
         data = 'int entropy_threshold( char * a, data_t * h, int result )'
         err_msg = 'file: test_suite_ut.function - Test functions not found!'
         stream = StringIOWrapper('test_suite_ut.function', data)
-        self.assertRaisesRegexp(GeneratorInputError, err_msg,
-                                parse_function_code, stream, [], [])
+        self.assert_raises_regex(GeneratorInputError, err_msg,
+                                 parse_function_code, stream, [], [])
 
     @patch("generate_test_code.gen_dispatch")
     @patch("generate_test_code.gen_dependencies")
@@ -1155,8 +1204,7 @@
             for _, _, _, _ in parse_test_data(stream):
                 pass
         except GeneratorInputError as err:
-            pass
-        self.assertEqual(type(err), GeneratorInputError)
+            self.assertEqual(type(err), GeneratorInputError)
 
     def test_incomplete_data(self):
         """
@@ -1174,8 +1222,7 @@
             for _, _, _, _ in parse_test_data(stream):
                 pass
         except GeneratorInputError as err:
-            pass
-        self.assertEqual(type(err), GeneratorInputError)
+            self.assertEqual(type(err), GeneratorInputError)
 
 
 class GenDepCheck(TestCase):