mirror of
https://github.com/magnus919/agent-skills.git
synced 2026-09-11 19:47:12 +03:00
205 lines
6.5 KiB
Python
205 lines
6.5 KiB
Python
"""Unit tests for all canonical enumerations."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
_scripts_dir = Path(__file__).resolve().parents[2] / "scripts"
|
|
if str(_scripts_dir) not in sys.path:
|
|
sys.path.insert(0, str(_scripts_dir))
|
|
|
|
import json
|
|
|
|
from binary_analysis.domain.enums import (
|
|
AuditResult,
|
|
Confidence,
|
|
DiagnosticSeverity,
|
|
Endianness,
|
|
FunctionNameSource,
|
|
ImportResolution,
|
|
ProjectState,
|
|
ReferenceKind,
|
|
ReportType,
|
|
)
|
|
|
|
|
|
class TestProjectState:
|
|
"""Tests for ProjectState enum."""
|
|
|
|
def test_all_six_states_defined(self) -> None:
|
|
assert len(ProjectState) == 6
|
|
|
|
def test_values_are_upper_case(self) -> None:
|
|
for state in ProjectState:
|
|
assert state.value == state.value.upper()
|
|
|
|
def test_expected_values(self) -> None:
|
|
assert ProjectState.CREATED.value == "CREATED"
|
|
assert ProjectState.IMPORTED.value == "IMPORTED"
|
|
assert ProjectState.ANALYZING.value == "ANALYZING"
|
|
assert ProjectState.READY.value == "READY"
|
|
assert ProjectState.STALE.value == "STALE"
|
|
assert ProjectState.FAILED.value == "FAILED"
|
|
|
|
def test_serializes_as_string(self) -> None:
|
|
raw = json.dumps(ProjectState.CREATED.value)
|
|
assert raw == '"CREATED"'
|
|
|
|
def test_is_string_enum(self) -> None:
|
|
assert isinstance(ProjectState.CREATED, str)
|
|
|
|
|
|
class TestConfidence:
|
|
"""Tests for Confidence enum."""
|
|
|
|
def test_all_four_levels_defined(self) -> None:
|
|
assert len(Confidence) == 4
|
|
|
|
def test_values_are_upper_case(self) -> None:
|
|
for level in Confidence:
|
|
assert level.value == level.value.upper()
|
|
|
|
def test_serializes_as_string(self) -> None:
|
|
assert json.dumps(Confidence.HIGH.value) == '"HIGH"'
|
|
assert json.dumps(Confidence.LOW.value) == '"LOW"'
|
|
|
|
|
|
class TestDiagnosticSeverity:
|
|
"""Tests for DiagnosticSeverity enum."""
|
|
|
|
def test_all_three_levels_defined(self) -> None:
|
|
assert len(DiagnosticSeverity) == 3
|
|
|
|
def test_values_match_expected(self) -> None:
|
|
assert DiagnosticSeverity.INFO.value == "INFO"
|
|
assert DiagnosticSeverity.WARNING.value == "WARNING"
|
|
assert DiagnosticSeverity.ERROR.value == "ERROR"
|
|
|
|
|
|
class TestReferenceKind:
|
|
"""Tests for ReferenceKind enum."""
|
|
|
|
def test_all_nine_kinds_defined(self) -> None:
|
|
assert len(ReferenceKind) == 9
|
|
|
|
def test_expected_values(self) -> None:
|
|
assert ReferenceKind.CALL.value == "CALL"
|
|
assert ReferenceKind.JUMP.value == "JUMP"
|
|
assert ReferenceKind.READ.value == "READ"
|
|
assert ReferenceKind.WRITE.value == "WRITE"
|
|
assert ReferenceKind.DATA.value == "DATA"
|
|
assert ReferenceKind.IMPORT.value == "IMPORT"
|
|
assert ReferenceKind.EXPORT.value == "EXPORT"
|
|
assert ReferenceKind.INDIRECT.value == "INDIRECT"
|
|
assert ReferenceKind.UNKNOWN.value == "UNKNOWN"
|
|
|
|
|
|
class TestEndianness:
|
|
"""Tests for Endianness enum."""
|
|
|
|
def test_all_four_values_defined(self) -> None:
|
|
assert len(Endianness) == 4
|
|
|
|
def test_expected_values(self) -> None:
|
|
assert Endianness.LITTLE.value == "LITTLE"
|
|
assert Endianness.BIG.value == "BIG"
|
|
assert Endianness.MIXED.value == "MIXED"
|
|
assert Endianness.UNKNOWN.value == "UNKNOWN"
|
|
|
|
|
|
class TestFunctionNameSource:
|
|
"""Tests for FunctionNameSource enum."""
|
|
|
|
def test_all_seven_sources_defined(self) -> None:
|
|
assert len(FunctionNameSource) == 7
|
|
|
|
def test_expected_values(self) -> None:
|
|
assert FunctionNameSource.ORIGINAL.value == "ORIGINAL"
|
|
assert FunctionNameSource.IMPORTED.value == "IMPORTED"
|
|
assert FunctionNameSource.DEBUG.value == "DEBUG"
|
|
assert FunctionNameSource.BACKEND_GENERATED.value == "BACKEND_GENERATED"
|
|
assert FunctionNameSource.USER_ANNOTATION.value == "USER_ANNOTATION"
|
|
assert FunctionNameSource.AGENT_SUGGESTION.value == "AGENT_SUGGESTION"
|
|
assert FunctionNameSource.UNKNOWN.value == "UNKNOWN"
|
|
|
|
|
|
class TestImportResolution:
|
|
"""Tests for ImportResolution enum."""
|
|
|
|
def test_all_three_states_defined(self) -> None:
|
|
assert len(ImportResolution) == 3
|
|
|
|
def test_expected_values(self) -> None:
|
|
assert ImportResolution.RESOLVED.value == "RESOLVED"
|
|
assert ImportResolution.PARTIAL.value == "PARTIAL"
|
|
assert ImportResolution.UNRESOLVED.value == "UNRESOLVED"
|
|
|
|
|
|
class TestReportType:
|
|
"""Tests for ReportType enum."""
|
|
|
|
def test_all_three_types_defined(self) -> None:
|
|
assert len(ReportType) == 3
|
|
|
|
def test_expected_values(self) -> None:
|
|
assert ReportType.TRIAGE.value == "TRIAGE"
|
|
assert ReportType.FOCUSED.value == "FOCUSED"
|
|
assert ReportType.PROJECT.value == "PROJECT"
|
|
|
|
|
|
class TestAuditResult:
|
|
"""Tests for AuditResult enum."""
|
|
|
|
def test_all_five_results_defined(self) -> None:
|
|
assert len(AuditResult) == 5
|
|
|
|
def test_expected_values(self) -> None:
|
|
assert AuditResult.SUCCESS.value == "SUCCESS"
|
|
assert AuditResult.PARTIAL.value == "PARTIAL"
|
|
assert AuditResult.FAILED.value == "FAILED"
|
|
assert AuditResult.CANCELLED.value == "CANCELLED"
|
|
assert AuditResult.REFUSED.value == "REFUSED"
|
|
|
|
|
|
class TestEnumSerialization:
|
|
"""Ensure all enums serialize as UPPER_CASE strings (VAL-JSON-013)."""
|
|
|
|
def test_no_enum_serializes_as_integer(self) -> None:
|
|
"""No enum value should be an integer ordinal."""
|
|
all_enums = [
|
|
ProjectState,
|
|
Confidence,
|
|
DiagnosticSeverity,
|
|
ReferenceKind,
|
|
Endianness,
|
|
FunctionNameSource,
|
|
ImportResolution,
|
|
ReportType,
|
|
AuditResult,
|
|
]
|
|
for enum_class in all_enums:
|
|
for member in enum_class:
|
|
serialized = json.dumps(member.value)
|
|
assert serialized.startswith('"'), (
|
|
f"{enum_class.__name__}.{member.name} serialized as integer: {serialized}"
|
|
)
|
|
|
|
def test_no_enum_serializes_as_lowercase(self) -> None:
|
|
"""No enum value should be lowercase."""
|
|
all_enums = [
|
|
ProjectState,
|
|
Confidence,
|
|
DiagnosticSeverity,
|
|
ReferenceKind,
|
|
Endianness,
|
|
FunctionNameSource,
|
|
ImportResolution,
|
|
ReportType,
|
|
AuditResult,
|
|
]
|
|
for enum_class in all_enums:
|
|
for member in enum_class:
|
|
assert member.value == member.value.upper(), (
|
|
f"{enum_class.__name__}.{member.name} is not UPPER_CASE: {member.value}"
|
|
)
|