sbsv2/raptor/test/unit_suite/mmpparser_unit.py
changeset 13 c327db0664bb
child 28 b8fa7dfeeaa1
equal deleted inserted replaced
12:5e7562f67577 13:c327db0664bb
       
     1 #
       
     2 # Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 # All rights reserved.
       
     4 # This component and the accompanying materials are made available
       
     5 # under the terms of the License "Eclipse Public License v1.0"
       
     6 # which accompanies this distribution, and is available
       
     7 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 #
       
     9 # Initial Contributors:
       
    10 # Nokia Corporation - initial contribution.
       
    11 #
       
    12 # Contributors:
       
    13 #
       
    14 # Description: 
       
    15 # This module tests the MMPParser Class()
       
    16 # It runs on data from the standard input
       
    17 #
       
    18 
       
    19 
       
    20 from mmpparser import *
       
    21 import unittest
       
    22 import os
       
    23 import re
       
    24 
       
    25 class MMPTester(MMPBackend):
       
    26 	"""A parser testing "backend" for the MMP language
       
    27 	This is used to test MMP parsing independently of the build system. """
       
    28 	def __init__(self):
       
    29 		super(MMPTester,self).__init__()
       
    30 		self.sourcepath="."
       
    31 		self.platformblock = None
       
    32 		self.output=""
       
    33 
       
    34 	def log(self,text):
       
    35 		self.output += text + "\n"
       
    36 
       
    37 	def doStartResource(self,s,loc,toks):
       
    38 		self.log("Create resource "+toks[0]+" of " + str(toks))
       
    39 		return "OK"
       
    40 
       
    41 	def doResourceAssignment(self,s,loc,toks):
       
    42 		self.log("Set "+toks[0]+" to " + toks[1])
       
    43 		return "OK"
       
    44 
       
    45 	def doEndResource(self,s,loc,toks):
       
    46 		self.log("Finalise resource "+toks[0]+" of " + str(toks))
       
    47 		return "OK"
       
    48 
       
    49 	def doStartPlatform(self,s,loc,toks):
       
    50 		self.log("Start Platform block "+toks[0])
       
    51 		self.platformblock = toks[0]
       
    52 		return "OK"
       
    53 
       
    54 	def doEndPlatform(self,s,loc,toks):
       
    55 		self.log("Finalise platform " + self.platformblock)
       
    56 		return "OK"
       
    57 
       
    58 	def doSetSwitch(self,s,loc,toks):
       
    59 		self.log("Set switch "+toks[0]+" ON")
       
    60 		return "OK"
       
    61 
       
    62 	def doAssignment(self,s,loc,toks):
       
    63 		self.log("Set "+toks[0]+" to " + str(toks[1]))
       
    64 		return "OK"
       
    65 
       
    66 	def doAppend(self,s,loc,toks):
       
    67 		self.log("Append to "+toks[0]+" the values: " + str(toks[1]))
       
    68 		return "OK"
       
    69 
       
    70 	def doUIDAssignment(self,s,loc,toks):
       
    71 		self.log("Set UID2 to " + toks[1][0])
       
    72 		if len(toks[1]) > 1:
       
    73 			self.log("Set UID3 to " + toks[1][1])
       
    74 		return "OK"
       
    75 
       
    76 	def doSourcePathAssignment(self,s,loc,toks):
       
    77 		self.log("Remembering self.sourcepath state:  "+str(toks[0])+" is now " + str(toks[1]))
       
    78 		self.sourcepath=toks[1]
       
    79 		return "OK"
       
    80 
       
    81 	def doSourceAssignment(self,s,loc,toks):
       
    82 		self.log("Setting "+toks[0]+" to " + str(toks[1]))
       
    83 		for i in toks[1]:
       
    84 			self.log(self.sourcepath + "\\" + i)
       
    85 		return "OK"
       
    86 
       
    87 	def doStartBitmap(self,s,loc,toks):
       
    88 		self.log("BITMAP Create "+toks[0]+" to " + str(toks[1]))
       
    89 		return "OK" 
       
    90 		
       
    91 	def doBitmapAssignment(self,s,loc,toks):
       
    92 		self.log("BITMAP Setting "+toks[0]+" to " + str(toks[1]))
       
    93 		self.log("		must set a value within a bitmap FLM call")
       
    94 		return "OK"
       
    95 
       
    96 	def doEndBitmap(self,s,loc,toks):
       
    97 		self.log("Finish bitmap "+toks[0]+" to " + str(toks[1]))
       
    98 		return "OK" 
       
    99 
       
   100 	def doStartStringTable(self,s,loc,toks):
       
   101 		self.log("Start STRINGTABLE "+toks[1])
       
   102 		return "OK" 
       
   103 
       
   104 	def doStringTableAssignment(self,s,loc,toks):
       
   105 		self.log("Set"+toks[0]+" to " + toks[1])
       
   106 		return "OK"
       
   107 
       
   108 	def doEndStringTable(self,s,loc,toks):
       
   109 		self.log("End STRINGTABLE "+toks[1])
       
   110 		return "OK" 
       
   111 
       
   112 	def doUnknownStatement(self,s,loc,toks):
       
   113 		self.log("Ignoring unknown statement at " + str(loc))
       
   114 		return "OK"
       
   115 
       
   116 	def doUnknownBlock(self,s,loc,toks):
       
   117 		self.output += "Ignoring unknown block at " + str(loc)
       
   118 		return "OK"
       
   119 
       
   120 	def doMMP(self,s,loc,toks):
       
   121 		return "MMP"
       
   122 
       
   123 
       
   124 
       
   125 class TestMMPParser(unittest.TestCase):
       
   126 	def setUp(self):
       
   127 		pass
       
   128 
       
   129 	def testAll(self):
       
   130 		tests = [{'name' : "TestFeatures", 'text' :  
       
   131 """ASSPLIBRARY 123 456 789
       
   132 LIBRARY  eexe euser
       
   133 ALWAYS_BUILD_AS_ARM
       
   134 NOEXPORTLIBRARY
       
   135 TARGET FRED
       
   136 TARGETTYPE EXE
       
   137 SOURCEPATH \usr
       
   138 SOURCE alice.cia fred.cpp bob.cpp
       
   139 SOURCEPATH \someotherplace\ 
       
   140 SOURCE custard.cpp the.cpp dragon.cpp
       
   141 
       
   142 START ARMCC
       
   143 ARMLIBS somelib
       
   144 ARMRT
       
   145 END
       
   146 
       
   147 START WINC
       
   148 END
       
   149 
       
   150 START RESOURCE fred.rss
       
   151 TARGET fred
       
   152 TARGETPATH /usr/local
       
   153 END
       
   154 UID 0x12354 123455
       
   155 """, 'mustmatch': r"Set UID3 to 123455"}, \
       
   156 				{'name':"TestUnknownStatements", 'text': \
       
   157 """
       
   158 
       
   159 TARGET FRED12345
       
   160 SOURCEPATH \usr
       
   161 
       
   162 
       
   163 """, 'mustmatch': r"Remembering self.sourcepath state:"}, \
       
   164 				{'name':"PreceedingBlankLines", 'text': \
       
   165 """
       
   166 
       
   167 ASSPLIBRARY 123 456 789
       
   168 LIBRARY  eexe euser
       
   169 ALWAYS_BUILD_AS_ARM
       
   170 NOEXPORTLIBRARY
       
   171 TARGET FRED
       
   172 SOURCEPATH \usr
       
   173 START ARMCC
       
   174 ARMLIBS somepath
       
   175 ARMRT
       
   176 END
       
   177 START RESOURCE fred.rss
       
   178 TARGET fred
       
   179 TARGETPATH /usr/local
       
   180 END
       
   181 
       
   182 
       
   183 """, 'mustmatch': r"Set TARGETPATH to /usr/local"}, \
       
   184 				{ 'name': "Testvfprvct", 'text': \
       
   185 """
       
   186 targettype dll
       
   187 sourcepath .
       
   188 source dfprvct2_2.cpp
       
   189 library euser.lib
       
   190 library scppnwdl.lib drtrvct2_2.lib
       
   191 option armcc --no_exceptions --no_exceptions_unwind
       
   192 start armcc
       
   193 armrt
       
   194 armlibs c_t__un.l
       
   195 end
       
   196 capability all
       
   197 vendorid 0x70000001
       
   198 target dfprvct2_2.dll
       
   199 start armcc
       
   200 armlibs f_t_p.l g_t_p.l
       
   201 end
       
   202 unpaged
       
   203 
       
   204 """, 'mustmatch': r"Set switch UNPAGED ON"}, \
       
   205 				{ 'name': "TestUSRT", 'text': \
       
   206 """
       
   207 TARGET fred
       
   208 START ARMCC
       
   209 ARMINC 
       
   210 ARMRT
       
   211 END
       
   212 VENDORID 0x70000001
       
   213 """, 'mustmatch': r"Set VENDORID to 0x70000001"}, \
       
   214 				{ 'name': "TestRESOURCE", 'text': \
       
   215 """
       
   216 TARGET reccaf.dll
       
   217 CAPABILITY TrustedUI ProtServ DRM
       
   218 TARGETTYPE PLUGIN
       
   219 UID 0x10009D8D 0x101ff761
       
   220 VENDORID 0x70000001
       
   221 SOURCEPATH ../source/reccaf
       
   222 SOURCE CafApaRecognizer.cpp mimetypemapping.cpp
       
   223 START RESOURCE 101ff761.rss
       
   224 TARGET reccaf.rsc
       
   225 END
       
   226 USERINCLUDE ../source/caf
       
   227 USERINCLUDE ../source/reccaf
       
   228 SYSTEMINCLUDE /epoc32/include
       
   229 SYSTEMINCLUDE /epoc32/include/caf
       
   230 SYSTEMINCLUDE /epoc32/include/ecom
       
   231 LIBRARY euser.lib apmime.lib estor.lib
       
   232 LIBRARY caf.lib efsrv.lib
       
   233 """, 'mustmatch': r"Create resource .* of"}, \
       
   234 				{ 'name': "TestRESOURCE", 'text': \
       
   235 """
       
   236 TARGET cafutils.dll
       
   237 CAPABILITY All -Tcb
       
   238 TARGETTYPE DLL
       
   239 UID 0x101FD9B8
       
   240 VENDORID 0x70000001
       
   241 UNPAGED
       
   242 SOURCEPATH ../source/cafutils
       
   243 SOURCE Cafutils.cpp
       
   244 SOURCE attributeset.cpp
       
   245 SOURCE stringattribute.cpp
       
   246 SOURCE stringattributeset.cpp
       
   247 SOURCE virtualpath.cpp
       
   248 SOURCE Metadata.cpp
       
   249 SOURCE Metadataarray.cpp
       
   250 SOURCE embeddedobject.cpp
       
   251 SOURCE rightsinfo.cpp
       
   252 SOURCE Virtualpathptr.cpp
       
   253 SOURCE dirstreamable.cpp
       
   254 SOURCE bitset.cpp
       
   255 SOURCE cafmimeheader.cpp
       
   256 SOURCE mimefieldanddata.cpp
       
   257 USERINCLUDE ../inc
       
   258 USERINCLUDE ../source/cafutils
       
   259 SYSTEMINCLUDE /epoc32/include
       
   260 SYSTEMINCLUDE /epoc32/include/caf
       
   261 SYSTEMINCLUDE /epoc32/include/libc
       
   262 LIBRARY euser.lib
       
   263 LIBRARY estor.lib
       
   264 LIBRARY charconv.lib
       
   265 LIBRARY efsrv.lib
       
   266 LIBRARY apgrfx.lib
       
   267 LIBRARY ecom.lib
       
   268 LIBRARY apmime.lib
       
   269 """, 'mustmatch': r"LIBRARY"},
       
   270 				{ 'name': "TestEmptyStringTable", 'text': \
       
   271 """
       
   272 OPTION CW   -w off
       
   273 TARGET          testwebbrowser.exe
       
   274 TARGETTYPE      EXE
       
   275 CAPABILITY ALL -TCB
       
   276 
       
   277 SYSTEMINCLUDE   /epoc32/include /epoc32/include/ecom
       
   278 USERINCLUDE     ../inc
       
   279 USERINCLUDE     ../../httpexampleclient
       
   280 
       
   281 START STRINGTABLE ../data/htmltagstable.st
       
   282 
       
   283 END
       
   284 
       
   285 SOURCEPATH      ../../httpexampleclient
       
   286 SOURCE httpexampleutils.cpp
       
   287 """, 'mustmatch': r"End STRINGTABLE OK"},
       
   288 				{ 'name': "TestARMINC", 'text': \
       
   289 """
       
   290 # 1 "<built-in>"
       
   291 # 1 "<command line>"
       
   292 # 10 "<command line>"
       
   293 # 1 "/var/local/net/smb/tmurphy/cluster_epocroot_1/epoc32/include/variant/Symbian_OS_vFuture.hrh" 1
       
   294 # 11 "<command line>" 2
       
   295 # 1 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_vfpv2.mmp"
       
   296 # 1 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_common.mmh" 1
       
   297 TARGETTYPE dll
       
   298 OPTION ARMCC--no_exceptions --no_exceptions_unwind
       
   299 SOURCEPATH .
       
   300 SOURCE rtabort.cpp
       
   301 SOURCE rtdiv0.cpp
       
   302 SOURCE rtexit.cpp
       
   303 SOURCE rtlib.cpp
       
   304 SOURCE rtraise.cpp
       
   305 SOURCE drtrvct2_2.cpp
       
   306 SOURCE rtopnew.cpp rtopdel.cpp
       
   307 SOURCE sftfpini.cpp
       
   308 LIBRARY scppnwdl.lib euser.lib
       
   309 SYSTEMINCLUDE ../../include
       
   310 START ARMCC
       
   311 ARMRT
       
   312 ARMINC
       
   313 ARMLIBS c_t__un.l
       
   314 ARMLIBS h_t__un.l
       
   315 # 46 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_common.mmh"
       
   316 END
       
   317 capability all
       
   318 VENDORID 0x70000001
       
   319 # 7 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_vfpv2.mmp" 2
       
   320 TARGET drtrvct2_2_vfpv2.dll
       
   321 LINKAS drtrvct2_2.dll
       
   322 NOEXPORTLIBRARY
       
   323 START ARMCC
       
   324 ARMLIBS f_tvp.l
       
   325 END
       
   326 unpaged
       
   327 """, 'mustmatch': r"Set.*ARMINC"}]
       
   328 		for i in tests:
       
   329 			tester = MMPTester()
       
   330 			mp = MMPParser(tester)
       
   331 			try:
       
   332 				result = mp.mmp.parseString(i['text'])
       
   333 			except ParseException,e:
       
   334 				pass
       
   335 			self.assertEquals(result[0],'MMP')
       
   336 			self.assertNotEquals(re.search(i['mustmatch'],tester.output,re.M),None)
       
   337 
       
   338 # run all the tests
       
   339 
       
   340 from raptor_tests import SmokeTest
       
   341 
       
   342 def run():
       
   343 	t = SmokeTest()
       
   344 	t.id = "999"
       
   345 	t.name = "mmpparser_unit"
       
   346 
       
   347 	tests = unittest.makeSuite(TestMMPParser)
       
   348 	result = unittest.TextTestRunner(verbosity=2).run(tests)
       
   349 
       
   350 	if result.wasSuccessful():
       
   351 		t.result = SmokeTest.PASS
       
   352 	else:
       
   353 		t.result = SmokeTest.FAIL
       
   354 
       
   355 	return t