Check In tool source code based on Build tool project revision r1655.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4
2009-07-17 09:10:31 +00:00
parent 577e30cdb4
commit 30fdf1140b
532 changed files with 231447 additions and 32 deletions

View File

@@ -0,0 +1,35 @@
## @file
# Unit tests for C based BaseTools
#
# Copyright (c) 2008, Intel Corporation
#
# All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##
# Import Modules
#
import os
import sys
import unittest
import TianoCompress
modules = (
TianoCompress,
)
def TheTestSuite():
suites = map(lambda module: module.TheTestSuite(), modules)
return unittest.TestSuite(suites)
if __name__ == '__main__':
allTests = TheTestSuite()
unittest.TextTestRunner().run(allTests)

View File

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

View File

@@ -0,0 +1,9 @@
all: test
test:
@python RunTests.py
clean:
find . -name '*.pyc' -exec rm '{}' ';'

View File

@@ -0,0 +1,32 @@
## @file
# Unit tests for Python based BaseTools
#
# Copyright (c) 2008, Intel Corporation
#
# All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##
# Import Modules
#
import os
import sys
import unittest
def TheTestSuite():
suites = []
import CheckPythonSyntax
suites.append(CheckPythonSyntax.TheTestSuite())
return unittest.TestSuite(suites)
if __name__ == '__main__':
allTests = TheTestSuite()
unittest.TextTestRunner().run(allTests)

View File

@@ -0,0 +1,40 @@
## @file
# Unit tests for BaseTools utilities
#
# Copyright (c) 2008, Intel Corporation
#
# All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##
# Import Modules
#
import os
import sys
import unittest
import TestTools
sys.path.append(TestTools.PythonSourceDir)
def GetCTestSuite():
import CToolsTests
return CToolsTests.TheTestSuite()
def GetPythonTestSuite():
import PythonToolsTests
return PythonToolsTests.TheTestSuite()
def GetAllTestsSuite():
return unittest.TestSuite([GetCTestSuite(), GetPythonTestSuite()])
if __name__ == '__main__':
allTests = GetAllTestsSuite()
unittest.TextTestRunner(verbosity=2).run(allTests)

View File

@@ -0,0 +1,167 @@
## @file
# Utility functions and classes for BaseTools unit tests
#
# Copyright (c) 2008, Intel Corporation
#
# All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##
# Import Modules
#
import base64
import os
import os.path
import random
import shutil
import subprocess
import sys
import types
import unittest
TestsDir = os.path.realpath(os.path.split(sys.argv[0])[0])
BaseToolsDir = os.path.realpath(os.path.join(TestsDir, '..'))
CSourceDir = os.path.join(BaseToolsDir, 'Source', 'C')
PythonSourceDir = os.path.join(BaseToolsDir, 'Source', 'Python')
TestTempDir = os.path.join(TestsDir, 'TestTempDir')
def MakeTheTestSuite(localItems):
tests = []
for name, item in localItems.iteritems():
if isinstance(item, types.TypeType):
if issubclass(item, unittest.TestCase):
tests.append(unittest.TestLoader().loadTestsFromTestCase(item))
elif issubclass(item, unittest.TestSuite):
tests.append(item())
return lambda: unittest.TestSuite(tests)
def GetBaseToolsPath():
if sys.platform in ('win32', 'win64'):
return os.path.join(BaseToolsDir, 'Bin', sys.platform.title())
else:
uname = os.popen('uname -sm').read().strip()
for char in (' ', '/'):
uname = uname.replace(char, '-')
return os.path.join(BaseToolsDir, 'BinWrappers', uname)
BaseToolsBinPath = GetBaseToolsPath()
class BaseToolsTest(unittest.TestCase):
def cleanOutDir(self, dir):
for dirItem in os.listdir(dir):
if dirItem in ('.', '..'): continue
dirItem = os.path.join(dir, dirItem)
self.RemoveFileOrDir(dirItem)
def CleanUpTmpDir(self):
if os.path.exists(self.testDir):
self.cleanOutDir(self.testDir)
def HandleTreeDeleteError(self, function, path, excinfo):
os.chmod(path, stat.S_IWRITE)
function(path)
def RemoveDir(self, dir):
shutil.rmtree(dir, False, self.HandleTreeDeleteError)
def RemoveFileOrDir(self, path):
if not os.path.exists(path):
return
elif os.path.isdir(path):
self.RemoveDir(path)
else:
os.remove(path)
def DisplayBinaryData(self, description, data):
print description, '(base64 encoded):'
b64data = base64.b64encode(data)
print b64data
def DisplayFile(self, fileName):
sys.stdout.write(self.ReadTmpFile(fileName))
sys.stdout.flush()
def RunTool(self, *args, **kwd):
if 'toolName' in kwd: toolName = kwd['toolName']
else: toolName = None
if 'logFile' in kwd: logFile = kwd['logFile']
else: logFile = None
if toolName is None: toolName = self.toolName
bin = os.path.join(self.baseToolsBins, toolName)
if logFile is not None:
logFile = open(os.path.join(self.testDir, logFile), 'w')
popenOut = logFile
else:
popenOut = subprocess.PIPE
args = [toolName] + list(args)
Proc = subprocess.Popen(
args, executable=bin,
stdout=popenOut, stderr=subprocess.STDOUT
)
if logFile is None:
Proc.stdout.read()
return Proc.wait()
def GetTmpFilePath(self, fileName):
return os.path.join(self.testDir, fileName)
def OpenTmpFile(self, fileName, mode = 'r'):
return open(os.path.join(self.testDir, fileName), mode)
def ReadTmpFile(self, fileName):
f = open(self.GetTmpFilePath(fileName), 'r')
data = f.read()
f.close()
return data
def WriteTmpFile(self, fileName, data):
f = open(self.GetTmpFilePath(fileName), 'w')
f.write(data)
f.close()
def GenRandomFileData(self, fileName, minlen = None, maxlen = None):
if maxlen is None: maxlen = minlen
f = self.OpenTmpFile(fileName, 'w')
f.write(self.GetRandomString(minlen, maxlen))
f.close()
def GetRandomString(self, minlen = None, maxlen = None):
if minlen is None: minlen = 1024
if maxlen is None: maxlen = minlen
return ''.join(
[chr(random.randint(0,255))
for x in xrange(random.randint(minlen, maxlen))
])
def setUp(self):
self.savedEnvPath = os.environ['PATH']
self.savedSysPath = sys.path[:]
self.baseToolsBins = BaseToolsBinPath
os.environ['PATH'] = \
os.path.pathsep.join((os.environ['PATH'], self.baseToolsBins))
self.testDir = TestTempDir
if not os.path.exists(self.testDir):
os.mkdir(self.testDir)
else:
self.cleanOutDir(self.testDir)
def tearDown(self):
self.RemoveFileOrDir(self.testDir)
os.environ['PATH'] = self.savedEnvPath
sys.path = self.savedSysPath

View File

@@ -0,0 +1,74 @@
## @file
# Unit tests for TianoCompress utility
#
# Copyright (c) 2008, Intel Corporation
#
# All rights reserved. This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##
# Import Modules
#
import os
import random
import sys
import unittest
import TestTools
class Tests(TestTools.BaseToolsTest):
def setUp(self):
TestTools.BaseToolsTest.setUp(self)
self.toolName = 'TianoCompress'
def testHelp(self):
result = self.RunTool('--help', logFile='help')
#self.DisplayFile('help')
self.assertTrue(result == 0)
def compressionTestCycle(self, data):
path = self.GetTmpFilePath('input')
self.WriteTmpFile('input', data)
result = self.RunTool(
'-e',
'-o', self.GetTmpFilePath('output1'),
self.GetTmpFilePath('input')
)
self.assertTrue(result == 0)
result = self.RunTool(
'-d',
'-o', self.GetTmpFilePath('output2'),
self.GetTmpFilePath('output1')
)
self.assertTrue(result == 0)
start = self.ReadTmpFile('input')
finish = self.ReadTmpFile('output2')
startEqualsFinish = start == finish
if not startEqualsFinish:
print
print 'Original data did not match decompress(compress(data))'
self.DisplayBinaryData('original data', start)
self.DisplayBinaryData('after compression', self.ReadTmpFile('output1'))
self.DisplayBinaryData('after decomression', finish)
self.assertTrue(startEqualsFinish)
def testRandomDataCycles(self):
for i in range(8):
data = self.GetRandomString(1024, 2048)
self.compressionTestCycle(data)
self.CleanUpTmpDir()
TheTestSuite = TestTools.MakeTheTestSuite(locals())
if __name__ == '__main__':
allTests = TheTestSuite()
unittest.TextTestRunner().run(allTests)