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

Reply via email to