()
| 41 | |
| 42 | |
| 43 | def main() -> None: |
| 44 | workspace = tempfile.mkdtemp(prefix="a3s-code-python-close-") |
| 45 | agent = Agent.create(INLINE_CONFIG) |
| 46 | |
| 47 | # 1. Fresh session: is_closed is False, list_sessions sees it. |
| 48 | session = _make_session(agent, workspace, "py-close-1") |
| 49 | assert session.is_closed is False, "fresh session should not be closed" |
| 50 | |
| 51 | listed = agent.list_sessions() |
| 52 | assert "py-close-1" in listed, ( |
| 53 | f"agent.list_sessions() should include py-close-1, got {listed!r}" |
| 54 | ) |
| 55 | |
| 56 | # 2. session.close() flips is_closed and is idempotent. |
| 57 | session.close() |
| 58 | assert session.is_closed is True, "session.close() must set is_closed = True" |
| 59 | session.close() # second close must not raise |
| 60 | assert session.is_closed is True |
| 61 | |
| 62 | # 3. agent.close_session(id) on a *new* live session closes it. |
| 63 | session_b = _make_session(agent, workspace, "py-close-2") |
| 64 | assert session_b.is_closed is False |
| 65 | was_open = agent.close_session("py-close-2") |
| 66 | assert was_open is True, ( |
| 67 | f"close_session() on a live session must return True, got {was_open!r}" |
| 68 | ) |
| 69 | assert session_b.is_closed is True, ( |
| 70 | "close_session() must propagate to the Python wrapper's is_closed view" |
| 71 | ) |
| 72 | |
| 73 | # 4. close_session() on an unknown id returns False, doesn't raise. |
| 74 | unknown = agent.close_session("does-not-exist") |
| 75 | assert unknown is False, ( |
| 76 | f"close_session() on unknown id must return False, got {unknown!r}" |
| 77 | ) |
| 78 | |
| 79 | # 5. agent.close() closes every live session and rejects new session(). |
| 80 | session_c = _make_session(agent, workspace, "py-close-3") |
| 81 | session_d = _make_session(agent, workspace, "py-close-4") |
| 82 | assert session_c.is_closed is False |
| 83 | assert session_d.is_closed is False |
| 84 | |
| 85 | agent.close() |
| 86 | assert agent.is_closed is True, "agent.is_closed must be True after agent.close()" |
| 87 | assert session_c.is_closed is True, "agent.close() must close session_c" |
| 88 | assert session_d.is_closed is True, "agent.close() must close session_d" |
| 89 | |
| 90 | # New session() must raise. |
| 91 | try: |
| 92 | _ = _make_session(agent, workspace, "py-close-post") |
| 93 | except Exception as exc: |
| 94 | msg = str(exc).lower() |
| 95 | assert "closed" in msg, ( |
| 96 | f"post-close session() error must mention 'closed', got: {exc!r}" |
| 97 | ) |
| 98 | else: |
| 99 | raise AssertionError("session() after agent.close() must raise") |
| 100 |
no test coverage detected