author | Richard Taylor <richard.i.taylor@nokia.com> |
Thu, 12 Aug 2010 09:00:16 +0100 | |
changeset 625 | a1925fb7753a |
parent 591 | 22486c9c7b15 |
permissions | -rw-r--r-- |
591 | 1 |
# |
625
a1925fb7753a
sbs version 2.15.0
Richard Taylor <richard.i.taylor@nokia.com>
parents:
591
diff
changeset
|
2 |
# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). |
591 | 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" |
|
625
a1925fb7753a
sbs version 2.15.0
Richard Taylor <richard.i.taylor@nokia.com>
parents:
591
diff
changeset
|
86 |
|
a1925fb7753a
sbs version 2.15.0
Richard Taylor <richard.i.taylor@nokia.com>
parents:
591
diff
changeset
|
87 |
def doDocumentAssignment(self,s,loc,toks): |
a1925fb7753a
sbs version 2.15.0
Richard Taylor <richard.i.taylor@nokia.com>
parents:
591
diff
changeset
|
88 |
self.log("Setting "+toks[0]+" to " + str(toks[1])) |
a1925fb7753a
sbs version 2.15.0
Richard Taylor <richard.i.taylor@nokia.com>
parents:
591
diff
changeset
|
89 |
for i in toks[1]: |
a1925fb7753a
sbs version 2.15.0
Richard Taylor <richard.i.taylor@nokia.com>
parents:
591
diff
changeset
|
90 |
self.log(self.sourcepath + "\\" + i) |
a1925fb7753a
sbs version 2.15.0
Richard Taylor <richard.i.taylor@nokia.com>
parents:
591
diff
changeset
|
91 |
return "OK" |
a1925fb7753a
sbs version 2.15.0
Richard Taylor <richard.i.taylor@nokia.com>
parents:
591
diff
changeset
|
92 |
|
591 | 93 |
def doStartBitmap(self,s,loc,toks): |
94 |
self.log("BITMAP Create "+toks[0]+" to " + str(toks[1])) |
|
95 |
return "OK" |
|
96 |
||
97 |
def doBitmapAssignment(self,s,loc,toks): |
|
98 |
self.log("BITMAP Setting "+toks[0]+" to " + str(toks[1])) |
|
99 |
self.log(" must set a value within a bitmap FLM call") |
|
100 |
return "OK" |
|
101 |
||
102 |
def doEndBitmap(self,s,loc,toks): |
|
103 |
self.log("Finish bitmap "+toks[0]+" to " + str(toks[1])) |
|
104 |
return "OK" |
|
105 |
||
106 |
def doStartStringTable(self,s,loc,toks): |
|
107 |
self.log("Start STRINGTABLE "+toks[1]) |
|
108 |
return "OK" |
|
109 |
||
110 |
def doStringTableAssignment(self,s,loc,toks): |
|
111 |
self.log("Set"+toks[0]+" to " + toks[1]) |
|
112 |
return "OK" |
|
113 |
||
114 |
def doEndStringTable(self,s,loc,toks): |
|
115 |
self.log("End STRINGTABLE "+toks[1]) |
|
116 |
return "OK" |
|
117 |
||
118 |
def doUnknownStatement(self,s,loc,toks): |
|
119 |
self.log("Ignoring unknown statement at " + str(loc)) |
|
120 |
return "OK" |
|
121 |
||
122 |
def doUnknownBlock(self,s,loc,toks): |
|
123 |
self.output += "Ignoring unknown block at " + str(loc) |
|
124 |
return "OK" |
|
125 |
||
126 |
def doMMP(self,s,loc,toks): |
|
127 |
return "MMP" |
|
128 |
||
129 |
||
130 |
||
131 |
class TestMMPParser(unittest.TestCase): |
|
132 |
def setUp(self): |
|
133 |
pass |
|
134 |
||
135 |
def testAll(self): |
|
136 |
tests = [{'name' : "TestFeatures", 'text' : |
|
137 |
"""ASSPLIBRARY 123 456 789 |
|
138 |
LIBRARY eexe euser |
|
139 |
ALWAYS_BUILD_AS_ARM |
|
140 |
NOEXPORTLIBRARY |
|
141 |
TARGET FRED |
|
142 |
TARGETTYPE EXE |
|
143 |
SOURCEPATH \usr |
|
144 |
SOURCE alice.cia fred.cpp bob.cpp |
|
145 |
SOURCEPATH \someotherplace\ |
|
146 |
SOURCE custard.cpp the.cpp dragon.cpp |
|
147 |
||
148 |
START ARMCC |
|
149 |
ARMLIBS somelib |
|
150 |
ARMRT |
|
151 |
END |
|
152 |
||
153 |
START WINC |
|
154 |
END |
|
155 |
||
156 |
START RESOURCE fred.rss |
|
157 |
TARGET fred |
|
158 |
TARGETPATH /usr/local |
|
159 |
END |
|
160 |
UID 0x12354 123455 |
|
161 |
""", 'mustmatch': r"Set UID3 to 123455"}, \ |
|
162 |
{'name':"TestUnknownStatements", 'text': \ |
|
163 |
""" |
|
164 |
||
165 |
TARGET FRED12345 |
|
166 |
SOURCEPATH \usr |
|
167 |
||
168 |
||
169 |
""", 'mustmatch': r"Remembering self.sourcepath state:"}, \ |
|
170 |
{'name':"PreceedingBlankLines", 'text': \ |
|
171 |
""" |
|
172 |
||
173 |
ASSPLIBRARY 123 456 789 |
|
174 |
LIBRARY eexe euser |
|
175 |
ALWAYS_BUILD_AS_ARM |
|
176 |
NOEXPORTLIBRARY |
|
177 |
TARGET FRED |
|
178 |
SOURCEPATH \usr |
|
179 |
START ARMCC |
|
180 |
ARMLIBS somepath |
|
181 |
ARMRT |
|
182 |
END |
|
183 |
START RESOURCE fred.rss |
|
184 |
TARGET fred |
|
185 |
TARGETPATH /usr/local |
|
186 |
END |
|
187 |
||
188 |
||
189 |
""", 'mustmatch': r"Set TARGETPATH to /usr/local"}, \ |
|
190 |
{ 'name': "Testvfprvct", 'text': \ |
|
191 |
""" |
|
192 |
targettype dll |
|
193 |
sourcepath . |
|
194 |
source dfprvct2_2.cpp |
|
195 |
library euser.lib |
|
196 |
library scppnwdl.lib drtrvct2_2.lib |
|
197 |
option armcc --no_exceptions --no_exceptions_unwind |
|
198 |
start armcc |
|
199 |
armrt |
|
200 |
armlibs c_t__un.l |
|
201 |
end |
|
202 |
capability all |
|
203 |
vendorid 0x70000001 |
|
204 |
target dfprvct2_2.dll |
|
205 |
start armcc |
|
206 |
armlibs f_t_p.l g_t_p.l |
|
207 |
end |
|
208 |
unpaged |
|
209 |
||
210 |
""", 'mustmatch': r"Set switch UNPAGED ON"}, \ |
|
211 |
{ 'name': "TestUSRT", 'text': \ |
|
212 |
""" |
|
213 |
TARGET fred |
|
214 |
START ARMCC |
|
215 |
ARMINC |
|
216 |
ARMRT |
|
217 |
END |
|
218 |
VENDORID 0x70000001 |
|
219 |
""", 'mustmatch': r"Set VENDORID to 0x70000001"}, \ |
|
220 |
{ 'name': "TestRESOURCE", 'text': \ |
|
221 |
""" |
|
222 |
TARGET reccaf.dll |
|
223 |
CAPABILITY TrustedUI ProtServ DRM |
|
224 |
TARGETTYPE PLUGIN |
|
225 |
UID 0x10009D8D 0x101ff761 |
|
226 |
VENDORID 0x70000001 |
|
227 |
SOURCEPATH ../source/reccaf |
|
228 |
SOURCE CafApaRecognizer.cpp mimetypemapping.cpp |
|
229 |
START RESOURCE 101ff761.rss |
|
230 |
TARGET reccaf.rsc |
|
231 |
END |
|
232 |
USERINCLUDE ../source/caf |
|
233 |
USERINCLUDE ../source/reccaf |
|
234 |
SYSTEMINCLUDE /epoc32/include |
|
235 |
SYSTEMINCLUDE /epoc32/include/caf |
|
236 |
SYSTEMINCLUDE /epoc32/include/ecom |
|
237 |
LIBRARY euser.lib apmime.lib estor.lib |
|
238 |
LIBRARY caf.lib efsrv.lib |
|
239 |
""", 'mustmatch': r"Create resource .* of"}, \ |
|
240 |
{ 'name': "TestRESOURCE", 'text': \ |
|
241 |
""" |
|
242 |
TARGET cafutils.dll |
|
243 |
CAPABILITY All -Tcb |
|
244 |
TARGETTYPE DLL |
|
245 |
UID 0x101FD9B8 |
|
246 |
VENDORID 0x70000001 |
|
247 |
UNPAGED |
|
248 |
SOURCEPATH ../source/cafutils |
|
249 |
SOURCE Cafutils.cpp |
|
250 |
SOURCE attributeset.cpp |
|
251 |
SOURCE stringattribute.cpp |
|
252 |
SOURCE stringattributeset.cpp |
|
253 |
SOURCE virtualpath.cpp |
|
254 |
SOURCE Metadata.cpp |
|
255 |
SOURCE Metadataarray.cpp |
|
256 |
SOURCE embeddedobject.cpp |
|
257 |
SOURCE rightsinfo.cpp |
|
258 |
SOURCE Virtualpathptr.cpp |
|
259 |
SOURCE dirstreamable.cpp |
|
260 |
SOURCE bitset.cpp |
|
261 |
SOURCE cafmimeheader.cpp |
|
262 |
SOURCE mimefieldanddata.cpp |
|
263 |
USERINCLUDE ../inc |
|
264 |
USERINCLUDE ../source/cafutils |
|
265 |
SYSTEMINCLUDE /epoc32/include |
|
266 |
SYSTEMINCLUDE /epoc32/include/caf |
|
267 |
SYSTEMINCLUDE /epoc32/include/libc |
|
268 |
LIBRARY euser.lib |
|
269 |
LIBRARY estor.lib |
|
270 |
LIBRARY charconv.lib |
|
271 |
LIBRARY efsrv.lib |
|
272 |
LIBRARY apgrfx.lib |
|
273 |
LIBRARY ecom.lib |
|
274 |
LIBRARY apmime.lib |
|
275 |
""", 'mustmatch': r"LIBRARY"}, |
|
276 |
{ 'name': "TestEmptyStringTable", 'text': \ |
|
277 |
""" |
|
278 |
OPTION CW -w off |
|
279 |
TARGET testwebbrowser.exe |
|
280 |
TARGETTYPE EXE |
|
281 |
CAPABILITY ALL -TCB |
|
282 |
||
283 |
SYSTEMINCLUDE /epoc32/include /epoc32/include/ecom |
|
284 |
USERINCLUDE ../inc |
|
285 |
USERINCLUDE ../../httpexampleclient |
|
286 |
||
287 |
START STRINGTABLE ../data/htmltagstable.st |
|
288 |
||
289 |
END |
|
290 |
||
291 |
SOURCEPATH ../../httpexampleclient |
|
292 |
SOURCE httpexampleutils.cpp |
|
293 |
""", 'mustmatch': r"End STRINGTABLE OK"}, |
|
294 |
{ 'name': "TestARMINC", 'text': \ |
|
295 |
""" |
|
296 |
# 1 "<built-in>" |
|
297 |
# 1 "<command line>" |
|
298 |
# 10 "<command line>" |
|
299 |
# 1 "/var/local/net/smb/tmurphy/cluster_epocroot_1/epoc32/include/variant/Symbian_OS_vFuture.hrh" 1 |
|
300 |
# 11 "<command line>" 2 |
|
301 |
# 1 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_vfpv2.mmp" |
|
302 |
# 1 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_common.mmh" 1 |
|
303 |
TARGETTYPE dll |
|
304 |
OPTION ARMCC--no_exceptions --no_exceptions_unwind |
|
305 |
SOURCEPATH . |
|
306 |
SOURCE rtabort.cpp |
|
307 |
SOURCE rtdiv0.cpp |
|
308 |
SOURCE rtexit.cpp |
|
309 |
SOURCE rtlib.cpp |
|
310 |
SOURCE rtraise.cpp |
|
311 |
SOURCE drtrvct2_2.cpp |
|
312 |
SOURCE rtopnew.cpp rtopdel.cpp |
|
313 |
SOURCE sftfpini.cpp |
|
314 |
LIBRARY scppnwdl.lib euser.lib |
|
315 |
SYSTEMINCLUDE ../../include |
|
316 |
START ARMCC |
|
317 |
ARMRT |
|
318 |
ARMINC |
|
319 |
ARMLIBS c_t__un.l |
|
320 |
ARMLIBS h_t__un.l |
|
321 |
# 46 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_common.mmh" |
|
322 |
END |
|
323 |
capability all |
|
324 |
VENDORID 0x70000001 |
|
325 |
# 7 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_vfpv2.mmp" 2 |
|
326 |
TARGET drtrvct2_2_vfpv2.dll |
|
327 |
LINKAS drtrvct2_2.dll |
|
328 |
NOEXPORTLIBRARY |
|
329 |
START ARMCC |
|
330 |
ARMLIBS f_tvp.l |
|
331 |
END |
|
332 |
unpaged |
|
333 |
""", 'mustmatch': r"Set.*ARMINC"}] |
|
334 |
for i in tests: |
|
335 |
tester = MMPTester() |
|
336 |
mp = MMPParser(tester) |
|
337 |
try: |
|
338 |
result = mp.mmp.parseString(i['text']) |
|
339 |
except ParseException,e: |
|
340 |
pass |
|
341 |
self.assertEquals(result[0],'MMP') |
|
342 |
self.assertNotEquals(re.search(i['mustmatch'],tester.output,re.M),None) |
|
343 |
||
344 |
# run all the tests |
|
345 |
||
346 |
from raptor_tests import SmokeTest |
|
347 |
||
348 |
def run(): |
|
349 |
t = SmokeTest() |
|
350 |
t.id = "999" |
|
351 |
t.name = "mmpparser_unit" |
|
352 |
||
353 |
tests = unittest.makeSuite(TestMMPParser) |
|
354 |
result = unittest.TextTestRunner(verbosity=2).run(tests) |
|
355 |
||
356 |
if result.wasSuccessful(): |
|
357 |
t.result = SmokeTest.PASS |
|
358 |
else: |
|
359 |
t.result = SmokeTest.FAIL |
|
360 |
||
361 |
return t |