60e0ffc959
Upgrade checks / Notify on failure (push) Has been cancelled
Upgrade checks / Close issue on success (push) Has been cancelled
Schema Crash Test / Real-world schema crash test (232K schemas) (push) Has been cancelled
Run static analysis / static_analysis (push) Has been cancelled
Tests / Tests: Python 3.10 on ubuntu-latest (push) Has been cancelled
Tests / Tests: Python 3.13 on ubuntu-latest (push) Has been cancelled
Tests / Tests: Python 3.10 on windows-latest (push) Has been cancelled
Tests / Tests with lowest-direct dependencies (push) Has been cancelled
Tests / MCP conformance tests (push) Has been cancelled
Tests / Integration tests (push) Has been cancelled
Tests / Package install smoke (push) Has been cancelled
Upgrade checks / Static analysis (push) Has been cancelled
Upgrade checks / Tests: Python 3.10 on ubuntu-latest (push) Has been cancelled
Upgrade checks / Tests: Python 3.13 on ubuntu-latest (push) Has been cancelled
Upgrade checks / Tests: Python 3.10 on windows-latest (push) Has been cancelled
Upgrade checks / Integration tests (push) Has been cancelled
Update MCPServerConfig Schema / update-config-schema (push) Has been cancelled
Update SDK Documentation / update-sdk-docs (push) Has been cancelled
92 lines
2.9 KiB
Python
92 lines
2.9 KiB
Python
"""Test the with_argv context manager."""
|
|
|
|
import sys
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from fastmcp.cli.cli import with_argv
|
|
|
|
|
|
class TestWithArgv:
|
|
"""Test the with_argv context manager."""
|
|
|
|
def test_with_argv_replaces_args(self):
|
|
"""Test that with_argv properly replaces sys.argv."""
|
|
original_argv = sys.argv[:]
|
|
test_args = ["--name", "TestServer", "--debug"]
|
|
|
|
with with_argv(test_args):
|
|
# Should preserve script name and add new args
|
|
assert sys.argv[0] == original_argv[0]
|
|
assert sys.argv[1:] == test_args
|
|
|
|
# Should restore original argv after context
|
|
assert sys.argv == original_argv
|
|
|
|
def test_with_argv_none_does_nothing(self):
|
|
"""Test that with_argv(None) doesn't change sys.argv."""
|
|
original_argv = sys.argv[:]
|
|
|
|
with with_argv(None):
|
|
assert sys.argv == original_argv
|
|
|
|
assert sys.argv == original_argv
|
|
|
|
def test_with_argv_empty_list(self):
|
|
"""Test that with_argv([]) clears arguments but keeps script name."""
|
|
original_argv = sys.argv[:]
|
|
|
|
with with_argv([]):
|
|
# Should have only the script name (no additional args)
|
|
assert sys.argv == [original_argv[0]]
|
|
assert len(sys.argv) == 1
|
|
|
|
assert sys.argv == original_argv
|
|
|
|
def test_with_argv_restores_on_exception(self):
|
|
"""Test that sys.argv is restored even if an exception occurs."""
|
|
original_argv = sys.argv[:]
|
|
test_args = ["--error"]
|
|
|
|
with pytest.raises(ValueError):
|
|
with with_argv(test_args):
|
|
assert sys.argv == [original_argv[0]] + test_args
|
|
raise ValueError("Test error")
|
|
|
|
# Should still restore original argv
|
|
assert sys.argv == original_argv
|
|
|
|
def test_with_argv_nested(self):
|
|
"""Test nested with_argv contexts."""
|
|
original_argv = sys.argv[:]
|
|
args1 = ["--level1"]
|
|
args2 = ["--level2", "--debug"]
|
|
|
|
with with_argv(args1):
|
|
assert sys.argv == [original_argv[0]] + args1
|
|
|
|
with with_argv(args2):
|
|
assert sys.argv == [original_argv[0]] + args2
|
|
|
|
# Should restore to level 1
|
|
assert sys.argv == [original_argv[0]] + args1
|
|
|
|
# Should restore to original
|
|
assert sys.argv == original_argv
|
|
|
|
@patch("sys.argv", ["test_script.py", "existing", "args"])
|
|
def test_with_argv_with_existing_args(self):
|
|
"""Test with_argv when sys.argv already has arguments."""
|
|
original_argv = sys.argv[:]
|
|
assert original_argv == ["test_script.py", "existing", "args"]
|
|
|
|
test_args = ["--new", "args"]
|
|
|
|
with with_argv(test_args):
|
|
# Should replace existing args but keep script name
|
|
assert sys.argv == ["test_script.py", "--new", "args"]
|
|
|
|
# Should restore original
|
|
assert sys.argv == original_argv
|