@@ -32,6 +32,7 @@ tests = ["bb.tests.codeparser",
"bb.tests.data",
"bb.tests.event",
"bb.tests.fetch",
+ "bb.tests.fetch_import",
"bb.tests.parse",
"bb.tests.runqueue",
"bb.tests.setup",
new file mode 100644
@@ -0,0 +1,64 @@
+#
+# Copyright (C) 2026 Agilent Technologies, Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import os
+import subprocess
+import sys
+import unittest
+
+
+class FetchImportTests(unittest.TestCase):
+ def run_python(self, code):
+ env = os.environ.copy()
+ libdir = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", ".."))
+ env["PYTHONPATH"] = os.pathsep.join(filter(None, (libdir, env.get("PYTHONPATH"))))
+ result = subprocess.run(
+ [sys.executable, "-c", code],
+ env=env,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ text=True,
+ )
+ self.assertEqual(result.returncode, 0, result.stderr)
+
+ def test_fetch_is_lazy(self):
+ self.run_python("""
+import sys
+import bb
+
+assert "bb.fetch" not in sys.modules
+assert "bb.fetch2" not in sys.modules
+""")
+
+ def test_fetch_import(self):
+ self.run_python("""
+import sys
+import bb.fetch
+from bb.fetch import Fetch
+
+assert sys.modules["bb.fetch"] is bb.fetch
+assert Fetch is bb.fetch.Fetch
+""")
+
+ def test_fetch2_import_compatibility(self):
+ self.run_python("""
+import sys
+import warnings
+
+with warnings.catch_warnings(record=True) as caught:
+ warnings.simplefilter("always")
+ import bb.fetch2
+ from bb.fetch2 import Fetch
+
+assert len(caught) == 1
+assert caught[0].category is DeprecationWarning
+assert str(caught[0].message) == "bb.fetch2 is deprecated; use bb.fetch instead"
+assert caught[0].filename == "<string>"
+
+assert bb.fetch2 is bb.fetch
+assert sys.modules["bb.fetch2"] is bb.fetch
+assert Fetch is bb.fetch.Fetch
+""")
\ No newline at end of file