1## @file 2# Unit tests for checking syntax of Python source code 3# 4# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR> 5# 6# SPDX-License-Identifier: BSD-2-Clause-Patent 7# 8 9## 10# Import Modules 11# 12import os 13import unittest 14import py_compile 15 16import TestTools 17 18class Tests(TestTools.BaseToolsTest): 19 20 def setUp(self): 21 TestTools.BaseToolsTest.setUp(self) 22 23 def SingleFileTest(self, filename): 24 try: 25 py_compile.compile(filename, doraise=True) 26 except Exception as e: 27 self.fail('syntax error: %s, Error is %s' % (filename, str(e))) 28 29def MakePythonSyntaxCheckTests(): 30 def GetAllPythonSourceFiles(): 31 pythonSourceFiles = [] 32 for (root, dirs, files) in os.walk(TestTools.PythonSourceDir): 33 for filename in files: 34 if filename.lower().endswith('.py'): 35 pythonSourceFiles.append( 36 os.path.join(root, filename) 37 ) 38 return pythonSourceFiles 39 40 def MakeTestName(filename): 41 assert filename.lower().endswith('.py') 42 name = filename[:-3] 43 name = name.replace(TestTools.PythonSourceDir, '') 44 name = name.replace(os.path.sep, '_') 45 return 'test' + name 46 47 def MakeNewTest(filename): 48 test = MakeTestName(filename) 49 newmethod = lambda self: self.SingleFileTest(filename) 50 setattr( 51 Tests, 52 test, 53 newmethod 54 ) 55 56 for filename in GetAllPythonSourceFiles(): 57 MakeNewTest(filename) 58 59MakePythonSyntaxCheckTests() 60del MakePythonSyntaxCheckTests 61 62TheTestSuite = TestTools.MakeTheTestSuite(locals()) 63 64if __name__ == '__main__': 65 allTests = TheTestSuite() 66 unittest.TextTestRunner().run(allTests) 67 68 69