Skip to content

Commit 6d8baf6

Browse files
committed
gh-131178: Add tests for site command-line interface
Add comprehensive CLI tests for the site module covering: - Basic usage with no arguments - --user-site option - --user-base option - Combined --user-base --user-site options - Invalid option handling All tests use subprocess to verify actual CLI behavior.
1 parent 8665769 commit 6d8baf6

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

Lib/test/test_site.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,55 @@ def test_underpth_dll_file(self):
802802
)], env=env)
803803
self.assertTrue(rc, "sys.path is incorrect")
804804

805+
class TestSiteCLI(unittest.TestCase):
806+
"""Tests for the site module command-line interface."""
807+
808+
@support.requires_subprocess()
809+
def test_cli_no_args(self):
810+
"""Test 'python -m site' with no arguments."""
811+
output = subprocess.check_output([sys.executable, '-m', 'site'],
812+
text=True, stderr=subprocess.STDOUT)
813+
self.assertIn('sys.path', output)
814+
self.assertIn('USER_BASE:', output)
815+
self.assertIn('USER_SITE:', output)
816+
self.assertIn('ENABLE_USER_SITE:', output)
817+
818+
@support.requires_subprocess()
819+
def test_cli_user_site(self):
820+
"""Test 'python -m site --user-site'."""
821+
output = subprocess.check_output([sys.executable, '-m', 'site', '--user-site'],
822+
text=True, stderr=subprocess.STDOUT)
823+
self.assertIn('site-packages', output.strip())
824+
self.assertNotIn('sys.path', output)
825+
826+
@support.requires_subprocess()
827+
def test_cli_user_base(self):
828+
"""Test 'python -m site --user-base'."""
829+
output = subprocess.check_output([sys.executable, '-m', 'site', '--user-base'],
830+
text=True, stderr=subprocess.STDOUT)
831+
self.assertNotIn('site-packages', output)
832+
self.assertNotIn('sys.path', output)
833+
self.assertTrue(len(output.strip()) > 0)
834+
835+
@support.requires_subprocess()
836+
def test_cli_user_base_and_user_site(self):
837+
"""Test 'python -m site --user-base --user-site'."""
838+
output = subprocess.check_output([sys.executable, '-m', 'site', '--user-base', '--user-site'],
839+
text=True, stderr=subprocess.STDOUT)
840+
lines = output.strip().split('\n')
841+
self.assertEqual(len(lines), 1)
842+
paths = lines[0].split(':')
843+
self.assertEqual(len(paths), 2)
844+
self.assertNotIn('site-packages', paths[0])
845+
self.assertIn('site-packages', paths[1])
846+
847+
@support.requires_subprocess()
848+
def test_cli_invalid_option(self):
849+
"""Test 'python -m site' with invalid option."""
850+
with self.assertRaises(subprocess.CalledProcessError) as cm:
851+
subprocess.check_output([sys.executable, '-m', 'site', '--invalid'],
852+
text=True, stderr=subprocess.STDOUT)
853+
self.assertNotEqual(cm.exception.returncode, 0)
805854

806855
if __name__ == "__main__":
807856
unittest.main()

0 commit comments

Comments
 (0)