4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync## @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Unit tests for checking syntax of Python source code
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync##
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync# Import Modules
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport os
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport unittest
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport py_compile
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncimport TestTools
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass Tests(TestTools.BaseToolsTest):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def setUp(self):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TestTools.BaseToolsTest.setUp(self)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def SingleFileTest(self, filename):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync try:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync py_compile.compile(filename, doraise=True)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync except Exception, e:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync self.fail('syntax error: %s, Error is %s' % (filename, str(e)))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdef MakePythonSyntaxCheckTests():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def GetAllPythonSourceFiles():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pythonSourceFiles = []
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (root, dirs, files) in os.walk(TestTools.PythonSourceDir):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for filename in files:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if filename.lower().endswith('.py'):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pythonSourceFiles.append(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync os.path.join(root, filename)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return pythonSourceFiles
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def MakeTestName(filename):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync assert filename.lower().endswith('.py')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync name = filename[:-3]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync name = name.replace(TestTools.PythonSourceDir, '')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync name = name.replace(os.path.sep, '_')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return 'test' + name
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync def MakeNewTest(filename):
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync test = MakeTestName(filename)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync newmethod = lambda self: self.SingleFileTest(filename)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync setattr(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Tests,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync test,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync newmethod
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for filename in GetAllPythonSourceFiles():
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MakeNewTest(filename)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncMakePythonSyntaxCheckTests()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncdel MakePythonSyntaxCheckTests
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTheTestSuite = TestTools.MakeTheTestSuite(locals())
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncif __name__ == '__main__':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync allTests = TheTestSuite()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unittest.TextTestRunner().run(allTests)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync