From df91e0f90a7130a3cfd5203ec21d318c63362ecb Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Tue, 23 Jun 2015 23:34:14 +0000 Subject: BaseTools/Tests: Add unit test for AutoGen.UniClassObject This verifies that a UTF-16 data (with BOM) .uni file is successfully read. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen Reviewed-by: Michael D Kinney Reviewed-by: Yingke Liu git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17693 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Tests/CheckUnicodeSourceFiles.py | 88 ++++++++++++++++++++++++++++++ BaseTools/Tests/PythonToolsTests.py | 4 +- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 BaseTools/Tests/CheckUnicodeSourceFiles.py (limited to 'BaseTools') diff --git a/BaseTools/Tests/CheckUnicodeSourceFiles.py b/BaseTools/Tests/CheckUnicodeSourceFiles.py new file mode 100644 index 0000000000..0083ad8589 --- /dev/null +++ b/BaseTools/Tests/CheckUnicodeSourceFiles.py @@ -0,0 +1,88 @@ +## @file +# Unit tests for AutoGen.UniClassObject +# +# Copyright (c) 2015, 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 codecs + +import TestTools + +from Common.Misc import PathClass +import AutoGen.UniClassObject as BtUni + +from Common import EdkLogger +EdkLogger.InitializeForUnitTest() + +class Tests(TestTools.BaseToolsTest): + + SampleData = u''' + #langdef en-US "English" + #string STR_A #language en-US "STR_A for en-US" + ''' + + def EncodeToFile(self, encoding, string=None): + if string is None: + string = self.SampleData + data = codecs.encode(string, encoding) + path = 'input.uni' + self.WriteTmpFile(path, data) + return PathClass(self.GetTmpFilePath(path)) + + def ErrorFailure(self, error, encoding, shouldPass): + msg = error + ' should ' + if shouldPass: + msg += 'not ' + msg += 'be generated for ' + msg += '%s data in a .uni file' % encoding + self.fail(msg) + + def UnicodeErrorFailure(self, encoding, shouldPass): + self.ErrorFailure('UnicodeError', encoding, shouldPass) + + def EdkErrorFailure(self, encoding, shouldPass): + self.ErrorFailure('EdkLogger.FatalError', encoding, shouldPass) + + def CheckFile(self, encoding, shouldPass, string=None): + path = self.EncodeToFile(encoding, string) + try: + BtUni.UniFileClassObject([path]) + if shouldPass: + return + except UnicodeError: + if not shouldPass: + return + else: + self.UnicodeErrorFailure(encoding, shouldPass) + except EdkLogger.FatalError: + if not shouldPass: + return + else: + self.EdkErrorFailure(encoding, shouldPass) + except Exception: + pass + + self.EdkErrorFailure(encoding, shouldPass) + + def testUtf16InUniFile(self): + self.CheckFile('utf_16', shouldPass=True) + +TheTestSuite = TestTools.MakeTheTestSuite(locals()) + +if __name__ == '__main__': + allTests = TheTestSuite() + unittest.TextTestRunner().run(allTests) diff --git a/BaseTools/Tests/PythonToolsTests.py b/BaseTools/Tests/PythonToolsTests.py index 6096e212a9..c953dafcbd 100644 --- a/BaseTools/Tests/PythonToolsTests.py +++ b/BaseTools/Tests/PythonToolsTests.py @@ -1,7 +1,7 @@ ## @file # Unit tests for Python based BaseTools # -# Copyright (c) 2008, Intel Corporation. All rights reserved.
+# Copyright (c) 2008 - 2015, 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 @@ -24,6 +24,8 @@ def TheTestSuite(): suites = [] import CheckPythonSyntax suites.append(CheckPythonSyntax.TheTestSuite()) + import CheckUnicodeSourceFiles + suites.append(CheckUnicodeSourceFiles.TheTestSuite()) return unittest.TestSuite(suites) if __name__ == '__main__': -- cgit v1.2.3