#![allow(
clippy::expect_used,
clippy::unwrap_used,
clippy::panic,
clippy::missing_panics_doc
)]
use arcp::extensions::{classify_type, is_extension_name, ExtensionRegistry, TypeClassification};
#[test]
fn arcpx_two_segment_name_is_valid() {
assert!(is_extension_name("arcpx.example.v1"));
}
#[test]
fn arcpx_three_segment_name_is_valid() {
assert!(is_extension_name("arcpx.acme.workflow.v3"));
}
#[test]
fn reverse_dns_name_is_valid() {
assert!(is_extension_name("com.acme.workflow.v2"));
}
#[test]
fn names_without_version_are_rejected() {
assert!(!is_extension_name("arcpx.example"));
assert!(!is_extension_name("com.acme.workflow"));
}
#[test]
fn experimental_x_prefix_is_classified_separately() {
assert_eq!(
classify_type("x-debug-flag"),
TypeClassification::ReservedExperimental,
);
assert!(!is_extension_name("x-debug-flag"));
}
#[test]
fn registry_advertises_then_classifies_known() {
let reg = ExtensionRegistry::from_names(["arcpx.example.v1", "com.acme.workflow.v2"])
.expect("valid namespaces");
assert_eq!(reg.len(), 2);
assert_eq!(
reg.classify("arcpx.example.v1"),
TypeClassification::KnownExtension,
);
assert_eq!(
reg.classify("com.acme.workflow.v2"),
TypeClassification::KnownExtension,
);
}
#[test]
fn registry_classifies_unadvertised_extension() {
let reg = ExtensionRegistry::new();
assert_eq!(
reg.classify("arcpx.example.v1"),
TypeClassification::UnknownExtension,
);
}
#[test]
fn registry_classifies_core_types_independent_of_advertised_set() {
let reg = ExtensionRegistry::new();
for core in [
"session.open",
"tool.invoke",
"job.progress",
"stream.chunk",
"permission.request",
"lease.granted",
"subscribe",
"artifact.put",
"metric",
] {
assert_eq!(reg.classify(core), TypeClassification::Core, "{core}");
}
}
#[test]
fn registry_rejects_register_of_malformed_name() {
let mut reg = ExtensionRegistry::new();
let err = reg
.register("not-an-extension".into())
.expect_err("must fail");
assert_eq!(err, "not-an-extension");
assert!(reg.is_empty());
}
#[test]
fn registry_classifies_malformed_input() {
let reg = ExtensionRegistry::new();
assert_eq!(reg.classify(""), TypeClassification::Malformed);
assert_eq!(reg.classify("just-a-string"), TypeClassification::Malformed,);
}