Python3 compatible generate_test_code.py
diff --git a/tests/scripts/generate_test_code.py b/tests/scripts/generate_test_code.py
old mode 100644
new mode 100755
index 38b0d75..bf4ddb8
--- a/tests/scripts/generate_test_code.py
+++ b/tests/scripts/generate_test_code.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Test suites code generator.
 #
 # Copyright (C) 2018, ARM Limited, All Rights Reserved
@@ -33,8 +34,10 @@
 """
 
 
+import io
 import os
 import re
+import sys
 import argparse
 import shutil
 
@@ -59,7 +62,7 @@
     pass
 
 
-class FileWrapper(file):
+class FileWrapper(io.FileIO):
     """
     File wrapper class. Provides reading with line no. tracking. 
     """
@@ -73,24 +76,17 @@
         super(FileWrapper, self).__init__(file_name, 'r')
         self.line_no = 0
 
-    def next(self):
+    def __next__(self):
         """
         Iterator return impl.
         :return: Line read from file.
         """
-        line = super(FileWrapper, self).next()
+        line = super(FileWrapper, self).__next__()
         if line:
             self.line_no += 1
-        return line
-
-    def readline(self, limit=0):
-        """
-        Wrap the base class readline.
-        
-        :param limit: limit to match file.readline([limit])
-        :return: Line read from file.
-        """
-        return self.next()
+            # Convert byte array to string with correct encoding
+            return line.decode(sys.getdefaultencoding())
+        return None
 
 
 def split_dep(dep):
@@ -513,7 +509,7 @@
     :return: Returns expression check code.
     """
     expression_code = ''
-    for i in xrange(len(test_args)):
+    for i in range(len(test_args)):
         typ = func_args[i]
         val = test_args[i]