diff options
Diffstat (limited to 'bitbake/lib/bb/tests/codeparser.py')
-rw-r--r-- | bitbake/lib/bb/tests/codeparser.py | 106 |
1 files changed, 98 insertions, 8 deletions
diff --git a/bitbake/lib/bb/tests/codeparser.py b/bitbake/lib/bb/tests/codeparser.py index 826a2d2f6d..c0d1362a0c 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 | |||
64 | class ShellReferenceTest(ReferenceTest): | 70 | class ShellReferenceTest(ReferenceTest): |
65 | 71 | ||
66 | def parseExpression(self, exp): | 72 | def parseExpression(self, exp): |
@@ -100,6 +106,46 @@ ${D}${libdir}/pkgconfig/*.pc | |||
100 | self.parseExpression("foo=$(echo bar)") | 106 | self.parseExpression("foo=$(echo bar)") |
101 | self.assertExecs(set(["echo"])) | 107 | self.assertExecs(set(["echo"])) |
102 | 108 | ||
109 | def test_assign_subshell_expansion_quotes(self): | ||
110 | self.parseExpression('foo="$(echo bar)"') | ||
111 | self.assertExecs(set(["echo"])) | ||
112 | |||
113 | def test_assign_subshell_expansion_nested(self): | ||
114 | self.parseExpression('foo="$(func1 "$(func2 bar$(func3))")"') | ||
115 | self.assertExecs(set(["func1", "func2", "func3"])) | ||
116 | |||
117 | def test_assign_subshell_expansion_multiple(self): | ||
118 | self.parseExpression('foo="$(func1 "$(func2)") $(func3)"') | ||
119 | self.assertExecs(set(["func1", "func2", "func3"])) | ||
120 | |||
121 | def test_assign_subshell_expansion_escaped_quotes(self): | ||
122 | self.parseExpression('foo="\\"fo\\"o$(func1)"') | ||
123 | self.assertExecs(set(["func1"])) | ||
124 | |||
125 | def test_assign_subshell_expansion_empty(self): | ||
126 | self.parseExpression('foo="bar$()foo"') | ||
127 | self.assertExecs(set()) | ||
128 | |||
129 | def test_assign_subshell_backticks(self): | ||
130 | self.parseExpression("foo=`echo bar`") | ||
131 | self.assertExecs(set(["echo"])) | ||
132 | |||
133 | def test_assign_subshell_backticks_quotes(self): | ||
134 | self.parseExpression('foo="`echo bar`"') | ||
135 | self.assertExecs(set(["echo"])) | ||
136 | |||
137 | def test_assign_subshell_backticks_multiple(self): | ||
138 | self.parseExpression('foo="`func1 bar` `func2`"') | ||
139 | self.assertExecs(set(["func1", "func2"])) | ||
140 | |||
141 | def test_assign_subshell_backticks_escaped_quotes(self): | ||
142 | self.parseExpression('foo="\\"fo\\"o`func1`"') | ||
143 | self.assertExecs(set(["func1"])) | ||
144 | |||
145 | def test_assign_subshell_backticks_empty(self): | ||
146 | self.parseExpression('foo="bar``foo"') | ||
147 | self.assertExecs(set()) | ||
148 | |||
103 | def test_shell_unexpanded(self): | 149 | def test_shell_unexpanded(self): |
104 | self.setEmptyVars(["QT_BASE_NAME"]) | 150 | self.setEmptyVars(["QT_BASE_NAME"]) |
105 | self.parseExpression('echo "${QT_BASE_NAME}"') | 151 | self.parseExpression('echo "${QT_BASE_NAME}"') |
@@ -111,9 +157,9 @@ ${D}${libdir}/pkgconfig/*.pc | |||
111 | self.assertExecs(set(["sed"])) | 157 | self.assertExecs(set(["sed"])) |
112 | 158 | ||
113 | def test_parameter_expansion_modifiers(self): | 159 | def test_parameter_expansion_modifiers(self): |
114 | # - and + are also valid modifiers for parameter expansion, but are | 160 | # -,+ and : are also valid modifiers for parameter expansion, but are |
115 | # valid characters in bitbake variable names, so are not included here | 161 | # valid characters in bitbake variable names, so are not included here |
116 | for i in ('=', ':-', ':=', '?', ':?', ':+', '#', '%', '##', '%%'): | 162 | for i in ('=', '?', '#', '%', '##', '%%'): |
117 | name = "foo%sbar" % i | 163 | name = "foo%sbar" % i |
118 | self.parseExpression("${%s}" % name) | 164 | self.parseExpression("${%s}" % name) |
119 | self.assertNotIn(name, self.references) | 165 | self.assertNotIn(name, self.references) |
@@ -318,7 +364,7 @@ d.getVar(a(), False) | |||
318 | "filename": "example.bb", | 364 | "filename": "example.bb", |
319 | }) | 365 | }) |
320 | 366 | ||
321 | deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d) | 367 | deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d) |
322 | 368 | ||
323 | self.assertEqual(deps, set(["somevar", "bar", "something", "inexpand", "test", "test2", "a"])) | 369 | self.assertEqual(deps, set(["somevar", "bar", "something", "inexpand", "test", "test2", "a"])) |
324 | 370 | ||
@@ -365,7 +411,7 @@ esac | |||
365 | self.d.setVarFlags("FOO", {"func": True}) | 411 | self.d.setVarFlags("FOO", {"func": True}) |
366 | self.setEmptyVars(execs) | 412 | self.setEmptyVars(execs) |
367 | 413 | ||
368 | deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d) | 414 | deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d) |
369 | 415 | ||
370 | self.assertEqual(deps, set(["somevar", "inverted"] + execs)) | 416 | self.assertEqual(deps, set(["somevar", "inverted"] + execs)) |
371 | 417 | ||
@@ -375,7 +421,7 @@ esac | |||
375 | self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") | 421 | self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") |
376 | self.d.setVarFlag("FOO", "vardeps", "oe_libinstall") | 422 | self.d.setVarFlag("FOO", "vardeps", "oe_libinstall") |
377 | 423 | ||
378 | deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d) | 424 | deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d) |
379 | 425 | ||
380 | self.assertEqual(deps, set(["oe_libinstall"])) | 426 | self.assertEqual(deps, set(["oe_libinstall"])) |
381 | 427 | ||
@@ -384,7 +430,7 @@ esac | |||
384 | self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") | 430 | self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") |
385 | self.d.setVarFlag("FOO", "vardeps", "${@'oe_libinstall'}") | 431 | self.d.setVarFlag("FOO", "vardeps", "${@'oe_libinstall'}") |
386 | 432 | ||
387 | deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), self.d) | 433 | deps, values = bb.data.build_dependencies("FOO", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d) |
388 | 434 | ||
389 | self.assertEqual(deps, set(["oe_libinstall"])) | 435 | self.assertEqual(deps, set(["oe_libinstall"])) |
390 | 436 | ||
@@ -399,7 +445,7 @@ esac | |||
399 | # Check dependencies | 445 | # Check dependencies |
400 | self.d.setVar('ANOTHERVAR', expr) | 446 | self.d.setVar('ANOTHERVAR', expr) |
401 | self.d.setVar('TESTVAR', 'anothervalue testval testval2') | 447 | self.d.setVar('TESTVAR', 'anothervalue testval testval2') |
402 | deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), self.d) | 448 | 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()), | 449 | self.assertEqual(sorted(values.splitlines()), |
404 | sorted([expr, | 450 | sorted([expr, |
405 | 'TESTVAR{anothervalue} = Set', | 451 | 'TESTVAR{anothervalue} = Set', |
@@ -412,11 +458,55 @@ esac | |||
412 | # Check final value | 458 | # Check final value |
413 | self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['anothervalue', 'yetanothervalue', 'lastone']) | 459 | self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['anothervalue', 'yetanothervalue', 'lastone']) |
414 | 460 | ||
461 | def test_contains_vardeps_excluded(self): | ||
462 | # Check the ignored_vars option to build_dependencies is handled by contains functionality | ||
463 | varval = '${TESTVAR2} ${@bb.utils.filter("TESTVAR", "somevalue anothervalue", d)}' | ||
464 | self.d.setVar('ANOTHERVAR', varval) | ||
465 | self.d.setVar('TESTVAR', 'anothervalue testval testval2') | ||
466 | self.d.setVar('TESTVAR2', 'testval3') | ||
467 | deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), set(["TESTVAR"]), self.d, self.d) | ||
468 | self.assertEqual(sorted(values.splitlines()), sorted([varval])) | ||
469 | self.assertEqual(deps, set(["TESTVAR2"])) | ||
470 | self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue']) | ||
471 | |||
472 | # Check the vardepsexclude flag is handled by contains functionality | ||
473 | self.d.setVarFlag('ANOTHERVAR', 'vardepsexclude', 'TESTVAR') | ||
474 | deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d) | ||
475 | self.assertEqual(sorted(values.splitlines()), sorted([varval])) | ||
476 | self.assertEqual(deps, set(["TESTVAR2"])) | ||
477 | self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval3', 'anothervalue']) | ||
478 | |||
479 | def test_contains_vardeps_override_operators(self): | ||
480 | # Check override operators handle dependencies correctly with the contains functionality | ||
481 | expr_plain = 'testval' | ||
482 | expr_prepend = '${@bb.utils.filter("TESTVAR1", "testval1", d)} ' | ||
483 | expr_append = ' ${@bb.utils.filter("TESTVAR2", "testval2", d)}' | ||
484 | expr_remove = '${@bb.utils.contains("TESTVAR3", "no-testval", "testval", "", d)}' | ||
485 | # Check dependencies | ||
486 | self.d.setVar('ANOTHERVAR', expr_plain) | ||
487 | self.d.prependVar('ANOTHERVAR', expr_prepend) | ||
488 | self.d.appendVar('ANOTHERVAR', expr_append) | ||
489 | self.d.setVar('ANOTHERVAR:remove', expr_remove) | ||
490 | self.d.setVar('TESTVAR1', 'blah') | ||
491 | self.d.setVar('TESTVAR2', 'testval2') | ||
492 | self.d.setVar('TESTVAR3', 'no-testval') | ||
493 | deps, values = bb.data.build_dependencies("ANOTHERVAR", set(self.d.keys()), set(), set(), set(), set(), self.d, self.d) | ||
494 | self.assertEqual(sorted(values.splitlines()), | ||
495 | sorted([ | ||
496 | expr_prepend + expr_plain + expr_append, | ||
497 | '_remove of ' + expr_remove, | ||
498 | 'TESTVAR1{testval1} = Unset', | ||
499 | 'TESTVAR2{testval2} = Set', | ||
500 | 'TESTVAR3{no-testval} = Set', | ||
501 | ])) | ||
502 | # Check final value | ||
503 | self.assertEqual(self.d.getVar('ANOTHERVAR').split(), ['testval2']) | ||
504 | |||
415 | #Currently no wildcard support | 505 | #Currently no wildcard support |
416 | #def test_vardeps_wildcards(self): | 506 | #def test_vardeps_wildcards(self): |
417 | # self.d.setVar("oe_libinstall", "echo test") | 507 | # self.d.setVar("oe_libinstall", "echo test") |
418 | # self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") | 508 | # self.d.setVar("FOO", "foo=oe_libinstall; eval $foo") |
419 | # self.d.setVarFlag("FOO", "vardeps", "oe_*") | 509 | # self.d.setVarFlag("FOO", "vardeps", "oe_*") |
420 | # self.assertEquals(deps, set(["oe_libinstall"])) | 510 | # self.assertEqual(deps, set(["oe_libinstall"])) |
421 | 511 | ||
422 | 512 | ||