summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/tests
diff options
context:
space:
mode:
authorJoshua Watt <JPEWhacker@gmail.com>2022-12-15 15:07:16 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2025-08-12 10:05:11 +0100
commit6fcda5cecd50e4d65c659c773f17648f7b1e06b7 (patch)
tree50a4c05a6613727572e4ad0b21ed0569902049ba /bitbake/lib/bb/tests
parent2a3ec280604e97cce0c4fcdaba2cc54e249c89e8 (diff)
downloadpoky-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.py88
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
7import unittest
8import bb.filter
9
10
11class 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")