summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_site.py38
-rw-r--r--Misc/NEWS.d/next/Tests/2023-09-15-15-00-14.gh-issue-108747.ql0owS.rst2
2 files changed, 40 insertions, 0 deletions
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index e8ec3b3..33d0975 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -465,6 +465,44 @@ class ImportSideEffectTests(unittest.TestCase):
else:
self.fail("sitecustomize not imported automatically")
+ @support.requires_subprocess()
+ def test_customization_modules_on_startup(self):
+ mod_names = [
+ 'sitecustomize'
+ ]
+
+ if site.ENABLE_USER_SITE:
+ mod_names.append('usercustomize')
+
+ temp_dir = tempfile.mkdtemp()
+ self.addCleanup(os_helper.rmtree, temp_dir)
+
+ with EnvironmentVarGuard() as environ:
+ environ['PYTHONPATH'] = temp_dir
+
+ for module_name in mod_names:
+ os_helper.rmtree(temp_dir)
+ os.mkdir(temp_dir)
+
+ customize_path = os.path.join(temp_dir, f'{module_name}.py')
+ eyecatcher = f'EXECUTED_{module_name}'
+
+ with open(customize_path, 'w') as f:
+ f.write(f'print("{eyecatcher}")')
+
+ output = subprocess.check_output([sys.executable, '-c', '""'])
+ self.assertIn(eyecatcher, output.decode('utf-8'))
+
+ # -S blocks any site-packages
+ output = subprocess.check_output([sys.executable, '-S', '-c', '""'])
+ self.assertNotIn(eyecatcher, output.decode('utf-8'))
+
+ # -s blocks user site-packages
+ if 'usercustomize' == module_name:
+ output = subprocess.check_output([sys.executable, '-s', '-c', '""'])
+ self.assertNotIn(eyecatcher, output.decode('utf-8'))
+
+
@unittest.skipUnless(hasattr(urllib.request, "HTTPSHandler"),
'need SSL support to download license')
@test.support.requires_resource('network')
diff --git a/Misc/NEWS.d/next/Tests/2023-09-15-15-00-14.gh-issue-108747.ql0owS.rst b/Misc/NEWS.d/next/Tests/2023-09-15-15-00-14.gh-issue-108747.ql0owS.rst
new file mode 100644
index 0000000..ba1fe97
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2023-09-15-15-00-14.gh-issue-108747.ql0owS.rst
@@ -0,0 +1,2 @@
+Add unit test for ``usercustomize`` and ``sitecustomize`` hooks from
+:class:`site`.