Files
temp/features/fixtures/validation/circular_import_detection.json
CoreRasurae 7e6f6fae37 test(validation): add semantic validation suites
Add comprehensive semantic validation test suites covering five
new fixture categories: language porting mismatches, dependency
graph violations, API surface changes, cross-file symbols, and
circular import detection.

New BDD scenarios (38) exercise all six built-in rules against
fixture-driven inputs.  Robot Framework integration tests (11)
validate end-to-end rule execution via the SemanticValidationService.
ASV benchmarks (6 suites) establish performance baselines for
batch validation throughput and per-rule latency.

Files added:
- features/fixtures/validation/{language_porting_mismatches,
  dependency_graph_violations, api_surface_changes,
  cross_file_symbols, circular_import_detection}.json
- features/semantic_validation_suite.feature
- features/steps/semantic_validation_suite_steps.py
- robot/semantic_validation_suite.robot
- robot/helper_semantic_validation_suite.py
- benchmarks/semantic_validation_suite_bench.py
- docs/reference/semantic_validation_coverage.md

All 11 nox sessions pass (lint, format, typecheck, security_scan,
dead_code, unit_tests, integration_tests, docs, build, benchmark,
coverage_report).  Coverage remains at 97%.

ISSUES CLOSED: #316
2026-03-02 22:05:53 +00:00

52 lines
2.0 KiB
JSON

{
"fixtures": [
{
"name": "direct_circular_import",
"description": "Same relative import appears twice — duplicate detected",
"source": "from . import sibling\nfrom . import sibling\n",
"filename": "circular_a.py",
"expected_rule": "duplicate_import",
"expected_passed": false,
"expected_message_contains": "Duplicate relative imports",
"expected_data_contains": {"filename": "circular_a.py"}
},
{
"name": "multiple_self_references",
"description": "Multiple duplicate relative imports — multiple duplicates detected",
"source": "from . import alpha\nfrom . import beta\nfrom . import alpha\nfrom . import beta\n",
"filename": "multi_cycle.py",
"expected_rule": "duplicate_import",
"expected_passed": false,
"expected_message_contains": "Duplicate relative imports",
"expected_data_contains": {"filename": "multi_cycle.py"}
},
{
"name": "clean_relative_imports",
"description": "Unique relative imports only — no duplicates",
"source": "from . import models\nfrom . import views\nfrom . import controllers\n",
"filename": "clean_package.py",
"expected_rule": "duplicate_import",
"expected_passed": true,
"note": "All relative imports are unique"
},
{
"name": "absolute_imports_not_flagged",
"description": "Absolute imports are never flagged even if duplicated",
"source": "import os\nimport os\nimport sys\n",
"filename": "absolute.py",
"expected_rule": "duplicate_import",
"expected_passed": true,
"note": "DuplicateImportRule only checks relative from-imports"
},
{
"name": "syntax_error_skips_cycle_check",
"description": "File with syntax error — duplicate check is skipped",
"source": "from . import module\ndef broken(\n return 42\n",
"filename": "broken_cycle.py",
"expected_rule": "duplicate_import",
"expected_passed": true,
"note": "DuplicateImportRule returns pass on unparseable code"
}
]
}