forked from HAL9000/cleveragents-core
7e6f6fae37
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
52 lines
2.0 KiB
JSON
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"
|
|
}
|
|
]
|
|
}
|