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 <jordan.l.jus...@intel.com>
Cc: Yingke D Liu <yingke.d....@intel.com>
---
 BaseTools/Tests/CheckUnicodeSourceFiles.py | 88 ++++++++++++++++++++++++++++++
 BaseTools/Tests/PythonToolsTests.py        |  4 +-
 2 files changed, 91 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..0083ad8
--- /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.<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, 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 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


------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to