This verifies that a .uni file should contain UTF-16 data (with BOM) or an error should be generated by AutoGen.UniClassObject when the string file in processed.
Cc: Yingke D Liu <yingke.d....@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> --- BaseTools/Tests/CheckUnicodeSourceFiles.py | 96 ++++++++++++++++++++++++++++++ BaseTools/Tests/PythonToolsTests.py | 4 +- 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 BaseTools/Tests/CheckUnicodeSourceFiles.py diff --git a/BaseTools/Tests/CheckUnicodeSourceFiles.py b/BaseTools/Tests/CheckUnicodeSourceFiles.py new file mode 100644 index 0000000..9646b46 --- /dev/null +++ b/BaseTools/Tests/CheckUnicodeSourceFiles.py @@ -0,0 +1,96 @@ +## @file +# Unit tests for AutoGen.UniClassObject +# +# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> +# +# 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, extension, encoding, string=None): + if string is None: + string = self.SampleData + data = codecs.encode(string, encoding) + path = 'input' + extension + self.WriteTmpFile(path, data) + return PathClass(self.GetTmpFilePath(path)) + + def UnicodeErrorFailure(self, extension, encoding, shouldFail): + msg = 'UnicodeError should ' + if not shouldFail: + msg += 'not ' + msg += 'be generated for ' + msg += '%s data in a %s file' % (encoding, extension) + self.fail(msg) + + def CheckFile(self, extension, encoding, shouldFail, string=None): + path = self.EncodeToFile(extension, encoding, string) + try: + BtUni.UniFileClassObject([path]) + if not shouldFail: + return + except UnicodeError: + if shouldFail: + return + else: + self.UnicodeErrorFailure(extension, encoding, shouldFail) + except Exception: + pass + + self.UnicodeErrorFailure(extension, encoding, shouldFail) + + def CheckUniBadEnc(self, encoding): + self.CheckFile('.uni', encoding, shouldFail=True) + + def testAsciiInUniFile(self): + self.CheckUniBadEnc('ascii') + + def testUtf8InUniFile(self): + self.CheckUniBadEnc('utf_8') + + def testUtf16beInUniFile(self): + self.CheckUniBadEnc('utf_16_be') + + def testUtf16leInUniFile(self): + # + # utf_16_le does not include the BOM (Byte Order Mark). Therefore, + # this should be considered invalid. + # + self.CheckUniBadEnc('utf_16_le') + + def testUtf16InUniFile(self): + self.CheckFile('.uni', 'utf_16', shouldFail=False) + +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 6096e21..c953daf 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.<BR> +# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR> # # 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__': -- 2.1.4 ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel