76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
"""Tests for the Target subsystem."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from openocd.types import TargetState
|
|
|
|
|
|
async def test_state_returns_target_state(session):
|
|
"""target.state() should return a TargetState with correct fields."""
|
|
state = await session.target.state()
|
|
assert isinstance(state, TargetState)
|
|
assert state.name == "stm32f1x.cpu"
|
|
assert state.state == "halted"
|
|
# When halted, the mock returns pc = 0x08001234
|
|
assert state.current_pc == 0x08001234
|
|
|
|
|
|
async def test_halt(session):
|
|
"""target.halt() should return a TargetState."""
|
|
state = await session.target.halt()
|
|
assert isinstance(state, TargetState)
|
|
assert state.state == "halted"
|
|
|
|
|
|
async def test_resume(session):
|
|
"""target.resume() should complete without error."""
|
|
await session.target.resume()
|
|
|
|
|
|
async def test_resume_with_address(session):
|
|
"""target.resume(address=...) should complete without error."""
|
|
await session.target.resume(address=0x08000000)
|
|
|
|
|
|
async def test_step(session):
|
|
"""target.step() should return a TargetState."""
|
|
state = await session.target.step()
|
|
assert isinstance(state, TargetState)
|
|
|
|
|
|
async def test_step_with_address(session):
|
|
"""target.step(address=...) should complete without error."""
|
|
state = await session.target.step(address=0x08001234)
|
|
assert isinstance(state, TargetState)
|
|
|
|
|
|
async def test_reset_halt(session):
|
|
"""target.reset('halt') should complete without error."""
|
|
await session.target.reset("halt")
|
|
|
|
|
|
async def test_reset_run(session):
|
|
"""target.reset('run') should complete without error."""
|
|
await session.target.reset("run")
|
|
|
|
|
|
async def test_reset_init(session):
|
|
"""target.reset('init') should complete without error."""
|
|
await session.target.reset("init")
|
|
|
|
|
|
async def test_state_pc_field(session):
|
|
"""When halted, current_pc should be populated from reg pc."""
|
|
state = await session.target.state()
|
|
assert state.current_pc is not None
|
|
assert state.current_pc == 0x08001234
|
|
|
|
|
|
async def test_state_frozen_dataclass(session):
|
|
"""TargetState should be immutable (frozen dataclass)."""
|
|
state = await session.target.state()
|
|
with pytest.raises(AttributeError):
|
|
state.name = "something_else" # type: ignore[misc]
|