Files
NexQuant/test/qlib/test_exceptions_log.py
T

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)