author | Richard Taylor <richard.i.taylor@nokia.com> |
Mon, 15 Mar 2010 16:54:05 +0000 | |
branch | fix |
changeset 374 | 96629a6f26e4 |
parent 60 | 28ee654acf42 |
child 400 | 554cc189839f |
permissions | -rw-r--r-- |
3 | 1 |
# |
2 |
# Copyright (c) 2006-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 |
# raptor_data_unit module |
|
16 |
# This module tests the classes that make up the Raptor Data Model. |
|
17 |
# |
|
18 |
||
19 |
import generic_path |
|
20 |
import os |
|
21 |
import raptor |
|
22 |
import raptor_cache |
|
23 |
import raptor_data |
|
24 |
import unittest |
|
25 |
||
26 |
class TestRaptorData(unittest.TestCase): |
|
27 |
||
28 |
def setUp(self): |
|
29 |
self.envStack = {} |
|
30 |
||
31 |
||
32 |
def SetEnv(self, name, value): |
|
60
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
33 |
# set environment variable and remember the old value (if there is one) |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
34 |
if os.environ.has_key(name): |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
35 |
self.envStack[name] = os.environ[name] |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
36 |
os.environ[name] = value |
3 | 37 |
|
38 |
||
39 |
def RestoreEnv(self, name): |
|
40 |
# put environment back to its state before SetEnv |
|
60
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
41 |
if self.envStack.has_key(name): |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
42 |
os.environ[name] = self.envStack[name] |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
43 |
else: |
3 | 44 |
del os.environ[name] # was not defined |
45 |
||
46 |
||
47 |
def testSimpleSpecification(self): |
|
48 |
spec = raptor_data.Specification("myProject") |
|
49 |
||
50 |
spec.SetInterface("Symbian.EXE") |
|
51 |
||
52 |
var = raptor_data.Variant("X") |
|
53 |
||
54 |
var.AddOperation(raptor_data.Set("SOURCES", "a.cpp")) |
|
55 |
var.AddOperation(raptor_data.Append("LIBS", "all.dll")) |
|
56 |
var.AddOperation(raptor_data.Append("INC", "/C/include")) |
|
57 |
var.AddOperation(raptor_data.Prepend("INC", "/B/include")) |
|
58 |
||
59 |
spec.AddVariant(var) |
|
60 |
spec.AddVariant("AlwaysBuildAsArm") |
|
61 |
||
62 |
self.failUnless(spec) |
|
63 |
self.failUnless(spec.Valid()) |
|
64 |
self.failUnless(var.Valid()) |
|
65 |
self.assertEqual(spec.name, "myProject") |
|
66 |
||
67 |
||
68 |
def testSimpleFilter(self): |
|
69 |
filter = raptor_data.Filter("filtered") |
|
70 |
filter.SetConfigCondition("ARMV5") |
|
71 |
||
72 |
filter.SetInterface(raptor_data.Interface("True.EXE")) |
|
73 |
filter.Else.SetInterface(raptor_data.Interface("False.EXE")) |
|
74 |
||
75 |
filter.AddVariant(raptor_data.Variant("True_var")) |
|
76 |
filter.Else.AddVariant(raptor_data.Variant("False_var")) |
|
77 |
||
78 |
filter.AddChildSpecification(raptor_data.Specification("TrueSpec")) |
|
79 |
filter.Else.AddChildSpecification(raptor_data.Specification("FalseSpec")) |
|
80 |
||
5 | 81 |
filter.Configure( raptor_data.BuildUnit("ARMV5",[]), cache=None ) |
3 | 82 |
# check a positive test |
5 | 83 |
iface = filter.GetInterface(cache=None) |
3 | 84 |
self.assertEqual(iface.name, "True.EXE") |
5 | 85 |
vars = filter.GetVariants(cache = None) |
3 | 86 |
self.assertEqual(vars[0].name, "True_var") |
87 |
kids = filter.GetChildSpecs() |
|
88 |
self.assertEqual(kids[0].name, "TrueSpec") |
|
89 |
||
5 | 90 |
filter.Configure( raptor_data.BuildUnit("NOT_ARMV5",[]) , cache = None) |
3 | 91 |
# check a negative test |
5 | 92 |
iface = filter.GetInterface(cache = None) |
3 | 93 |
self.assertEqual(iface.name, "False.EXE") |
5 | 94 |
vars = filter.GetVariants(cache = None) |
3 | 95 |
self.assertEqual(vars[0].name, "False_var") |
96 |
kids = filter.GetChildSpecs() |
|
97 |
self.assertEqual(kids[0].name, "FalseSpec") |
|
98 |
||
99 |
||
5 | 100 |
def testSimpleVariant(self): |
3 | 101 |
var = raptor_data.Variant() |
102 |
self.failUnless(var) |
|
103 |
self.failIf( var.Valid() ) |
|
104 |
||
105 |
var.SetProperty("name", "ABC") |
|
106 |
var.SetProperty("extends", "DEF") |
|
107 |
var.SetProperty("host", "GHI") |
|
108 |
||
109 |
self.assertEqual(var.name, "ABC") |
|
110 |
self.assertEqual(var.extends, "DEF") |
|
111 |
self.assertEqual(var.host, None) |
|
112 |
||
113 |
var.SetProperty("host", "win32") |
|
114 |
self.assertEqual(var.host, "win32") |
|
115 |
||
116 |
self.failUnless( var.Valid() ) |
|
117 |
||
118 |
var.AddOperation( raptor_data.Set("CC", "armcc") ) |
|
119 |
var.AddOperation( raptor_data.Set("LN", "armlink") ) |
|
120 |
||
121 |
self.failUnless( var.Valid() ) |
|
122 |
||
123 |
var.SetProperty("extends", "") |
|
5 | 124 |
ops = var.GetAllOperationsRecursively(None) |
3 | 125 |
|
126 |
self.assertEqual( len(ops), 1 ) |
|
127 |
self.assertEqual( len(ops[0]), 2 ) |
|
128 |
||
129 |
def testExtendedVariant(self): |
|
130 |
r = raptor.Raptor() |
|
131 |
||
132 |
varA = raptor_data.Variant("A") |
|
133 |
varA.SetProperty("extends", None) |
|
134 |
varA.AddOperation( raptor_data.Set("V1", "1A") ) |
|
135 |
varA.AddOperation( raptor_data.Set("V2", "2A") ) |
|
136 |
||
137 |
varB = raptor_data.Variant("B") |
|
138 |
varB.SetProperty("extends", "A") |
|
139 |
varB.AddOperation( raptor_data.Set("V2", "2B") ) |
|
140 |
varB.AddOperation( raptor_data.Set("V3", "3B") ) |
|
141 |
||
142 |
varC = raptor_data.Variant("C") |
|
143 |
varC.SetProperty("extends", "B") |
|
144 |
varC.AddOperation( raptor_data.Set("V3", "3C") ) |
|
145 |
varC.AddOperation( raptor_data.Set("V4", "4C") ) |
|
146 |
||
147 |
self.failUnless( varA.Valid() ) |
|
148 |
self.failUnless( varB.Valid() ) |
|
149 |
self.failUnless( varC.Valid() ) |
|
150 |
||
151 |
r.cache.AddVariant(varA) |
|
152 |
r.cache.AddVariant(varB) |
|
153 |
r.cache.AddVariant(varC) |
|
154 |
||
5 | 155 |
e = r.GetEvaluator(None, varA.GenerateBuildUnits(r.cache)[0] ) |
3 | 156 |
self.assertEqual( e.Get("V1"), "1A" ) |
157 |
self.assertEqual( e.Get("V2"), "2A" ) |
|
158 |
||
5 | 159 |
e = r.GetEvaluator(None, varB.GenerateBuildUnits(r.cache)[0] ) |
3 | 160 |
self.assertEqual( e.Get("V1"), "1A" ) |
161 |
self.assertEqual( e.Get("V2"), "2B" ) |
|
162 |
self.assertEqual( e.Get("V3"), "3B" ) |
|
163 |
||
5 | 164 |
e = r.GetEvaluator(None, varC.GenerateBuildUnits(r.cache)[0] ) |
3 | 165 |
self.assertEqual( e.Get("V1"), "1A" ) |
166 |
self.assertEqual( e.Get("V2"), "2B" ) |
|
167 |
self.assertEqual( e.Get("V3"), "3C" ) |
|
168 |
self.assertEqual( e.Get("V4"), "4C" ) |
|
169 |
||
170 |
def testReferencedVariant(self): |
|
171 |
r = raptor.Raptor() |
|
172 |
||
173 |
varA = raptor_data.Variant("A") |
|
174 |
varA.SetProperty("extends", None) |
|
175 |
varA.AddOperation( raptor_data.Set("V1", "1A") ) |
|
176 |
varA.AddOperation( raptor_data.Set("V2", "2A") ) |
|
177 |
||
178 |
# B extends A, and has a reference to C. |
|
179 |
varB = raptor_data.Variant("B") |
|
180 |
varB.SetProperty("extends", "A") |
|
181 |
varB.AddOperation( raptor_data.Set("V2", "2B") ) |
|
182 |
varB.AddOperation( raptor_data.Set("V3", "3B") ) |
|
183 |
varB.AddChild( raptor_data.VariantRef("C") ) |
|
184 |
||
185 |
varC = raptor_data.Variant("C") |
|
186 |
varC.SetProperty("extends", None) |
|
187 |
varC.AddOperation( raptor_data.Set("V3", "3C") ) |
|
188 |
varC.AddOperation( raptor_data.Set("V4", "4C") ) |
|
189 |
||
190 |
self.failUnless( varA.Valid() ) |
|
191 |
self.failUnless( varB.Valid() ) |
|
192 |
self.failUnless( varC.Valid() ) |
|
193 |
||
194 |
r.cache.AddVariant(varA) |
|
195 |
r.cache.AddVariant(varB) |
|
196 |
r.cache.AddVariant(varC) |
|
197 |
||
5 | 198 |
e = r.GetEvaluator(None, varA.GenerateBuildUnits(r.cache)[0] ) |
3 | 199 |
self.assertEqual( e.Get("V1"), "1A" ) |
200 |
self.assertEqual( e.Get("V2"), "2A" ) |
|
201 |
||
5 | 202 |
e = r.GetEvaluator(None, varC.GenerateBuildUnits(r.cache)[0] ) |
3 | 203 |
self.assertEqual( e.Get("V3"), "3C" ) |
204 |
self.assertEqual( e.Get("V4"), "4C" ) |
|
205 |
||
5 | 206 |
e = r.GetEvaluator(None, varB.GenerateBuildUnits(r.cache)[0] ) |
3 | 207 |
self.assertEqual( e.Get("V1"), "1A" ) |
208 |
self.assertEqual( e.Get("V2"), "2B" ) |
|
209 |
self.assertEqual( e.Get("V3"), "3B" ) |
|
210 |
self.assertEqual( e.Get("V4"), "4C" ) |
|
211 |
||
212 |
def testAlias(self): |
|
213 |
r = raptor.Raptor() |
|
214 |
||
215 |
varA = raptor_data.Variant("A") |
|
216 |
varA.AddOperation( raptor_data.Set("V1", "1A") ) |
|
217 |
varA.AddOperation( raptor_data.Set("V2", "2A") ) |
|
218 |
r.cache.AddVariant(varA) |
|
219 |
||
220 |
varB = raptor_data.Variant("B") |
|
221 |
varB.AddOperation( raptor_data.Set("V2", "2B") ) |
|
222 |
varB.AddOperation( raptor_data.Set("V3", "3B") ) |
|
223 |
r.cache.AddVariant(varB) |
|
224 |
||
225 |
varC = raptor_data.Variant("C") |
|
226 |
varC.AddOperation( raptor_data.Set("V3", "3C") ) |
|
227 |
varC.AddOperation( raptor_data.Set("V4", "4C") ) |
|
228 |
r.cache.AddVariant(varC) |
|
229 |
||
230 |
# <alias name="an_alias" meaning="A.B.C"/> |
|
231 |
alias = raptor_data.Alias("an_alias") |
|
232 |
alias.SetProperty("meaning", "A.B.C") |
|
233 |
r.cache.AddAlias(alias) |
|
234 |
||
235 |
self.failUnless( alias.Valid() ) |
|
236 |
||
5 | 237 |
e = r.GetEvaluator(None, alias.GenerateBuildUnits(r.cache)[0] ) |
3 | 238 |
self.assertEqual( e.Get("V1"), "1A" ) |
239 |
self.assertEqual( e.Get("V2"), "2B" ) |
|
240 |
self.assertEqual( e.Get("V3"), "3C" ) |
|
241 |
self.assertEqual( e.Get("V4"), "4C" ) |
|
242 |
||
243 |
def testGroup1(self): |
|
244 |
r = raptor.Raptor() |
|
245 |
||
246 |
varA = raptor_data.Variant("A") |
|
247 |
varA.AddOperation( raptor_data.Set("V1", "1A") ) |
|
248 |
varA.AddOperation( raptor_data.Set("V2", "2A") ) |
|
249 |
r.cache.AddVariant(varA) |
|
250 |
||
251 |
varB = raptor_data.Variant("B") |
|
252 |
varB.AddOperation( raptor_data.Set("V2", "2B") ) |
|
253 |
varB.AddOperation( raptor_data.Set("V3", "3B") ) |
|
254 |
r.cache.AddVariant(varB) |
|
255 |
||
256 |
varC = raptor_data.Variant("C") |
|
257 |
varC.AddOperation( raptor_data.Set("V3", "3C") ) |
|
258 |
varC.AddOperation( raptor_data.Set("V4", "4C") ) |
|
259 |
r.cache.AddVariant(varC) |
|
260 |
||
261 |
alias = raptor_data.Alias("alias") |
|
262 |
alias.SetProperty("meaning", "B.C") |
|
263 |
r.cache.AddAlias(alias) |
|
264 |
||
265 |
# This group has two buildable units: "A" and "alias" = "B.C". |
|
266 |
# <group name="group1"> |
|
267 |
# <varRef ref="A"/> |
|
268 |
# <aliasRef ref="alias"> |
|
269 |
# <group> |
|
270 |
group1 = raptor_data.Group("group1") |
|
271 |
group1.AddChild( raptor_data.VariantRef("A") ) |
|
272 |
group1.AddChild( raptor_data.AliasRef("alias") ) |
|
273 |
r.cache.AddGroup(group1) |
|
274 |
||
275 |
vRef = raptor_data.VariantRef("C") |
|
276 |
vRef.SetProperty("mod", "B") |
|
277 |
||
278 |
# This group has three buildable units: "C.B", "A" and "alias" = "B.C". |
|
279 |
# <group name="group2"> |
|
280 |
# <varRef ref="C" mod="B"/> |
|
281 |
# <groupRef ref="group1"/> |
|
282 |
# <group> |
|
283 |
group2 = raptor_data.Group("group2") |
|
284 |
group2.AddChild(vRef) |
|
285 |
group2.AddChild( raptor_data.GroupRef("group1") ) |
|
286 |
r.cache.AddGroup(group2) |
|
287 |
||
288 |
self.failUnless( group1.Valid() ) |
|
289 |
self.failUnless( group2.Valid() ) |
|
290 |
||
5 | 291 |
buildUnits = group1.GenerateBuildUnits(r.cache) |
3 | 292 |
self.assertEqual( len(buildUnits), 2 ) |
293 |
self.assertEqual( buildUnits[0].name, "A" ) |
|
294 |
self.assertEqual( buildUnits[1].name, "alias" ) |
|
295 |
self.assertEqual( buildUnits[1].variants[0].name, "B" ) |
|
296 |
self.assertEqual( buildUnits[1].variants[1].name, "C" ) |
|
297 |
||
5 | 298 |
buildUnits = group2.GenerateBuildUnits(r.cache) |
3 | 299 |
self.assertEqual( len(buildUnits), 3 ) |
300 |
self.assertEqual( buildUnits[0].name, "C.B" ) |
|
301 |
self.assertEqual( buildUnits[1].name, "A" ) |
|
302 |
self.assertEqual( buildUnits[2].name, "alias" ) |
|
303 |
||
304 |
self.assertEqual( len(buildUnits[0].variants), 2 ) |
|
305 |
self.assertEqual( len(buildUnits[1].variants), 1 ) |
|
306 |
self.assertEqual( len(buildUnits[2].variants), 2 ) |
|
307 |
||
308 |
def testGroup2(self): |
|
309 |
r = raptor.Raptor() |
|
310 |
||
311 |
r.cache.Load( generic_path.Join(r.home, "test", "config", "arm.xml") ) |
|
312 |
||
5 | 313 |
buildUnits = r.cache.FindNamedGroup("G2").GenerateBuildUnits(r.cache) |
3 | 314 |
|
315 |
self.assertEqual( len(buildUnits), 8 ) |
|
316 |
||
317 |
self.assertEqual(buildUnits[0].name, "ARMV5_UREL.MOD1") |
|
318 |
self.assertEqual(buildUnits[1].name, "ARMV5_UDEB.MOD1.MOD2") |
|
319 |
self.assertEqual(buildUnits[2].name, "ALIAS_1") |
|
320 |
self.assertEqual(buildUnits[3].name, "ALIAS_2.MOD1.MOD2.MOD1") |
|
321 |
self.assertEqual(buildUnits[4].name, "ARMV5_UREL.MOD2") |
|
322 |
self.assertEqual(buildUnits[5].name, "ARMV5_UDEB.MOD2") |
|
323 |
self.assertEqual(buildUnits[6].name, "MOD1") |
|
324 |
self.assertEqual(buildUnits[7].name, "MOD2") |
|
325 |
||
326 |
def testRefs(self): |
|
327 |
i1 = raptor_data.InterfaceRef() |
|
328 |
self.failIf(i1.Valid()) |
|
329 |
||
330 |
i2 = raptor_data.InterfaceRef("") |
|
331 |
self.failIf(i2.Valid()) |
|
332 |
||
333 |
i3 = raptor_data.InterfaceRef("ABC_abc.123") |
|
334 |
self.failUnless(i3.Valid()) |
|
335 |
self.assertEqual(i3.ref, "ABC_abc.123") |
|
336 |
||
337 |
||
338 |
def testEvaluator(self): |
|
339 |
self.SetEnv("EPOCROOT", "/C") |
|
340 |
aRaptor = raptor.Raptor() |
|
341 |
cache = aRaptor.cache |
|
5 | 342 |
aRaptor.debugOutput = True |
3 | 343 |
cache.Load(generic_path.Join(aRaptor.home, "test", "config", "arm.xml")) |
344 |
||
345 |
var = cache.FindNamedVariant("ARMV5_UREL") |
|
5 | 346 |
eval = aRaptor.GetEvaluator( None, var.GenerateBuildUnits(aRaptor.cache)[0]) |
3 | 347 |
self.RestoreEnv("EPOCROOT") |
348 |
||
349 |
# test the Get method |
|
350 |
varcfg = eval.Get("VARIANT_CFG") |
|
351 |
self.assertEqual(varcfg, "/C/variant/variant.cfg") |
|
352 |
||
353 |
# test the Resolve wrt EPOCROOT |
|
354 |
varcfg = eval.Resolve("VARIANT_CFG") |
|
355 |
self.assertEqual(varcfg, "/C/variant/variant.cfg") |
|
60
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
356 |
|
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
357 |
def testProblematicEnvironment(self): |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
358 |
# ask for environment variable values that will break makefile parsing due to |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
359 |
# backslashes forming line continuation characters |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
360 |
self.SetEnv("ENVVAR_BSLASH_END1", "C:\\test1a\\;C:\\test1b\\") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
361 |
self.SetEnv("ENVVAR_BSLASH_END2", "C:\\test2a\\;C:\\test2b\\\\") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
362 |
self.SetEnv("ENVVAR_BSLASH_END3", "C:\\test3a\\;C:\\test3b\\\\\\") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
363 |
var = raptor_data.Variant("my.var") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
364 |
var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END1")) |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
365 |
var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END2")) |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
366 |
var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END3")) |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
367 |
|
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
368 |
aRaptor = raptor.Raptor() |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
369 |
eval = aRaptor.GetEvaluator(None, var.GenerateBuildUnits(aRaptor.cache)[0]) |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
370 |
self.RestoreEnv("ENVVAR_BSLASH_END1") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
371 |
self.RestoreEnv("ENVVAR_BSLASH_END2") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
372 |
self.RestoreEnv("ENVVAR_BSLASH_END3") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
373 |
|
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
374 |
value = eval.Get("ENVVAR_BSLASH_END1") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
375 |
self.assertEqual(value, "C:\\test1a\\;C:\\test1b\\\\") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
376 |
|
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
377 |
value = eval.Get("ENVVAR_BSLASH_END2") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
378 |
self.assertEqual(value, "C:\\test2a\\;C:\\test2b\\\\") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
379 |
|
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
380 |
value = eval.Get("ENVVAR_BSLASH_END3") |
28ee654acf42
Deal with backslashes at the end of <env/> values
Jon Chatten <>
parents:
5
diff
changeset
|
381 |
self.assertEqual(value, "C:\\test3a\\;C:\\test3b\\\\\\\\") |
3 | 382 |
|
383 |
def testMissingEnvironment(self): |
|
384 |
# ask for an environment variable that is not set |
|
385 |
# and has no default value. |
|
386 |
var = raptor_data.Variant("my.var") |
|
387 |
var.AddOperation(raptor_data.Env("RAPTOR_SAYS_NO")) |
|
388 |
||
389 |
aRaptor = raptor.Raptor() |
|
5 | 390 |
|
391 |
try: |
|
392 |
eval = aRaptor.GetEvaluator(None, var.GenerateBuildUnits(aRaptor.cache)[0] ) |
|
393 |
badval = eval.Get("RAPTOR_SAYS_NO") |
|
394 |
except raptor_data.UninitialisedVariableException, e: |
|
395 |
return |
|
396 |
||
397 |
self.assertTrue(False) |
|
3 | 398 |
|
399 |
def checkForParam(self, params, name, default): |
|
400 |
for p in params: |
|
401 |
if p.name == name and (default == None or p.default == default): |
|
402 |
return True |
|
403 |
return False |
|
404 |
||
405 |
def testInterface(self): |
|
406 |
aRaptor = raptor.Raptor() |
|
407 |
cache = aRaptor.cache |
|
408 |
cache.Load(generic_path.Join(aRaptor.home, "test", "config", "interface.xml")) |
|
409 |
||
410 |
base = cache.FindNamedInterface("Base.XYZ") |
|
5 | 411 |
p = base.GetParams(cache) |
3 | 412 |
self.failUnless(self.checkForParam(p, "A", None)) |
413 |
self.failUnless(self.checkForParam(p, "B", "baseB")) |
|
414 |
self.failUnless(self.checkForParam(p, "C", "baseC")) |
|
415 |
||
416 |
extended = cache.FindNamedInterface("Extended.XYZ") |
|
5 | 417 |
p = extended.GetParams(cache) |
3 | 418 |
self.failUnless(self.checkForParam(p, "A", None)) |
419 |
self.failUnless(self.checkForParam(p, "B", "baseB")) |
|
420 |
self.failUnless(self.checkForParam(p, "C", "extC")) |
|
421 |
self.failUnless(self.checkForParam(p, "D", None)) |
|
5 | 422 |
f = extended.GetFLMIncludePath(cache=cache) |
3 | 423 |
self.assertEqual(f.File(), "ext.flm") |
424 |
||
425 |
extended = cache.FindNamedInterface("Extended2.XYZ") |
|
5 | 426 |
p = extended.GetParams(cache) |
3 | 427 |
self.failUnless(self.checkForParam(p, "A", None)) |
428 |
self.failUnless(self.checkForParam(p, "B", "baseB")) |
|
429 |
self.failUnless(self.checkForParam(p, "C", "extC")) |
|
430 |
self.failUnless(self.checkForParam(p, "D", None)) |
|
5 | 431 |
f = extended.GetFLMIncludePath(cache) |
3 | 432 |
self.assertEqual(f.File(), "base.flm") |
374
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
433 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
434 |
def testGetBuildUnits(self): |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
435 |
r = raptor.Raptor() |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
436 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
437 |
# <group name="g1"> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
438 |
g1 = raptor_data.Group("g1") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
439 |
r.cache.AddGroup(g1) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
440 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
441 |
# <groupRef ref="g2" mod="A.B"/> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
442 |
g2a = raptor_data.GroupRef() |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
443 |
g2a.SetProperty("ref", "g2") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
444 |
g2a.SetProperty("mod", "A.B") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
445 |
g1.AddChild(g2a) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
446 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
447 |
# <groupRef ref="g2" mod="C.D"/> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
448 |
g2b = raptor_data.GroupRef() |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
449 |
g2b.SetProperty("ref", "g2") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
450 |
g2b.SetProperty("mod", "C.D") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
451 |
g1.AddChild(g2b) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
452 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
453 |
# <group name="g2"> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
454 |
g2 = raptor_data.Group("g2") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
455 |
r.cache.AddGroup(g2) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
456 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
457 |
# <varRef ref="V" mod="E.F"/> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
458 |
v2 = raptor_data.VariantRef() |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
459 |
v2.SetProperty("ref", "V") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
460 |
v2.SetProperty("mod", "E.F") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
461 |
g2.AddChild(v2) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
462 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
463 |
# <varRef ref="V" mod="G.H"/> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
464 |
v3 = raptor_data.VariantRef() |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
465 |
v3.SetProperty("ref", "V") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
466 |
v3.SetProperty("mod", "G.H") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
467 |
g2.AddChild(v3) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
468 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
469 |
# <aliasRef ref="X" mod="I.J"/> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
470 |
v4 = raptor_data.AliasRef() |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
471 |
v4.SetProperty("ref", "X") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
472 |
v4.SetProperty("mod", "I.J") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
473 |
g2.AddChild(v4) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
474 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
475 |
# <aliasRef ref="X" mod="K.L"/> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
476 |
v5 = raptor_data.AliasRef() |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
477 |
v5.SetProperty("ref", "X") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
478 |
v5.SetProperty("mod", "K.L") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
479 |
g2.AddChild(v5) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
480 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
481 |
r.cache.AddVariant(raptor_data.Variant("A")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
482 |
r.cache.AddVariant(raptor_data.Variant("B")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
483 |
r.cache.AddVariant(raptor_data.Variant("C")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
484 |
r.cache.AddVariant(raptor_data.Variant("D")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
485 |
r.cache.AddVariant(raptor_data.Variant("E")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
486 |
r.cache.AddVariant(raptor_data.Variant("F")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
487 |
r.cache.AddVariant(raptor_data.Variant("G")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
488 |
r.cache.AddVariant(raptor_data.Variant("H")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
489 |
r.cache.AddVariant(raptor_data.Variant("I")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
490 |
r.cache.AddVariant(raptor_data.Variant("J")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
491 |
r.cache.AddVariant(raptor_data.Variant("K")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
492 |
r.cache.AddVariant(raptor_data.Variant("L")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
493 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
494 |
r.cache.AddVariant(raptor_data.Variant("V")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
495 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
496 |
# <alias name="X" meaning="A.B.C.D.E.F.G.H/> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
497 |
alias = raptor_data.Alias("X") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
498 |
alias.SetProperty("meaning", "A.B.C.D.E.F.G.H") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
499 |
r.cache.AddAlias(alias) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
500 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
501 |
r.cache.AddVariant(raptor_data.Variant("Y")) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
502 |
r.cache.AddVariant(raptor_data.Variant("Z")) |
3 | 503 |
|
374
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
504 |
units = raptor_data.GetBuildUnits(["g1.Y", "g1.Z"], r.cache, r) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
505 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
506 |
# <group name="g1"> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
507 |
# <groupRef ref="g2" mod="A.B"/> g2.A.B |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
508 |
# <groupRef ref="g2" mod="C.D"/> g2.C.D |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
509 |
# </group> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
510 |
# <group name="g2"> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
511 |
# <varRef ref="V" mod="E.F"/> V.E.F |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
512 |
# <varRef ref="V" mod="G.H"/> V.G.H |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
513 |
# <aliasRef ref="X" mod="I.J"/> X.I.J |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
514 |
# <aliasRef ref="X" mod="K.L"/> X.K.L |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
515 |
# </group> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
516 |
# <alias name="X" meaning="A.B.C.D.E.F.G.H/> |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
517 |
# |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
518 |
expected = [ "VEFABY", "VGHABY", "ABCDEFGHIJABY", "ABCDEFGHKLABY", |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
519 |
"VEFCDY", "VGHCDY", "ABCDEFGHIJCDY", "ABCDEFGHKLCDY", |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
520 |
"VEFABZ", "VGHABZ", "ABCDEFGHIJABZ", "ABCDEFGHKLABZ", |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
521 |
"VEFCDZ", "VGHCDZ", "ABCDEFGHIJCDZ", "ABCDEFGHKLCDZ" ] |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
522 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
523 |
self.failUnlessEqual(len(units), len(expected)) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
524 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
525 |
for u in units: |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
526 |
vars = "".join([v.name for v in u.variants]) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
527 |
self.failUnless(vars in expected, vars + " was not expected") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
528 |
expected.remove(vars) |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
529 |
|
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
530 |
self.failUnless(len(expected) == 0, str(expected) + " not found") |
96629a6f26e4
fault tolerant XML groups
Richard Taylor <richard.i.taylor@nokia.com>
parents:
60
diff
changeset
|
531 |
|
3 | 532 |
# run all the tests |
533 |
||
534 |
from raptor_tests import SmokeTest |
|
535 |
||
536 |
def run(): |
|
537 |
t = SmokeTest() |
|
538 |
t.id = "999" |
|
539 |
t.name = "raptor_data_unit" |
|
540 |
||
541 |
tests = unittest.makeSuite(TestRaptorData) |
|
542 |
result = unittest.TextTestRunner(verbosity=2).run(tests) |
|
543 |
||
544 |
if result.wasSuccessful(): |
|
545 |
t.result = SmokeTest.PASS |
|
546 |
else: |
|
547 |
t.result = SmokeTest.FAIL |
|
548 |
||
549 |
return t |