hierarchy.py: BodyRow, Levels, стратегии outline (сдвиг к 0), indent (ранги различных отступов — единицы alignment.indent и пробелов не смешиваются), account_pattern (ранг кода + жирность, ASSUMPTION в docstring), sums (жадно, без рекурсии); is_consistent, parents (по позициям и уровням, Review Focus 3), resolve_levels: «Итого» в стратегии не передаётся и получает уровень 0; меньше двух строк кроме «Итого» — дерево «trivial». deadline.py: кооперативный Deadline (R-3). Unit-тесты; fixtures-тест — в Задаче 8 (R-2). Отметки плана и tasks.md 2.3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
"""Кооперативный дедлайн разбора (design D-8, ruling R-3): проверка между шагами, часы подменяются в тестах."""
|
||
|
||
import pytest
|
||
|
||
from src.parser.deadline import Deadline
|
||
from src.parser.errors import ParseTimeoutError
|
||
|
||
|
||
class FakeClock:
|
||
"""Часы-заглушка: время двигается только вручную."""
|
||
|
||
def __init__(self) -> None:
|
||
self.now = 1000.0
|
||
|
||
def __call__(self) -> float:
|
||
return self.now
|
||
|
||
|
||
def test_check_passes_within_limit() -> None:
|
||
clock = FakeClock()
|
||
deadline = Deadline(10, clock=clock)
|
||
|
||
clock.now += 10
|
||
|
||
deadline.check("иерархия") # ровно на границе лимита — ещё не превышен
|
||
|
||
|
||
def test_check_raises_after_limit_with_step_name() -> None:
|
||
clock = FakeClock()
|
||
deadline = Deadline(120, clock=clock)
|
||
|
||
clock.now += 120.5
|
||
|
||
with pytest.raises(ParseTimeoutError) as raised:
|
||
deadline.check("иерархия (outline)")
|
||
|
||
assert raised.value.message == "превышен лимит 120 с на шаге иерархия (outline)"
|
||
|
||
|
||
def test_limit_is_counted_from_creation() -> None:
|
||
clock = FakeClock()
|
||
clock.now += 500
|
||
deadline = Deadline(1, clock=clock)
|
||
|
||
deadline.check("старт")
|
||
|
||
|
||
def test_default_clock_is_monotonic() -> None:
|
||
Deadline(60).check("сразу")
|