Files
qwenpaw/tests/unit/runtime/test_builtin_commands_scroll.py
agent-radar 1a3a4ccde1
Creator App Tests / PR Spam Gate (push) Skipped
Frontend Tests / PR Spam Gate (push) Skipped
NPM Format (website & console) / PR Spam Gate (push) Skipped
Pre-commit Checks / PR Spam Gate (push) Skipped
QwenPaw Creator Plugin Release / check-version (push) Canceled after 0s
QwenPaw Creator Plugin Release / upload-oss (push) Canceled after 0s
Tests / PR Spam Gate (push) Skipped
CodeQL / CodeQL (python) (push) Canceled after 0s
CodeQL / CodeQL (typescript) (push) Canceled after 0s
Creator App Tests / Creator Backend Tests (push) Canceled after 0s
Creator App Tests / Creator UI Build & Tests (push) Canceled after 0s
E2E Smoke Tests / Playwright UI Smoke (push) Canceled after 0s
Frontend Tests / Detect console changes (push) Canceled after 0s
NPM Format (website & console) / website format check (push) Canceled after 0s
NPM Format (website & console) / console format check (push) Canceled after 0s
Pre-commit Checks / Pre-commit (push) Canceled after 0s
QwenPaw Data Plugin Release / check-version (push) Canceled after 0s
Tests / Detect code changes (push) Canceled after 0s
Frontend Tests / Vitest Unit Tests (push) Canceled after 0s
Frontend Tests / Frontend Summary (push) Canceled after 0s
QwenPaw Data Plugin Release / upload-oss (push) Canceled after 0s
Tests / Maintainer Approval (push) Canceled after 0s
Tests / Unit Tests - py3.11 - macos-latest (push) Canceled after 0s
Tests / Unit Tests - py3.11 - ubuntu-latest (push) Canceled after 0s
Tests / Unit Tests - py3.13 - ubuntu-latest (push) Canceled after 0s
Tests / Unit Tests - py3.11 - windows-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - macos-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - ubuntu-latest (push) Canceled after 0s
Tests / Contract Tests - py3.13 - ubuntu-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - windows-latest (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - fallback (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p2 (push) Canceled after 0s
Tests / Coverage Report (push) Canceled after 0s
Tests / Test Summary (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:01:50 +08:00

75 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
"""Tests for the conversation-command adapter's scroll-checkpoint handling.
Pins ``_resolve_scroll_block`` — the rule that keeps the scroll context
manager's persisted bookkeeping consistent with what a command did to the live
window (update on /compact, reset on /clear, preserve otherwise). The prior bug
was that *every* command silently dropped the scroll block.
"""
from qwenpaw.agents.command_handler import ConversationCommandHandlerMixin
from qwenpaw.runtime.builtin_commands import (
_collect_conversation_specs,
_CONVERSATION_COMMANDS,
_resolve_scroll_block,
)
def test_runtime_registers_every_command_handler_conversation_command():
assert _CONVERSATION_COMMANDS == (
ConversationCommandHandlerMixin.SYSTEM_COMMANDS
)
assert "reme_status" in {
spec.name for spec in _collect_conversation_specs()
}
def test_compact_saves_the_refreshed_block():
updated = {"tiers": [["block"]]}
out = _resolve_scroll_block(
updated=updated,
context_empty=False,
existing={"old": True},
)
assert out is updated
def test_cleared_context_resets_the_block():
# /clear, /new empty the window — a stale eviction index must not survive.
out = _resolve_scroll_block(
updated=None,
context_empty=True,
existing={"tiers": [["old"]]},
)
assert out is None
def test_readonly_command_preserves_existing_block():
# /history, /message, ... must NOT nuke the scroll checkpoint.
existing = {"persisted_ids": ["a", "b"]}
out = _resolve_scroll_block(
updated=None,
context_empty=False,
existing=existing,
)
assert out is existing
def test_update_wins_even_if_context_empty():
updated = {"tiers": []}
out = _resolve_scroll_block(
updated=updated,
context_empty=True,
existing=None,
)
assert out is updated
def test_no_existing_block_native_session():
out = _resolve_scroll_block(
updated=None,
context_empty=False,
existing=None,
)
assert out is None