|
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 |