summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/pkgutil.rst6
-rw-r--r--Lib/test/test_pkgutil.py38
-rw-r--r--Misc/NEWS.d/next/Tests/2024-07-13-11-48-20.gh-issue-59022.fYNbQ8.rst1
3 files changed, 41 insertions, 4 deletions
diff --git a/Doc/library/pkgutil.rst b/Doc/library/pkgutil.rst
index 5d4ff34..f095cc8 100644
--- a/Doc/library/pkgutil.rst
+++ b/Doc/library/pkgutil.rst
@@ -34,9 +34,9 @@ support.
*name* argument. This feature is similar to :file:`\*.pth` files (see the
:mod:`site` module for more information), except that it doesn't special-case
lines starting with ``import``. A :file:`\*.pkg` file is trusted at face
- value: apart from checking for duplicates, all entries found in a
- :file:`\*.pkg` file are added to the path, regardless of whether they exist
- on the filesystem. (This is a feature.)
+ value: apart from skipping blank lines and ignoring comments, all entries
+ found in a :file:`\*.pkg` file are added to the path, regardless of whether
+ they exist on the filesystem (this is a feature).
If the input path is not a list (as is the case for frozen packages) it is
returned unchanged. The input path is not modified; an extended copy is
diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py
index d095f44..20fba87 100644
--- a/Lib/test/test_pkgutil.py
+++ b/Lib/test/test_pkgutil.py
@@ -522,7 +522,43 @@ class ExtendPathTests(unittest.TestCase):
del sys.modules['foo.bar']
del sys.modules['foo.baz']
- # XXX: test .pkg files
+
+ def test_extend_path_argument_types(self):
+ pkgname = 'foo'
+ dirname_0 = self.create_init(pkgname)
+
+ # If the input path is not a list it is returned unchanged
+ self.assertEqual('notalist', pkgutil.extend_path('notalist', 'foo'))
+ self.assertEqual(('not', 'a', 'list'), pkgutil.extend_path(('not', 'a', 'list'), 'foo'))
+ self.assertEqual(123, pkgutil.extend_path(123, 'foo'))
+ self.assertEqual(None, pkgutil.extend_path(None, 'foo'))
+
+ # Cleanup
+ shutil.rmtree(dirname_0)
+ del sys.path[0]
+
+
+ def test_extend_path_pkg_files(self):
+ pkgname = 'foo'
+ dirname_0 = self.create_init(pkgname)
+
+ with open(os.path.join(dirname_0, 'bar.pkg'), 'w') as pkg_file:
+ pkg_file.write('\n'.join([
+ 'baz',
+ '/foo/bar/baz',
+ '',
+ '#comment'
+ ]))
+
+ extended_paths = pkgutil.extend_path(sys.path, 'bar')
+
+ self.assertEqual(extended_paths[:-2], sys.path)
+ self.assertEqual(extended_paths[-2], 'baz')
+ self.assertEqual(extended_paths[-1], '/foo/bar/baz')
+
+ # Cleanup
+ shutil.rmtree(dirname_0)
+ del sys.path[0]
class NestedNamespacePackageTest(unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Tests/2024-07-13-11-48-20.gh-issue-59022.fYNbQ8.rst b/Misc/NEWS.d/next/Tests/2024-07-13-11-48-20.gh-issue-59022.fYNbQ8.rst
new file mode 100644
index 0000000..e1acebe
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2024-07-13-11-48-20.gh-issue-59022.fYNbQ8.rst
@@ -0,0 +1 @@
+Add tests for :func:`pkgutil.extend_path`. Patch by Andreas Stocker.