diff mbox series

[2/2] tests: data: Add tests on emitting environment variables

Message ID 20251114-mathieu-back_quote_devshell-v1-2-45e83df2f362@bootlin.com
State New
Headers show
Series data: Escape back quotes in environment | expand

Commit Message

Mathieu Dubois-Briand Nov. 14, 2025, 1:27 p.m. UTC
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
---
 lib/bb/tests/data.py | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 105 insertions(+)
diff mbox series

Patch

diff --git a/lib/bb/tests/data.py b/lib/bb/tests/data.py
index a895f6a58efb..fd690a9e24fb 100644
--- a/lib/bb/tests/data.py
+++ b/lib/bb/tests/data.py
@@ -11,6 +11,7 @@  import unittest
 import bb
 import bb.data
 import bb.parse
+import io
 import logging
 import os
 
@@ -617,4 +618,108 @@  class Serialize(unittest.TestCase):
         self.assertEqual(newd.getVar('HELLO'), 'world')
         self.assertEqual(newd.getVarFlag('HELLO', 'other'), 'planet')
 
+class EmitVar(unittest.TestCase):
+    def setUp(self):
+        self.d = bb.data.init()
+
+        self.d.setVar("foo", "value of foo")
+
+        self.d.setVar("foo_exported", "value of foo_exported")
+        self.d.setVarFlag("foo_exported", "export", "1")
+
+        self.d.setVar("foo_unexported", "value of foo_unexported")
+        self.d.setVarFlag("foo_unexported", "unexport", "1")
+
+        self.d.setVar("test_func", "echo test_func_l1\necho test_func_l2")
+        self.d.setVarFlag("test_func", "func", "1")
+
+        self.d.setVar("bad_chars", 'a"b\nc`d\ne$f')
+
+    @staticmethod
+    def get_output(out):
+        lines = [line for line in out.getvalue().splitlines()
+                 if len(line) == 0 or line[0] != '#'
+                 ]
+        out.truncate(0)
+        out.seek(0)
+        return lines
+
+    def test_simple_variable(self):
+        out = io.StringIO()
+
+        bb.data.emit_var('foo', out, self.d, all=True)
+        self.assertEqual(self.get_output(out), ['foo="value of foo"'])
+
+    def test_exported(self):
+        out = io.StringIO()
+
+        bb.data.emit_var('foo_exported', out, self.d)
+        self.assertEqual(self.get_output(out),
+                         ['export foo_exported="value of foo_exported"'])
+
+    def test_unexported(self):
+        out = io.StringIO()
+
+        bb.data.emit_var('foo_unexported', out, self.d)
+        self.assertEqual(self.get_output(out), ['unset foo_unexported'])
+
+    def test_function(self):
+        out = io.StringIO()
+
+        bb.data.emit_var('test_func', out, self.d)
+        self.assertEqual(self.get_output(out), ['test_func() {',
+                                                'echo test_func_l1',
+                                                'echo test_func_l2',
+                                                '}'])
+
+    def test_all(self):
+        out = io.StringIO()
+
+        bb.data.emit_var('foo', out, self.d, all=True)
+        self.assertEqual(self.get_output(out), ['foo="value of foo"'])
+
+        bb.data.emit_var('foo_exported', out, self.d, all=True)
+        self.assertEqual(self.get_output(out),
+                         ['export foo_exported="value of foo_exported"'])
+        bb.data.emit_var('foo_unexported', out, self.d, all=True)
+
+        self.assertEqual(self.get_output(out), ['unset foo_unexported'])
+
+        bb.data.emit_var('test_func', out, self.d, all=True)
+        self.assertEqual(self.get_output(out), ['test_func() {',
+                                                'echo test_func_l1',
+                                                'echo test_func_l2',
+                                                '}'])
+
+    def test_not_all(self):
+        out = io.StringIO()
+
+        bb.data.emit_var('foo', out, self.d)
+        self.assertEqual(self.get_output(out), [])
+
+        bb.data.emit_var('foo_exported', out, self.d)
+        self.assertEqual(self.get_output(out),
+                         ['export foo_exported="value of foo_exported"'])
+
+        bb.data.emit_var('foo_unexported', out, self.d)
+        self.assertEqual(self.get_output(out), ['unset foo_unexported'])
+
+        bb.data.emit_var('test_func', out, self.d)
+        self.assertEqual(self.get_output(out), ['test_func() {',
+                                                'echo test_func_l1',
+                                                'echo test_func_l2',
+                                                '}'])
+
+    def test_not_set(self):
+        out = io.StringIO()
+
+        bb.data.emit_var('random_name', out, self.d)
+        self.assertEqual(self.get_output(out), [])
+
+    def test_bad_chars(self):
+        out = io.StringIO()
 
+        bb.data.emit_var('bad_chars', out, self.d, all=True)
+        self.assertEqual(self.get_output(out), ['bad_chars="a\\"b \\',
+                                                'c\\`d \\',
+                                                'e\\$f"'])