mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-28 07:57:44 +00:00
102 lines
3.5 KiB
Python
102 lines
3.5 KiB
Python
|
|
"""Tests for core/exception and log infrastructure."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
PROJECT_ROOT = Path(__file__).parent.parent.parent
|
||
|
|
sys.path.insert(0, str(PROJECT_ROOT))
|
||
|
|
|
||
|
|
|
||
|
|
# =============================================================================
|
||
|
|
# Exception hierarchy
|
||
|
|
# =============================================================================
|
||
|
|
|
||
|
|
|
||
|
|
class TestExceptionHierarchy:
|
||
|
|
def test_workflow_error_is_exception(self):
|
||
|
|
from rdagent.core.exception import WorkflowError
|
||
|
|
with pytest.raises(WorkflowError):
|
||
|
|
raise WorkflowError("test")
|
||
|
|
|
||
|
|
def test_format_error_is_workflow_error(self):
|
||
|
|
from rdagent.core.exception import FormatError, WorkflowError
|
||
|
|
assert issubclass(FormatError, WorkflowError)
|
||
|
|
|
||
|
|
def test_coder_error_is_workflow_error(self):
|
||
|
|
from rdagent.core.exception import CoderError, WorkflowError
|
||
|
|
assert issubclass(CoderError, WorkflowError)
|
||
|
|
|
||
|
|
def test_code_format_error_is_coder_error(self):
|
||
|
|
from rdagent.core.exception import CodeFormatError, CoderError
|
||
|
|
assert issubclass(CodeFormatError, CoderError)
|
||
|
|
|
||
|
|
def test_custom_runtime_error_is_coder_error(self):
|
||
|
|
from rdagent.core.exception import CustomRuntimeError, CoderError
|
||
|
|
assert issubclass(CustomRuntimeError, CoderError)
|
||
|
|
|
||
|
|
def test_no_output_error_is_coder_error(self):
|
||
|
|
from rdagent.core.exception import NoOutputError, CoderError
|
||
|
|
assert issubclass(NoOutputError, CoderError)
|
||
|
|
|
||
|
|
def test_runner_error_is_exception(self):
|
||
|
|
from rdagent.core.exception import RunnerError
|
||
|
|
with pytest.raises(RunnerError):
|
||
|
|
raise RunnerError("test")
|
||
|
|
|
||
|
|
def test_factor_empty_error_is_coder_error(self):
|
||
|
|
from rdagent.core.exception import FactorEmptyError, CoderError
|
||
|
|
assert FactorEmptyError is CoderError
|
||
|
|
|
||
|
|
def test_model_empty_error_is_coder_error(self):
|
||
|
|
from rdagent.core.exception import ModelEmptyError, CoderError
|
||
|
|
assert ModelEmptyError is CoderError
|
||
|
|
|
||
|
|
def test_llm_unavailable_error_is_runtime_error(self):
|
||
|
|
from rdagent.core.exception import LLMUnavailableError
|
||
|
|
with pytest.raises(LLMUnavailableError):
|
||
|
|
raise LLMUnavailableError("LLM down")
|
||
|
|
|
||
|
|
def test_code_block_parse_error(self):
|
||
|
|
from rdagent.core.exception import CodeBlockParseError
|
||
|
|
e = CodeBlockParseError("msg", "content", "python")
|
||
|
|
assert e.message == "msg"
|
||
|
|
assert e.content == "content"
|
||
|
|
assert e.language == "python"
|
||
|
|
assert isinstance(e, Exception)
|
||
|
|
|
||
|
|
def test_coder_error_caused_by_timeout_default(self):
|
||
|
|
from rdagent.core.exception import CoderError
|
||
|
|
assert CoderError.caused_by_timeout is False
|
||
|
|
|
||
|
|
|
||
|
|
# =============================================================================
|
||
|
|
# RDAgentLog singleton
|
||
|
|
# =============================================================================
|
||
|
|
|
||
|
|
|
||
|
|
class TestRDAgentLog:
|
||
|
|
def test_is_singleton(self):
|
||
|
|
from rdagent.log.logger import RDAgentLog
|
||
|
|
a = RDAgentLog()
|
||
|
|
b = RDAgentLog()
|
||
|
|
assert a is b
|
||
|
|
|
||
|
|
def test_has_tag_context(self):
|
||
|
|
from rdagent.log.logger import RDAgentLog
|
||
|
|
assert hasattr(RDAgentLog, "_tag_ctx")
|
||
|
|
|
||
|
|
|
||
|
|
# =============================================================================
|
||
|
|
# Daily log session
|
||
|
|
# =============================================================================
|
||
|
|
|
||
|
|
|
||
|
|
class TestDailyLog:
|
||
|
|
def test_session_importable(self):
|
||
|
|
from rdagent.log.daily_log import session
|
||
|
|
assert callable(session)
|