CheckPythonSyntax.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. # Import Modules
  10. #
  11. import os
  12. import unittest
  13. import py_compile
  14. import TestTools
  15. class Tests(TestTools.BaseToolsTest):
  16. def setUp(self):
  17. TestTools.BaseToolsTest.setUp(self)
  18. def SingleFileTest(self, filename):
  19. try:
  20. py_compile.compile(filename, doraise=True)
  21. except Exception as e:
  22. self.fail('syntax error: %s, Error is %s' % (filename, str(e)))
  23. def MakePythonSyntaxCheckTests():
  24. def GetAllPythonSourceFiles():
  25. pythonSourceFiles = []
  26. for (root, dirs, files) in os.walk(TestTools.PythonSourceDir):
  27. for filename in files:
  28. if filename.lower().endswith('.py'):
  29. pythonSourceFiles.append(
  30. os.path.join(root, filename)
  31. )
  32. return pythonSourceFiles
  33. def MakeTestName(filename):
  34. assert filename.lower().endswith('.py')
  35. name = filename[:-3]
  36. name = name.replace(TestTools.PythonSourceDir, '')
  37. name = name.replace(os.path.sep, '_')
  38. return 'test' + name
  39. def MakeNewTest(filename):
  40. test = MakeTestName(filename)
  41. newmethod = lambda self: self.SingleFileTest(filename)
  42. setattr(
  43. Tests,
  44. test,
  45. newmethod
  46. )
  47. for filename in GetAllPythonSourceFiles():
  48. MakeNewTest(filename)
  49. MakePythonSyntaxCheckTests()
  50. del MakePythonSyntaxCheckTests
  51. TheTestSuite = TestTools.MakeTheTestSuite(locals())
  52. if __name__ == '__main__':
  53. allTests = TheTestSuite()
  54. unittest.TextTestRunner().run(allTests)