diff options
Diffstat (limited to 'bitbake/lib/bb/tests/data.py')
-rw-r--r-- | bitbake/lib/bb/tests/data.py | 132 |
1 files changed, 79 insertions, 53 deletions
diff --git a/bitbake/lib/bb/tests/data.py b/bitbake/lib/bb/tests/data.py index 1d4a64b109..cbc7c1ecd4 100644 --- a/bitbake/lib/bb/tests/data.py +++ b/bitbake/lib/bb/tests/data.py | |||
@@ -60,6 +60,15 @@ class DataExpansions(unittest.TestCase): | |||
60 | val = self.d.expand("${@5*12}") | 60 | val = self.d.expand("${@5*12}") |
61 | self.assertEqual(str(val), "60") | 61 | self.assertEqual(str(val), "60") |
62 | 62 | ||
63 | def test_python_snippet_w_dict(self): | ||
64 | val = self.d.expand("${@{ 'green': 1, 'blue': 2 }['green']}") | ||
65 | self.assertEqual(str(val), "1") | ||
66 | |||
67 | def test_python_unexpanded_multi(self): | ||
68 | self.d.setVar("bar", "${unsetvar}") | ||
69 | val = self.d.expand("${@2*2},${foo},${@d.getVar('foo') + ' ${bar}'},${foo}") | ||
70 | self.assertEqual(str(val), "4,value_of_foo,${@d.getVar('foo') + ' ${unsetvar}'},value_of_foo") | ||
71 | |||
63 | def test_expand_in_python_snippet(self): | 72 | def test_expand_in_python_snippet(self): |
64 | val = self.d.expand("${@'boo ' + '${foo}'}") | 73 | val = self.d.expand("${@'boo ' + '${foo}'}") |
65 | self.assertEqual(str(val), "boo value_of_foo") | 74 | self.assertEqual(str(val), "boo value_of_foo") |
@@ -68,6 +77,18 @@ class DataExpansions(unittest.TestCase): | |||
68 | val = self.d.expand("${@d.getVar('foo') + ' ${bar}'}") | 77 | val = self.d.expand("${@d.getVar('foo') + ' ${bar}'}") |
69 | self.assertEqual(str(val), "value_of_foo value_of_bar") | 78 | self.assertEqual(str(val), "value_of_foo value_of_bar") |
70 | 79 | ||
80 | def test_python_snippet_function_reference(self): | ||
81 | self.d.setVar("TESTVAL", "testvalue") | ||
82 | self.d.setVar("testfunc", 'd.getVar("TESTVAL")') | ||
83 | context = bb.utils.get_context() | ||
84 | context["testfunc"] = lambda d: d.getVar("TESTVAL") | ||
85 | val = self.d.expand("${@testfunc(d)}") | ||
86 | self.assertEqual(str(val), "testvalue") | ||
87 | |||
88 | def test_python_snippet_builtin_metadata(self): | ||
89 | self.d.setVar("eval", "INVALID") | ||
90 | self.d.expand("${@eval('3')}") | ||
91 | |||
71 | def test_python_unexpanded(self): | 92 | def test_python_unexpanded(self): |
72 | self.d.setVar("bar", "${unsetvar}") | 93 | self.d.setVar("bar", "${unsetvar}") |
73 | val = self.d.expand("${@d.getVar('foo') + ' ${bar}'}") | 94 | val = self.d.expand("${@d.getVar('foo') + ' ${bar}'}") |
@@ -245,35 +266,35 @@ class TestConcatOverride(unittest.TestCase): | |||
245 | 266 | ||
246 | def test_prepend(self): | 267 | def test_prepend(self): |
247 | self.d.setVar("TEST", "${VAL}") | 268 | self.d.setVar("TEST", "${VAL}") |
248 | self.d.setVar("TEST_prepend", "${FOO}:") | 269 | self.d.setVar("TEST:prepend", "${FOO}:") |
249 | self.assertEqual(self.d.getVar("TEST"), "foo:val") | 270 | self.assertEqual(self.d.getVar("TEST"), "foo:val") |
250 | 271 | ||
251 | def test_append(self): | 272 | def test_append(self): |
252 | self.d.setVar("TEST", "${VAL}") | 273 | self.d.setVar("TEST", "${VAL}") |
253 | self.d.setVar("TEST_append", ":${BAR}") | 274 | self.d.setVar("TEST:append", ":${BAR}") |
254 | self.assertEqual(self.d.getVar("TEST"), "val:bar") | 275 | self.assertEqual(self.d.getVar("TEST"), "val:bar") |
255 | 276 | ||
256 | def test_multiple_append(self): | 277 | def test_multiple_append(self): |
257 | self.d.setVar("TEST", "${VAL}") | 278 | self.d.setVar("TEST", "${VAL}") |
258 | self.d.setVar("TEST_prepend", "${FOO}:") | 279 | self.d.setVar("TEST:prepend", "${FOO}:") |
259 | self.d.setVar("TEST_append", ":val2") | 280 | self.d.setVar("TEST:append", ":val2") |
260 | self.d.setVar("TEST_append", ":${BAR}") | 281 | self.d.setVar("TEST:append", ":${BAR}") |
261 | self.assertEqual(self.d.getVar("TEST"), "foo:val:val2:bar") | 282 | self.assertEqual(self.d.getVar("TEST"), "foo:val:val2:bar") |
262 | 283 | ||
263 | def test_append_unset(self): | 284 | def test_append_unset(self): |
264 | self.d.setVar("TEST_prepend", "${FOO}:") | 285 | self.d.setVar("TEST:prepend", "${FOO}:") |
265 | self.d.setVar("TEST_append", ":val2") | 286 | self.d.setVar("TEST:append", ":val2") |
266 | self.d.setVar("TEST_append", ":${BAR}") | 287 | self.d.setVar("TEST:append", ":${BAR}") |
267 | self.assertEqual(self.d.getVar("TEST"), "foo::val2:bar") | 288 | self.assertEqual(self.d.getVar("TEST"), "foo::val2:bar") |
268 | 289 | ||
269 | def test_remove(self): | 290 | def test_remove(self): |
270 | self.d.setVar("TEST", "${VAL} ${BAR}") | 291 | self.d.setVar("TEST", "${VAL} ${BAR}") |
271 | self.d.setVar("TEST_remove", "val") | 292 | self.d.setVar("TEST:remove", "val") |
272 | self.assertEqual(self.d.getVar("TEST"), " bar") | 293 | self.assertEqual(self.d.getVar("TEST"), " bar") |
273 | 294 | ||
274 | def test_remove_cleared(self): | 295 | def test_remove_cleared(self): |
275 | self.d.setVar("TEST", "${VAL} ${BAR}") | 296 | self.d.setVar("TEST", "${VAL} ${BAR}") |
276 | self.d.setVar("TEST_remove", "val") | 297 | self.d.setVar("TEST:remove", "val") |
277 | self.d.setVar("TEST", "${VAL} ${BAR}") | 298 | self.d.setVar("TEST", "${VAL} ${BAR}") |
278 | self.assertEqual(self.d.getVar("TEST"), "val bar") | 299 | self.assertEqual(self.d.getVar("TEST"), "val bar") |
279 | 300 | ||
@@ -281,42 +302,42 @@ class TestConcatOverride(unittest.TestCase): | |||
281 | # (including that whitespace is preserved) | 302 | # (including that whitespace is preserved) |
282 | def test_remove_inactive_override(self): | 303 | def test_remove_inactive_override(self): |
283 | self.d.setVar("TEST", "${VAL} ${BAR} 123") | 304 | self.d.setVar("TEST", "${VAL} ${BAR} 123") |
284 | self.d.setVar("TEST_remove_inactiveoverride", "val") | 305 | self.d.setVar("TEST:remove:inactiveoverride", "val") |
285 | self.assertEqual(self.d.getVar("TEST"), "val bar 123") | 306 | self.assertEqual(self.d.getVar("TEST"), "val bar 123") |
286 | 307 | ||
287 | def test_doubleref_remove(self): | 308 | def test_doubleref_remove(self): |
288 | self.d.setVar("TEST", "${VAL} ${BAR}") | 309 | self.d.setVar("TEST", "${VAL} ${BAR}") |
289 | self.d.setVar("TEST_remove", "val") | 310 | self.d.setVar("TEST:remove", "val") |
290 | self.d.setVar("TEST_TEST", "${TEST} ${TEST}") | 311 | self.d.setVar("TEST_TEST", "${TEST} ${TEST}") |
291 | self.assertEqual(self.d.getVar("TEST_TEST"), " bar bar") | 312 | self.assertEqual(self.d.getVar("TEST_TEST"), " bar bar") |
292 | 313 | ||
293 | def test_empty_remove(self): | 314 | def test_empty_remove(self): |
294 | self.d.setVar("TEST", "") | 315 | self.d.setVar("TEST", "") |
295 | self.d.setVar("TEST_remove", "val") | 316 | self.d.setVar("TEST:remove", "val") |
296 | self.assertEqual(self.d.getVar("TEST"), "") | 317 | self.assertEqual(self.d.getVar("TEST"), "") |
297 | 318 | ||
298 | def test_remove_expansion(self): | 319 | def test_remove_expansion(self): |
299 | self.d.setVar("BAR", "Z") | 320 | self.d.setVar("BAR", "Z") |
300 | self.d.setVar("TEST", "${BAR}/X Y") | 321 | self.d.setVar("TEST", "${BAR}/X Y") |
301 | self.d.setVar("TEST_remove", "${BAR}/X") | 322 | self.d.setVar("TEST:remove", "${BAR}/X") |
302 | self.assertEqual(self.d.getVar("TEST"), " Y") | 323 | self.assertEqual(self.d.getVar("TEST"), " Y") |
303 | 324 | ||
304 | def test_remove_expansion_items(self): | 325 | def test_remove_expansion_items(self): |
305 | self.d.setVar("TEST", "A B C D") | 326 | self.d.setVar("TEST", "A B C D") |
306 | self.d.setVar("BAR", "B D") | 327 | self.d.setVar("BAR", "B D") |
307 | self.d.setVar("TEST_remove", "${BAR}") | 328 | self.d.setVar("TEST:remove", "${BAR}") |
308 | self.assertEqual(self.d.getVar("TEST"), "A C ") | 329 | self.assertEqual(self.d.getVar("TEST"), "A C ") |
309 | 330 | ||
310 | def test_remove_preserve_whitespace(self): | 331 | def test_remove_preserve_whitespace(self): |
311 | # When the removal isn't active, the original value should be preserved | 332 | # When the removal isn't active, the original value should be preserved |
312 | self.d.setVar("TEST", " A B") | 333 | self.d.setVar("TEST", " A B") |
313 | self.d.setVar("TEST_remove", "C") | 334 | self.d.setVar("TEST:remove", "C") |
314 | self.assertEqual(self.d.getVar("TEST"), " A B") | 335 | self.assertEqual(self.d.getVar("TEST"), " A B") |
315 | 336 | ||
316 | def test_remove_preserve_whitespace2(self): | 337 | def test_remove_preserve_whitespace2(self): |
317 | # When the removal is active preserve the whitespace | 338 | # When the removal is active preserve the whitespace |
318 | self.d.setVar("TEST", " A B") | 339 | self.d.setVar("TEST", " A B") |
319 | self.d.setVar("TEST_remove", "B") | 340 | self.d.setVar("TEST:remove", "B") |
320 | self.assertEqual(self.d.getVar("TEST"), " A ") | 341 | self.assertEqual(self.d.getVar("TEST"), " A ") |
321 | 342 | ||
322 | class TestOverrides(unittest.TestCase): | 343 | class TestOverrides(unittest.TestCase): |
@@ -329,81 +350,86 @@ class TestOverrides(unittest.TestCase): | |||
329 | self.assertEqual(self.d.getVar("TEST"), "testvalue") | 350 | self.assertEqual(self.d.getVar("TEST"), "testvalue") |
330 | 351 | ||
331 | def test_one_override(self): | 352 | def test_one_override(self): |
332 | self.d.setVar("TEST_bar", "testvalue2") | 353 | self.d.setVar("TEST:bar", "testvalue2") |
333 | self.assertEqual(self.d.getVar("TEST"), "testvalue2") | 354 | self.assertEqual(self.d.getVar("TEST"), "testvalue2") |
334 | 355 | ||
335 | def test_one_override_unset(self): | 356 | def test_one_override_unset(self): |
336 | self.d.setVar("TEST2_bar", "testvalue2") | 357 | self.d.setVar("TEST2:bar", "testvalue2") |
337 | 358 | ||
338 | self.assertEqual(self.d.getVar("TEST2"), "testvalue2") | 359 | self.assertEqual(self.d.getVar("TEST2"), "testvalue2") |
339 | self.assertCountEqual(list(self.d.keys()), ['TEST', 'TEST2', 'OVERRIDES', 'TEST2_bar']) | 360 | self.assertCountEqual(list(self.d.keys()), ['TEST', 'TEST2', 'OVERRIDES', 'TEST2:bar']) |
340 | 361 | ||
341 | def test_multiple_override(self): | 362 | def test_multiple_override(self): |
342 | self.d.setVar("TEST_bar", "testvalue2") | 363 | self.d.setVar("TEST:bar", "testvalue2") |
343 | self.d.setVar("TEST_local", "testvalue3") | 364 | self.d.setVar("TEST:local", "testvalue3") |
344 | self.d.setVar("TEST_foo", "testvalue4") | 365 | self.d.setVar("TEST:foo", "testvalue4") |
345 | self.assertEqual(self.d.getVar("TEST"), "testvalue3") | 366 | self.assertEqual(self.d.getVar("TEST"), "testvalue3") |
346 | self.assertCountEqual(list(self.d.keys()), ['TEST', 'TEST_foo', 'OVERRIDES', 'TEST_bar', 'TEST_local']) | 367 | self.assertCountEqual(list(self.d.keys()), ['TEST', 'TEST:foo', 'OVERRIDES', 'TEST:bar', 'TEST:local']) |
347 | 368 | ||
348 | def test_multiple_combined_overrides(self): | 369 | def test_multiple_combined_overrides(self): |
349 | self.d.setVar("TEST_local_foo_bar", "testvalue3") | 370 | self.d.setVar("TEST:local:foo:bar", "testvalue3") |
350 | self.assertEqual(self.d.getVar("TEST"), "testvalue3") | 371 | self.assertEqual(self.d.getVar("TEST"), "testvalue3") |
351 | 372 | ||
352 | def test_multiple_overrides_unset(self): | 373 | def test_multiple_overrides_unset(self): |
353 | self.d.setVar("TEST2_local_foo_bar", "testvalue3") | 374 | self.d.setVar("TEST2:local:foo:bar", "testvalue3") |
354 | self.assertEqual(self.d.getVar("TEST2"), "testvalue3") | 375 | self.assertEqual(self.d.getVar("TEST2"), "testvalue3") |
355 | 376 | ||
356 | def test_keyexpansion_override(self): | 377 | def test_keyexpansion_override(self): |
357 | self.d.setVar("LOCAL", "local") | 378 | self.d.setVar("LOCAL", "local") |
358 | self.d.setVar("TEST_bar", "testvalue2") | 379 | self.d.setVar("TEST:bar", "testvalue2") |
359 | self.d.setVar("TEST_${LOCAL}", "testvalue3") | 380 | self.d.setVar("TEST:${LOCAL}", "testvalue3") |
360 | self.d.setVar("TEST_foo", "testvalue4") | 381 | self.d.setVar("TEST:foo", "testvalue4") |
361 | bb.data.expandKeys(self.d) | 382 | bb.data.expandKeys(self.d) |
362 | self.assertEqual(self.d.getVar("TEST"), "testvalue3") | 383 | self.assertEqual(self.d.getVar("TEST"), "testvalue3") |
363 | 384 | ||
364 | def test_rename_override(self): | 385 | def test_rename_override(self): |
365 | self.d.setVar("ALTERNATIVE_ncurses-tools_class-target", "a") | 386 | self.d.setVar("ALTERNATIVE:ncurses-tools:class-target", "a") |
366 | self.d.setVar("OVERRIDES", "class-target") | 387 | self.d.setVar("OVERRIDES", "class-target") |
367 | self.d.renameVar("ALTERNATIVE_ncurses-tools", "ALTERNATIVE_lib32-ncurses-tools") | 388 | self.d.renameVar("ALTERNATIVE:ncurses-tools", "ALTERNATIVE:lib32-ncurses-tools") |
368 | self.assertEqual(self.d.getVar("ALTERNATIVE_lib32-ncurses-tools"), "a") | 389 | self.assertEqual(self.d.getVar("ALTERNATIVE:lib32-ncurses-tools"), "a") |
369 | 390 | ||
370 | def test_underscore_override(self): | 391 | def test_underscore_override(self): |
371 | self.d.setVar("TEST_bar", "testvalue2") | 392 | self.d.setVar("TEST:bar", "testvalue2") |
372 | self.d.setVar("TEST_some_val", "testvalue3") | 393 | self.d.setVar("TEST:some_val", "testvalue3") |
373 | self.d.setVar("TEST_foo", "testvalue4") | 394 | self.d.setVar("TEST:foo", "testvalue4") |
374 | self.d.setVar("OVERRIDES", "foo:bar:some_val") | 395 | self.d.setVar("OVERRIDES", "foo:bar:some_val") |
375 | self.assertEqual(self.d.getVar("TEST"), "testvalue3") | 396 | self.assertEqual(self.d.getVar("TEST"), "testvalue3") |
376 | 397 | ||
398 | # Test an override with _<numeric> in it based on a real world OE issue | ||
399 | def test_underscore_override_2(self): | ||
400 | self.d.setVar("TARGET_ARCH", "x86_64") | ||
401 | self.d.setVar("PN", "test-${TARGET_ARCH}") | ||
402 | self.d.setVar("VERSION", "1") | ||
403 | self.d.setVar("VERSION:pn-test-${TARGET_ARCH}", "2") | ||
404 | self.d.setVar("OVERRIDES", "pn-${PN}") | ||
405 | bb.data.expandKeys(self.d) | ||
406 | self.assertEqual(self.d.getVar("VERSION"), "2") | ||
407 | |||
377 | def test_remove_with_override(self): | 408 | def test_remove_with_override(self): |
378 | self.d.setVar("TEST_bar", "testvalue2") | 409 | self.d.setVar("TEST:bar", "testvalue2") |
379 | self.d.setVar("TEST_some_val", "testvalue3 testvalue5") | 410 | self.d.setVar("TEST:some_val", "testvalue3 testvalue5") |
380 | self.d.setVar("TEST_some_val_remove", "testvalue3") | 411 | self.d.setVar("TEST:some_val:remove", "testvalue3") |
381 | self.d.setVar("TEST_foo", "testvalue4") | 412 | self.d.setVar("TEST:foo", "testvalue4") |
382 | self.d.setVar("OVERRIDES", "foo:bar:some_val") | 413 | self.d.setVar("OVERRIDES", "foo:bar:some_val") |
383 | self.assertEqual(self.d.getVar("TEST"), " testvalue5") | 414 | self.assertEqual(self.d.getVar("TEST"), " testvalue5") |
384 | 415 | ||
385 | def test_append_and_override_1(self): | 416 | def test_append_and_override_1(self): |
386 | self.d.setVar("TEST_append", "testvalue2") | 417 | self.d.setVar("TEST:append", "testvalue2") |
387 | self.d.setVar("TEST_bar", "testvalue3") | 418 | self.d.setVar("TEST:bar", "testvalue3") |
388 | self.assertEqual(self.d.getVar("TEST"), "testvalue3testvalue2") | 419 | self.assertEqual(self.d.getVar("TEST"), "testvalue3testvalue2") |
389 | 420 | ||
390 | def test_append_and_override_2(self): | 421 | def test_append_and_override_2(self): |
391 | self.d.setVar("TEST_append_bar", "testvalue2") | 422 | self.d.setVar("TEST:append:bar", "testvalue2") |
392 | self.assertEqual(self.d.getVar("TEST"), "testvaluetestvalue2") | 423 | self.assertEqual(self.d.getVar("TEST"), "testvaluetestvalue2") |
393 | 424 | ||
394 | def test_append_and_override_3(self): | 425 | def test_append_and_override_3(self): |
395 | self.d.setVar("TEST_bar_append", "testvalue2") | 426 | self.d.setVar("TEST:bar:append", "testvalue2") |
396 | self.assertEqual(self.d.getVar("TEST"), "testvalue2") | 427 | self.assertEqual(self.d.getVar("TEST"), "testvalue2") |
397 | 428 | ||
398 | # Test an override with _<numeric> in it based on a real world OE issue | 429 | def test_append_and_unused_override(self): |
399 | def test_underscore_override(self): | 430 | # Had a bug where an unused override append could return "" instead of None |
400 | self.d.setVar("TARGET_ARCH", "x86_64") | 431 | self.d.setVar("BAR:append:unusedoverride", "testvalue2") |
401 | self.d.setVar("PN", "test-${TARGET_ARCH}") | 432 | self.assertEqual(self.d.getVar("BAR"), None) |
402 | self.d.setVar("VERSION", "1") | ||
403 | self.d.setVar("VERSION_pn-test-${TARGET_ARCH}", "2") | ||
404 | self.d.setVar("OVERRIDES", "pn-${PN}") | ||
405 | bb.data.expandKeys(self.d) | ||
406 | self.assertEqual(self.d.getVar("VERSION"), "2") | ||
407 | 433 | ||
408 | class TestKeyExpansion(unittest.TestCase): | 434 | class TestKeyExpansion(unittest.TestCase): |
409 | def setUp(self): | 435 | def setUp(self): |
@@ -498,7 +524,7 @@ class TaskHash(unittest.TestCase): | |||
498 | d.setVar("VAR", "val") | 524 | d.setVar("VAR", "val") |
499 | # Adding an inactive removal shouldn't change the hash | 525 | # Adding an inactive removal shouldn't change the hash |
500 | d.setVar("BAR", "notbar") | 526 | d.setVar("BAR", "notbar") |
501 | d.setVar("MYCOMMAND_remove", "${BAR}") | 527 | d.setVar("MYCOMMAND:remove", "${BAR}") |
502 | nexthash = gettask_bashhash("mytask", d) | 528 | nexthash = gettask_bashhash("mytask", d) |
503 | self.assertEqual(orighash, nexthash) | 529 | self.assertEqual(orighash, nexthash) |
504 | 530 | ||