26382a7ac6
CI / Clippy (push) Failing after 15m13s
CI / Test (ubuntu-latest) (push) Failing after 16m1s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (no embeddings / no ORT) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Cookbook (Node) (push) Has been cancelled
CI / Pi Extension (Node) (push) Has been cancelled
CI / Rust SDK (lean-ctx-client) (push) Has been cancelled
CI / Embed SDK (lean-ctx-sdk) (push) Has been cancelled
CI / Python SDK (leanctx) (push) Has been cancelled
CI / Hermes Plugin (Python) (push) Has been cancelled
CI / SDK Conformance Matrix (push) Has been cancelled
CI / Coverage (push) Has been cancelled
CI / cargo-deny (push) Has been cancelled
CI / Adversarial Safety (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / Output-Quality Gate (eval A/B) (push) Has been cancelled
CI / Documentation (push) Has been cancelled
CI / CI Green (push) Has been cancelled
JetBrains Plugin / Actionlint (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (rust) (push) Has been cancelled
JetBrains Plugin / Validation (push) Has been cancelled
JetBrains Plugin / Build (push) Has been cancelled
JetBrains Plugin / Test (push) Has been cancelled
Security Check / Security Scan (push) Has been cancelled
123 lines
3.1 KiB
Rust
123 lines
3.1 KiB
Rust
//! Contract tests: verify that canonical rules rendering is consistent.
|
|
//!
|
|
//! Tests use `render(false, ..., CompressionLevel::Off, &ToolProfile::Power)` directly
|
|
//! to bypass config-driven shadow mode, ensuring the non-shadow baseline is always tested.
|
|
|
|
use lean_ctx::core::config::CompressionLevel;
|
|
use lean_ctx::core::rules_canonical;
|
|
use lean_ctx::core::tool_profiles::ToolProfile;
|
|
|
|
fn tp() -> ToolProfile {
|
|
ToolProfile::Power
|
|
}
|
|
|
|
#[test]
|
|
fn shared_non_shadow_contains_never() {
|
|
let content = rules_canonical::render(
|
|
false,
|
|
rules_canonical::Wrapper::Shared,
|
|
CompressionLevel::Off,
|
|
&tp(),
|
|
);
|
|
assert!(
|
|
content.contains("NEVER"),
|
|
"shared non-shadow must contain NEVER"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn dedicated_non_shadow_contains_never() {
|
|
let content = rules_canonical::render(
|
|
false,
|
|
rules_canonical::Wrapper::Dedicated,
|
|
CompressionLevel::Off,
|
|
&tp(),
|
|
);
|
|
assert!(
|
|
content.contains("NEVER"),
|
|
"dedicated non-shadow must contain NEVER"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn dedicated_non_shadow_contains_intent_and_anti() {
|
|
let content = rules_canonical::render(
|
|
false,
|
|
rules_canonical::Wrapper::Dedicated,
|
|
CompressionLevel::Off,
|
|
&tp(),
|
|
);
|
|
assert!(
|
|
content.contains("Anti-patterns"),
|
|
"dedicated must have anti-patterns"
|
|
);
|
|
assert!(
|
|
content.contains("ctx_compose"),
|
|
"dedicated must mention ctx_compose"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn shared_non_shadow_contains_mapping() {
|
|
let content = rules_canonical::render(
|
|
false,
|
|
rules_canonical::Wrapper::Shared,
|
|
CompressionLevel::Off,
|
|
&tp(),
|
|
);
|
|
assert!(
|
|
content.contains("MANDATORY MAPPING"),
|
|
"shared must have mapping"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn dedicated_has_markers() {
|
|
let content = rules_canonical::render(
|
|
false,
|
|
rules_canonical::Wrapper::Dedicated,
|
|
CompressionLevel::Off,
|
|
&tp(),
|
|
);
|
|
assert!(content.contains(rules_canonical::START_MARK));
|
|
assert!(content.contains(rules_canonical::END_MARK));
|
|
assert!(content.contains("CRITICAL"));
|
|
}
|
|
|
|
#[test]
|
|
fn bare_has_no_markers() {
|
|
let content = rules_canonical::render(
|
|
false,
|
|
rules_canonical::Wrapper::Bare,
|
|
CompressionLevel::Off,
|
|
&tp(),
|
|
);
|
|
assert!(!content.contains(rules_canonical::START_MARK));
|
|
assert!(!content.contains(rules_canonical::END_MARK));
|
|
}
|
|
|
|
#[test]
|
|
fn all_wrappers_use_current_version() {
|
|
let version = format!("version: {}", rules_canonical::RULES_VERSION);
|
|
for wrapper in [
|
|
rules_canonical::Wrapper::Dedicated,
|
|
rules_canonical::Wrapper::Shared,
|
|
] {
|
|
let content = rules_canonical::render(false, wrapper, CompressionLevel::Off, &tp());
|
|
assert!(
|
|
content.contains(&version),
|
|
"{wrapper:?} must use current version"
|
|
);
|
|
}
|
|
let bare = rules_canonical::render(
|
|
false,
|
|
rules_canonical::Wrapper::Bare,
|
|
CompressionLevel::Off,
|
|
&tp(),
|
|
);
|
|
assert!(
|
|
!bare.contains("version:"),
|
|
"bare must not have version comment"
|
|
);
|
|
}
|