0.0.5-alpha.8

This commit is contained in:
2026-09-25 17:41:26 +02:00
parent ecd9de4d4e
commit c331da5114
14 changed files with 1034 additions and 35 deletions

View File

@@ -1,7 +1,7 @@
# file: tests/test_rust_audits.py
# version: 1
# version: 2
"""Targeted contracts for the two optional Rust style audits."""
"""Targeted contracts for the optional monotask Rust structure audits."""
from __future__ import annotations
@@ -15,6 +15,10 @@ sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / "scripts"))
from audit_rust_blank_lines import audit_file as audit_blanks # noqa: E402
from audit_rust_const_blocks import audit_file as audit_consts # noqa: E402
from audit_rust_item_spacing import audit_file as audit_item_spacing # noqa: E402
from audit_rust_module_order import audit_file as audit_module_order # noqa: E402
from audit_rust_reexport_blocks import audit_file as audit_reexports # noqa: E402
from audit_rust_trait_import_blocks import audit_file as audit_trait_imports # noqa: E402
from _rust_audit_common import selected_files # noqa: E402
@@ -132,6 +136,125 @@ const ALPHA: u8 = 2;
self.assertEqual(run(path).returncode, 1)
self.assertEqual(run(self.root / "missing.rs").returncode, 2)
def test_item_spacing_between_distinct_items(self) -> None:
path = self.source("""struct Alpha {}
struct Beta {}
fn sample() {}
""")
issues = audit_item_spacing(path)
self.assertTrue(any("exactly one blank line" in issue for issue in issues))
def test_item_spacing_delegates_compact_declaration_blocks(self) -> None:
path = self.source("""const ALPHA: u8 = 1;
const BETA: u8 = 2;
static CACHE: u8 = 0;
static READY: u8 = 1;
type First = u8;
type Second = u16;
""")
self.assertEqual(audit_item_spacing(path), [])
def test_item_spacing_inside_impl(self) -> None:
path = self.source("""struct Sample {}
impl Sample {
fn alpha() {}
fn beta() {}
}
""")
self.assertTrue(any("exactly one blank line" in issue for issue in audit_item_spacing(path)))
def test_item_spacing_does_not_infer_across_macro(self) -> None:
path = self.source("""struct Alpha {}
macro_rules! generated { () => {}; }
struct Beta {}
""")
self.assertEqual(audit_item_spacing(path), [])
def test_module_order_production_and_tests(self) -> None:
path = self.source("""mod beta;
mod alpha;
#[cfg(test)]
mod tests;
""")
issues = audit_module_order(path)
self.assertTrue(any("production" in issue for issue in issues))
path.write_text("#[cfg(test)]\nmod tests;\nmod alpha;\n", encoding="utf-8")
self.assertTrue(any("test modules must follow" in issue for issue in audit_module_order(path)))
def test_module_order_clean_with_path_attribute(self) -> None:
path = self.source("""mod alpha;
mod beta;
#[cfg(test)]
#[path = "unit_tests/mod.rs"]
mod unit_tests;
""")
self.assertEqual(audit_module_order(path), [])
def test_reexport_blocks_visibility_and_spacing(self) -> None:
path = self.source("""pub(crate) use self::internal::Internal;
pub use self::public::Public;
""")
issues = audit_reexports(path)
self.assertTrue(any("must precede" in issue for issue in issues))
path.write_text("pub use self::public::Alpha;\n\npub use self::public::Beta;\n", encoding="utf-8")
self.assertTrue(any("contains an empty line" in issue for issue in audit_reexports(path)))
def test_reexport_blocks_clean_with_rustdocs(self) -> None:
path = self.source("""/// Alpha.
pub use self::public::Alpha;
/// Beta.
pub use self::public::Beta;
/// Internal.
pub(crate) use self::internal::Internal;
""")
self.assertEqual(audit_reexports(path), [])
def test_trait_import_block_layout(self) -> None:
path = self.source("""use alpha::AlphaTrait;
use beta::BetaTrait;
struct Sample {}
""")
self.assertTrue(any("contains an empty line" in issue for issue in audit_trait_imports(path)))
path.write_text("struct Sample {}\n\nuse alpha::AlphaTrait;\n", encoding="utf-8")
self.assertTrue(any("must precede" in issue for issue in audit_trait_imports(path)))
def test_trait_import_block_clean_and_exports_ignored(self) -> None:
path = self.source("""mod alpha;
use alpha::AlphaTrait;
use beta::BetaTrait;
struct Sample {}
pub use self::alpha::Alpha;
""")
self.assertEqual(audit_trait_imports(path), [])
def test_new_audit_cli_statuses(self) -> None:
path = self.source("mod alpha;\nmod beta;\n")
root = pathlib.Path(__file__).resolve().parents[1] / "scripts"
scripts = (
root / "audit_rust_item_spacing.py",
root / "audit_rust_module_order.py",
root / "audit_rust_reexport_blocks.py",
root / "audit_rust_trait_import_blocks.py",
)
for script in scripts:
result = subprocess.run([sys.executable, "-B", str(script), str(path)], capture_output=True, text=True, check=False)
self.assertEqual(result.returncode, 0, (script, result.stderr))
missing = subprocess.run([sys.executable, "-B", str(script), str(self.root / "missing.rs")], capture_output=True, text=True, check=False)
self.assertEqual(missing.returncode, 2, (script, missing.stderr))
if __name__ == "__main__":
unittest.main()