diff options
| author | Joshua Watt <JPEWhacker@gmail.com> | 2022-12-15 15:07:16 -0600 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-08-12 10:05:11 +0100 |
| commit | 6fcda5cecd50e4d65c659c773f17648f7b1e06b7 (patch) | |
| tree | 50a4c05a6613727572e4ad0b21ed0569902049ba /bitbake/lib/bb/tests | |
| parent | 2a3ec280604e97cce0c4fcdaba2cc54e249c89e8 (diff) | |
| download | poky-6fcda5cecd50e4d65c659c773f17648f7b1e06b7.tar.gz | |
bitbake: lib/bb: Add filter support
Add the python API for applying filters to a string and being able to
register functions as filters.
Filter functions are pure functions where an input is translated into
an output and there are no external data accesses. This means translations
can be cached as they won't change.
(Bitbake rev: 7d25d7511ca14213eea78ee739d260295cfa4045)
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/tests')
| -rw-r--r-- | bitbake/lib/bb/tests/filter.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/bitbake/lib/bb/tests/filter.py b/bitbake/lib/bb/tests/filter.py new file mode 100644 index 0000000000..245df7b22b --- /dev/null +++ b/bitbake/lib/bb/tests/filter.py | |||
| @@ -0,0 +1,88 @@ | |||
| 1 | # | ||
| 2 | # Copyright (C) 2025 Garmin Ltd. or its subsidiaries | ||
| 3 | # | ||
| 4 | # SPDX-License-Identifier: GPL-2.0-only | ||
| 5 | # | ||
| 6 | |||
| 7 | import unittest | ||
| 8 | import bb.filter | ||
| 9 | |||
| 10 | |||
| 11 | class BuiltinFilterTest(unittest.TestCase): | ||
| 12 | def test_disallowed_builtins(self): | ||
| 13 | with self.assertRaises(NameError): | ||
| 14 | val = bb.filter.apply_filters("1", ["open('foo.txt', 'rb')"]) | ||
| 15 | |||
| 16 | def test_prefix(self): | ||
| 17 | val = bb.filter.apply_filters("1 2 3", ["prefix(val, 'a')"]) | ||
| 18 | self.assertEqual(val, "a1 a2 a3") | ||
| 19 | |||
| 20 | val = bb.filter.apply_filters("", ["prefix(val, 'a')"]) | ||
| 21 | self.assertEqual(val, "") | ||
| 22 | |||
| 23 | def test_suffix(self): | ||
| 24 | val = bb.filter.apply_filters("1 2 3", ["suffix(val, 'b')"]) | ||
| 25 | self.assertEqual(val, "1b 2b 3b") | ||
| 26 | |||
| 27 | val = bb.filter.apply_filters("", ["suffix(val, 'b')"]) | ||
| 28 | self.assertEqual(val, "") | ||
| 29 | |||
| 30 | def test_sort(self): | ||
| 31 | val = bb.filter.apply_filters("z y x", ["sort(val)"]) | ||
| 32 | self.assertEqual(val, "x y z") | ||
| 33 | |||
| 34 | val = bb.filter.apply_filters("", ["sort(val)"]) | ||
| 35 | self.assertEqual(val, "") | ||
| 36 | |||
| 37 | def test_identity(self): | ||
| 38 | val = bb.filter.apply_filters("1 2 3", ["val"]) | ||
| 39 | self.assertEqual(val, "1 2 3") | ||
| 40 | |||
| 41 | val = bb.filter.apply_filters("123", ["val"]) | ||
| 42 | self.assertEqual(val, "123") | ||
| 43 | |||
| 44 | def test_empty(self): | ||
| 45 | val = bb.filter.apply_filters("1 2 3", ["", "prefix(val, 'a')", ""]) | ||
| 46 | self.assertEqual(val, "a1 a2 a3") | ||
| 47 | |||
| 48 | def test_nested(self): | ||
| 49 | val = bb.filter.apply_filters("1 2 3", ["prefix(prefix(val, 'a'), 'b')"]) | ||
| 50 | self.assertEqual(val, "ba1 ba2 ba3") | ||
| 51 | |||
| 52 | val = bb.filter.apply_filters("1 2 3", ["prefix(prefix(val, 'b'), 'a')"]) | ||
| 53 | self.assertEqual(val, "ab1 ab2 ab3") | ||
| 54 | |||
| 55 | def test_filter_order(self): | ||
| 56 | val = bb.filter.apply_filters("1 2 3", ["prefix(val, 'a')", "prefix(val, 'b')"]) | ||
| 57 | self.assertEqual(val, "ba1 ba2 ba3") | ||
| 58 | |||
| 59 | val = bb.filter.apply_filters("1 2 3", ["prefix(val, 'b')", "prefix(val, 'a')"]) | ||
| 60 | self.assertEqual(val, "ab1 ab2 ab3") | ||
| 61 | |||
| 62 | val = bb.filter.apply_filters("1 2 3", ["prefix(val, 'a')", "suffix(val, 'b')"]) | ||
| 63 | self.assertEqual(val, "a1b a2b a3b") | ||
| 64 | |||
| 65 | val = bb.filter.apply_filters("1 2 3", ["suffix(val, 'b')", "prefix(val, 'a')"]) | ||
| 66 | self.assertEqual(val, "a1b a2b a3b") | ||
| 67 | |||
| 68 | def test_remove(self): | ||
| 69 | val = bb.filter.apply_filters("1 2 3", ["remove(val, ['2'])"]) | ||
| 70 | self.assertEqual(val, "1 3") | ||
| 71 | |||
| 72 | val = bb.filter.apply_filters("1,2,3", ["remove(val, ['2'], ',')"]) | ||
| 73 | self.assertEqual(val, "1,3") | ||
| 74 | |||
| 75 | val = bb.filter.apply_filters("1 2 3", ["remove(val, ['4'])"]) | ||
| 76 | self.assertEqual(val, "1 2 3") | ||
| 77 | |||
| 78 | val = bb.filter.apply_filters("1 2 3", ["remove(val, ['1', '2'])"]) | ||
| 79 | self.assertEqual(val, "3") | ||
| 80 | |||
| 81 | val = bb.filter.apply_filters("1 2 3", ["remove(val, '2')"]) | ||
| 82 | self.assertEqual(val, "1 3") | ||
| 83 | |||
| 84 | val = bb.filter.apply_filters("1 2 3", ["remove(val, '4')"]) | ||
| 85 | self.assertEqual(val, "1 2 3") | ||
| 86 | |||
| 87 | val = bb.filter.apply_filters("1 2 3", ["remove(val, '1 2')"]) | ||
| 88 | self.assertEqual(val, "3") | ||
