summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/tests/codeparser.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/tests/codeparser.py')
-rw-r--r--bitbake/lib/bb/tests/codeparser.py66
1 files changed, 58 insertions, 8 deletions
diff --git a/bitbake/lib/bb/tests/codeparser.py b/bitbake/lib/bb/tests/codeparser.py
index 826a2d2f6d..f6585fb3aa 100644
--- a/bitbake/lib/bb/tests/codeparser.py
+++ b/bitbake/lib/bb/tests/codeparser.py
@@ -44,6 +44,7 @@ class VariableReferenceTest(ReferenceTest):
44 def parseExpression(self, exp): 44 def parseExpression(self, exp):
45 parsedvar = self.d.expandWithRefs(exp, None) 45 parsedvar = self.d.expandWithRefs(exp, None)
46 self.references = parsedvar.references 46 self.references = parsedvar.references
47 self.execs = parsedvar.execs
47 48
48 def test_simple_reference(self): 49 def test_simple_reference(self):
49 self.setEmptyVars(["FOO"]) 50 self.setEmptyVars(["FOO"])
@@ -61,6 +62,11 @@ class VariableReferenceTest(ReferenceTest):
61 self.parseExpression("${@d.getVar('BAR') + 'foo'}") 62 self.parseExpression("${@d.getVar('BAR') + 'foo'}")
62 self.assertReferences(set(["BAR"])) 63 self.assertReferences(set(["BAR"]))
63 64
65 def test_python_exec_reference(self):
66 self.parseExpression("${@eval('3 * 5')}")
67 self.assertReferences(set())
68 self.assertExecs(set(["eval"]))
69
64class ShellReferenceTest(ReferenceTest): 70class ShellReferenceTest(ReferenceTest):
65 71
66 def parseExpression(self, exp): 72 def parseExpression(self, exp):
@@ -111,9 +117,9 @@ ${D}${libdir}/pkgconfig/*.pc
111 self.assertExecs(set(["sed"])) 117 self.assertExecs(set(["sed"]))
112 118
113 def test_parameter_expansion_modifiers(self): 119 def test_parameter_expansion_modifiers(self):
114 # - and + are also valid modifiers for parameter expansion, but are 120 # -,+ and : are also valid modifiers for parameter expansion, but are
115 # valid characters in bitbake variable names, so are not included here 121 # valid characters in bitbake variable names, so are not included here
116 for i in ('=', ':-', ':=', '?', ':?', ':+', '#', '%', '##', '%%'): 122 for i in ('=', '?', '#', '%', '##', '%%'):
117 name = "foo%sbar" % i 123 name = "foo%sbar" % i
118 self.parseExpression("${%s}" % name) 124 self.parseExpression("${%s}" % name)
119 self.assertNotIn(name, self.references) 125 self.assertNotIn(name, self.references)
@@ -318,7 +324,7 @@ d.getVar(a(), False)
318 "filename": "example.bb", 324 "filename": "example.bb",
319 }) 325 })
320 326
321 deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d) 327 deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d)
322 328
323 self.assertEqual(deps, set(["somevar", "bar", "something", "inexpand", "test", "test2", "a"])) 329 self.assertEqual(deps, set(["somevar", "bar", "something", "inexpand", "test", "test2", "a"]))
324 330
@@ -365,7 +371,7 @@ esac
365 self.d.setVarFlags("FOO", {"func": True}) 371 self.d.setVarFlags("FOO", {"func": True})
366 self.setEmptyVars(execs) 372 self.setEmptyVars(execs)
367 373
368 deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d) 374 deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d)
369 375
370 self.assertEqual(deps, set(["somevar", "inverted"] + execs)) 376 self.assertEqual(deps, set(["somevar", "inverted"] + execs))
371 377
@@ -375,7 +381,7 @@ esac
375 self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") 381 self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
376 self.d.setVarFlag("FOO", "vardeps", "oe_libinstall") 382 self.d.setVarFlag("FOO", "vardeps", "oe_libinstall")
377 383
378 deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d) 384 deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d)
379 385
380 self.assertEqual(deps, set(["oe_libinstall"])) 386 self.assertEqual(deps, set(["oe_libinstall"]))
381 387
@@ -384,7 +390,7 @@ esac
384 self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") 390 self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
385 self.d.setVarFlag("FOO", "vardeps", "${@'oe_libinstall'}") 391 self.d.setVarFlag("FOO", "vardeps", "${@'oe_libinstall'}")
386 392
387 deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d) 393 deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d)
388 394
389 self.assertEqual(deps, set(["oe_libinstall"])) 395 self.assertEqual(deps, set(["oe_libinstall"]))
390 396
@@ -399,7 +405,7 @@ esac
399 # Check dependencies 405 # Check dependencies
400 self.d.setVar('ANOTHERVAR', expr) 406 self.d.setVar('ANOTHERVAR', expr)
401 self.d.setVar('TESTVAR', 'anothervalue testval testval2') 407 self.d.setVar('TESTVAR', 'anothervalue testval testval2')
402 deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), self.d) 408 deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d)
403 self.assertEqual(sorted(values.splitlines()), 409 self.assertEqual(sorted(values.splitlines()),
404 sorted([expr, 410 sorted([expr,
405 'TESTVAR{anothervalue} = Set', 411 'TESTVAR{anothervalue} = Set',
@@ -412,11 +418,55 @@ esac
412 # Check final value 418 # Check final value
413 self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['anothervalue', 'yetanothervalue', 'lastone']) 419 self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['anothervalue', 'yetanothervalue', 'lastone'])
414 420
421 def test_contains_vardeps_excluded(self):
422 # Check the ignored_vars option to build_dependencies is handled by contains functionality
423 varval = '${TESTVAR2} ${@bb.utils.filter("TESTVAR", "somevalue anothervalue", d)}'
424 self.d.setVar('ANOTHERVAR', varval)
425 self.d.setVar('TESTVAR', 'anothervalue testval testval2')
426 self.d.setVar('TESTVAR2', 'testval3')
427 deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), set(["TESTVAR"]), self.d, self.d)
428 self.assertEqual(sorted(values.splitlines()), sorted([varval]))
429 self.assertEqual(deps, set(["TESTVAR2"]))
430 self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue'])
431
432 # Check the vardepsexclude flag is handled by contains functionality
433 self.d.setVarFlag('ANOTHERVAR', 'vardepsexclude', 'TESTVAR')
434 deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d)
435 self.assertEqual(sorted(values.splitlines()), sorted([varval]))
436 self.assertEqual(deps, set(["TESTVAR2"]))
437 self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue'])
438
439 def test_contains_vardeps_override_operators(self):
440 # Check override operators handle dependencies correctly with the contains functionality
441 expr_plain = 'testval'
442 expr_prepend = '${@bb.utils.filter("TESTVAR1", "testval1", d)} '
443 expr_append = ' ${@bb.utils.filter("TESTVAR2", "testval2", d)}'
444 expr_remove = '${@bb.utils.contains("TESTVAR3", "no-testval", "testval", "", d)}'
445 # Check dependencies
446 self.d.setVar('ANOTHERVAR', expr_plain)
447 self.d.prependVar('ANOTHERVAR', expr_prepend)
448 self.d.appendVar('ANOTHERVAR', expr_append)
449 self.d.setVar('ANOTHERVAR:remove', expr_remove)
450 self.d.setVar('TESTVAR1', 'blah')
451 self.d.setVar('TESTVAR2', 'testval2')
452 self.d.setVar('TESTVAR3', 'no-testval')
453 deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d)
454 self.assertEqual(sorted(values.splitlines()),
455 sorted([
456 expr_prepend + expr_plain + expr_append,
457 '_remove of ' + expr_remove,
458 'TESTVAR1{testval1} = Unset',
459 'TESTVAR2{testval2} = Set',
460 'TESTVAR3{no-testval} = Set',
461 ]))
462 # Check final value
463 self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval2'])
464
415 #Currently no wildcard support 465 #Currently no wildcard support
416 #def test_vardeps_wildcards(self): 466 #def test_vardeps_wildcards(self):
417 # self.d.setVar("oe_libinstall", "echo test") 467 # self.d.setVar("oe_libinstall", "echo test")
418 # self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") 468 # self.d.setVar("FOO", "foo=oe_libinstall; eval $foo")
419 # self.d.setVarFlag("FOO", "vardeps", "oe_*") 469 # self.d.setVarFlag("FOO", "vardeps", "oe_*")
420 # self.assertEquals(deps, set(["oe_libinstall"])) 470 # self.assertEqual(deps, set(["oe_libinstall"]))
421 471
422 472