## @file\r
# This file contain unit test for DecParser\r
#\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>\r
#\r
-# This program and the accompanying materials are licensed and made available \r
-# under the terms and conditions of the BSD License which accompanies this \r
-# distribution. The full text of the license may be found at \r
+# This program and the accompanying materials are licensed and made available\r
+# under the terms and conditions of the BSD License which accompanies this\r
+# distribution. The full text of the license may be found at\r
# http://opensource.org/licenses/bsd-license.php\r
#\r
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
FileContent, \\r
_DecBase, \\r
CleanString\r
- \r
+\r
from Object.Parser.DecObject import _DecComments\r
\r
#\r
Line, Comment = CleanString('')\r
self.assertEqual(Line, '')\r
self.assertEqual(Comment, '')\r
- \r
+\r
Line, Comment = CleanString('line without comment')\r
self.assertEqual(Line, 'line without comment')\r
self.assertEqual(Comment, '')\r
- \r
+\r
Line, Comment = CleanString('# pure comment')\r
self.assertEqual(Line, '')\r
self.assertEqual(Comment, '# pure comment')\r
- \r
+\r
Line, Comment = CleanString('line # and comment')\r
self.assertEqual(Line, 'line')\r
self.assertEqual(Comment, '# and comment')\r
- \r
+\r
def testCleanStringCpp(self):\r
Line, Comment = CleanString('line // and comment', AllowCppStyleComment = True)\r
self.assertEqual(Line, 'line')\r
class MacroParserTestCase(unittest.TestCase):\r
def setUp(self):\r
self.dec = _DecBase(FileContent('dummy', []))\r
- \r
+\r
def testCorrectMacro(self):\r
self.dec._MacroParser('DEFINE MARCRO1 = test1')\r
self.failIf('MARCRO1' not in self.dec._LocalMacro)\r
self.assertEqual(self.dec._LocalMacro['MARCRO1'], 'test1')\r
- \r
+\r
def testErrorMacro1(self):\r
# Raise fatal error, macro name must be upper case letter\r
self.assertRaises(FatalError, self.dec._MacroParser, 'DEFINE not_upper_case = test2')\r
- \r
+\r
def testErrorMacro2(self):\r
# No macro name given\r
self.assertRaises(FatalError, self.dec._MacroParser, 'DEFINE ')\r
Content = [\r
# Right case\r
'test no backslash',\r
- \r
+\r
'test with backslash \\',\r
'continue second line',\r
- \r
+\r
# Do not precede with whitespace\r
'\\',\r
- \r
+\r
# Empty line after backlash is not allowed\r
'line with backslash \\',\r
''\r
]\r
self.dec = _DecBase(FileContent('dummy', Content))\r
- \r
+\r
def testBackSlash(self):\r
#\r
# Right case, assert return values\r
ConcatLine, CommentList = self.dec._TryBackSlash(self.dec._RawData.GetNextLine(), [])\r
self.assertEqual(ConcatLine, 'test no backslash')\r
self.assertEqual(CommentList, [])\r
- \r
+\r
ConcatLine, CommentList = self.dec._TryBackSlash(self.dec._RawData.GetNextLine(), [])\r
self.assertEqual(CommentList, [])\r
self.assertEqual(ConcatLine, 'test with backslash continue second line')\r
- \r
+\r
#\r
# Error cases, assert raise exception\r
#\r
def __init__(self, RawData):\r
_DecBase.__init__(self, RawData)\r
self.ItemObject = Data()\r
- \r
+\r
def _StopCurrentParsing(self, Line):\r
return Line == '[TOP]'\r
- \r
+\r
def _ParseItem(self):\r
Item = DataItem()\r
Item.String = self._RawData.CurrentLine\r
self.ItemObject.ItemList.append(Item)\r
return Item\r
- \r
+\r
def _TailCommentStrategy(self, Comment):\r
return Comment.find('@comment') != -1\r
\r
_DecBase.__init__(self, RawData)\r
# List of Data\r
self.ItemObject = []\r
- \r
+\r
# Top parser\r
def _StopCurrentParsing(self, Line):\r
return False\r
self.ItemObject.append(TestParser.ItemObject)\r
return TestParser.ItemObject\r
\r
-class ParseTestCase(unittest.TestCase): \r
+class ParseTestCase(unittest.TestCase):\r
def setUp(self):\r
pass\r
- \r
+\r
def testParse(self):\r
Content = \\r
'''# Top comment\r
# sub2 head comment\r
(test item has head and special tail comment)\r
# @comment test TailCommentStrategy branch\r
- \r
+\r
(test item has no comment)\r
- \r
+\r
# test NextLine branch\r
[TOP]\r
sub-item\r
'''\r
dec = TestTop(FileContent('dummy', Content.splitlines()))\r
dec.Parse()\r
- \r
+\r
# Two sections\r
self.assertEqual(len(dec.ItemObject), 2)\r
- \r
+\r
data = dec.ItemObject[0]\r
self.assertEqual(data._HeadComment[0][0], '# Top comment')\r
self.assertEqual(data._HeadComment[0][1], 1)\r
- \r
+\r
# 3 subitems\r
self.assertEqual(len(data.ItemList), 3)\r
- \r
+\r
dataitem = data.ItemList[0]\r
self.assertEqual(dataitem.String, '(test item has both head and tail comment)')\r
# Comment content\r
# Comment line number\r
self.assertEqual(dataitem._HeadComment[0][1], 3)\r
self.assertEqual(dataitem._TailComment[0][1], 4)\r
- \r
+\r
dataitem = data.ItemList[1]\r
self.assertEqual(dataitem.String, '(test item has head and special tail comment)')\r
# Comment content\r
# Comment line number\r
self.assertEqual(dataitem._HeadComment[0][1], 5)\r
self.assertEqual(dataitem._TailComment[0][1], 7)\r
- \r
+\r
dataitem = data.ItemList[2]\r
self.assertEqual(dataitem.String, '(test item has no comment)')\r
# Comment content\r
self.assertEqual(dataitem._HeadComment, [])\r
self.assertEqual(dataitem._TailComment, [])\r
- \r
+\r
data = dec.ItemObject[1]\r
self.assertEqual(data._HeadComment[0][0], '# test NextLine branch')\r
self.assertEqual(data._HeadComment[0][1], 11)\r
- \r
+\r
# 1 subitems\r
self.assertEqual(len(data.ItemList), 1)\r
- \r
+\r
dataitem = data.ItemList[0]\r
self.assertEqual(dataitem.String, 'sub-item')\r
self.assertEqual(dataitem._HeadComment, [])\r
item = self.GetObj('PACKAGE_NAME = MdePkg')._ParseItem()\r
self.assertEqual(item.Key, 'PACKAGE_NAME')\r
self.assertEqual(item.Value, 'MdePkg')\r
- \r
+\r
def testDecDefine1(self):\r
obj = self.GetObj('PACKAGE_NAME')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testDecDefine2(self):\r
obj = self.GetObj('unknown_key = ')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testDecDefine3(self):\r
obj = self.GetObj('PACKAGE_NAME = ')\r
self.assertRaises(FatalError, obj._ParseItem)\r
Obj = _DecLibraryclass(FileContent('dummy', Content.splitlines()))\r
Obj._RawData.CurrentLine = Obj._RawData.GetNextLine()\r
return Obj\r
- \r
+\r
def testNoInc(self):\r
obj = self.GetObj('UefiRuntimeLib')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testEmpty(self):\r
obj = self.GetObj(' | ')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testLibclassNaming(self):\r
obj = self.GetObj('lowercase_efiRuntimeLib|Include/Library/UefiRuntimeLib.h')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testLibclassExt(self):\r
obj = self.GetObj('RuntimeLib|Include/Library/UefiRuntimeLib.no_h')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testLibclassRelative(self):\r
obj = self.GetObj('RuntimeLib|Include/../UefiRuntimeLib.h')\r
self.assertRaises(FatalError, obj._ParseItem)\r
Obj._RawData.CurrentLine = Obj._RawData.GetNextLine()\r
Obj._RawData.CurrentScope = [('PcdsFeatureFlag'.upper(), 'COMMON')]\r
return Obj\r
- \r
+\r
def testOK(self):\r
item = self.GetObj('gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|FALSE|BOOLEAN|0x0000000d')._ParseItem()\r
self.assertEqual(item.TokenSpaceGuidCName, 'gEfiMdePkgTokenSpaceGuid')\r
self.assertEqual(item.DefaultValue, 'FALSE')\r
self.assertEqual(item.DatumType, 'BOOLEAN')\r
self.assertEqual(item.TokenValue, '0x0000000d')\r
- \r
+\r
def testNoCvar(self):\r
obj = self.GetObj('123ai.PcdComponentNameDisable|FALSE|BOOLEAN|0x0000000d')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testSplit(self):\r
obj = self.GetObj('gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable FALSE|BOOLEAN|0x0000000d')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
obj = self.GetObj('gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|FALSE|BOOLEAN|0x0000000d | abc')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testUnknownType(self):\r
obj = self.GetObj('gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|FALSE|unknown|0x0000000d')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testVoid(self):\r
obj = self.GetObj('gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|abc|VOID*|0x0000000d')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testUINT(self):\r
obj = self.GetObj('gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|0xabc|UINT8|0x0000000d')\r
self.assertRaises(FatalError, obj._ParseItem)\r
Obj._RawData.CurrentLine = Obj._RawData.GetNextLine()\r
Obj._RawData.CurrentScope = [('guids'.upper(), 'COMMON')]\r
return Obj\r
- \r
+\r
def testCValue(self):\r
item = self.GetObj('gEfiIpSecProtocolGuid={ 0xdfb386f7, 0xe100, 0x43ad,'\r
' {0x9c, 0x9a, 0xed, 0x90, 0xd0, 0x8a, 0x5e, 0x12 }}')._ParseItem()\r
self.assertEqual(item.GuidCName, 'gEfiIpSecProtocolGuid')\r
self.assertEqual(item.GuidCValue, '{ 0xdfb386f7, 0xe100, 0x43ad, {0x9c, 0x9a, 0xed, 0x90, 0xd0, 0x8a, 0x5e, 0x12 }}')\r
- \r
+\r
def testGuidString(self):\r
item = self.GetObj('gEfiIpSecProtocolGuid=1E73767F-8F52-4603-AEB4-F29B510B6766')._ParseItem()\r
self.assertEqual(item.GuidCName, 'gEfiIpSecProtocolGuid')\r
self.assertEqual(item.GuidCValue, '1E73767F-8F52-4603-AEB4-F29B510B6766')\r
- \r
+\r
def testNoValue1(self):\r
obj = self.GetObj('gEfiIpSecProtocolGuid')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testNoValue2(self):\r
obj = self.GetObj('gEfiIpSecProtocolGuid=')\r
self.assertRaises(FatalError, obj._ParseItem)\r
- \r
+\r
def testNoName(self):\r
obj = self.GetObj('=')\r
self.assertRaises(FatalError, obj._ParseItem)\r
class TmpFile:\r
def __init__(self, File):\r
self.File = File\r
- \r
+\r
def Write(self, Content):\r
try:\r
FileObj = open(self.File, 'w')\r
FileObj.close()\r
except:\r
pass\r
- \r
+\r
def Remove(self):\r
try:\r
os.remove(self.File)\r
[userextensions.intel."myid]\r
'''\r
)\r
- \r
+\r
def tearDown(self):\r
self.File.Remove()\r
- \r
+\r
def testUserExtentionHeader(self):\r
dec = Dec('test.dec', False)\r
- \r
+\r
# OK: [userextensions.intel."myid"]\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
dec._UserExtentionSectionParser()\r
self.assertEqual(dec._RawData.CurrentScope[0][1], 'intel')\r
self.assertEqual(dec._RawData.CurrentScope[0][2], '"myid"')\r
self.assertEqual(dec._RawData.CurrentScope[0][3], 'COMMON')\r
- \r
+\r
# OK: [userextensions.intel."myid".IA32]\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
dec._UserExtentionSectionParser()\r
self.assertEqual(dec._RawData.CurrentScope[0][1], 'intel')\r
self.assertEqual(dec._RawData.CurrentScope[0][2], '"myid"')\r
self.assertEqual(dec._RawData.CurrentScope[0][3], 'IA32')\r
- \r
+\r
# Fail: [userextensions.intel."myid".IA32,]\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._UserExtentionSectionParser)\r
- \r
+\r
# Fail: [userextensions.intel."myid]\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._UserExtentionSectionParser)\r
[Includes, Includes.IA32] # common cannot be with other arch\r
[Includes.IA32, PcdsFeatureFlag] # different section name\r
''' )\r
- \r
+\r
def tearDown(self):\r
self.File.Remove()\r
- \r
+\r
def testSectionHeader(self):\r
dec = Dec('test.dec', False)\r
# [no section start or end\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._SectionHeaderParser)\r
- \r
+\r
#[,] # empty sub-section\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._SectionHeaderParser)\r
- \r
+\r
# [unknow_section_name]\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._SectionHeaderParser)\r
- \r
+\r
# [Includes.IA32.other] # no third one\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._SectionHeaderParser)\r
- \r
+\r
# [PcdsFeatureFlag, PcdsFixedAtBuild]\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._SectionHeaderParser)\r
- \r
+\r
# [Includes.IA32, Includes.IA32]\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
dec._SectionHeaderParser()\r
self.assertEqual(len(dec._RawData.CurrentScope), 1)\r
self.assertEqual(dec._RawData.CurrentScope[0][0], 'Includes'.upper())\r
self.assertEqual(dec._RawData.CurrentScope[0][1], 'IA32')\r
- \r
+\r
# [Includes, Includes.IA32] # common cannot be with other arch\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._SectionHeaderParser)\r
- \r
+\r
# [Includes.IA32, PcdsFeatureFlag] # different section name not allowed\r
dec._RawData.CurrentLine = CleanString(dec._RawData.GetNextLine())[0]\r
self.assertRaises(FatalError, dec._SectionHeaderParser)\r
self.assertEqual(dec._HeadComment[1][0], '##')\r
self.assertEqual(dec._HeadComment[1][1], 2)\r
File.Remove()\r
- \r
+\r
def testNoDoubleComment(self):\r
File = TmpFile('test.dec')\r
File.Write(\r