Files
rust-xmpp/tests/csi.rs
T
2026-10-20 15:59:55 +07:00

65 lines
2.4 KiB
Rust

use rust_xmpp::csi::{Buffer, important};
use std::time::{Duration, Instant};
#[test]
fn native_importance_rules() {
for xml in [
"<presence/>",
"<presence type='unavailable'/>",
"<presence type='error'/>",
"<message><active xmlns='http://jabber.org/protocol/chatstates'/></message>",
"<message type='headline'><body>news</body></message>",
] {
assert!(!important(xml, &[]), "{xml}");
}
for xml in [
" ",
"<iq/>",
"<r xmlns='urn:xmpp:sm:3'/>",
"<presence type='subscribe'/>",
"<message><body/></message>",
"<message><subject/></message>",
"<message type='error'/>",
"<message><encryption xmlns='urn:xmpp:eme:0'/></message>",
"<message><propose xmlns='urn:xmpp:jingle-message:1'/></message>",
"<message><sent xmlns='urn:xmpp:carbons:2'/></message>",
"<message><received xmlns='urn:xmpp:carbons:2'><forwarded xmlns='urn:xmpp:forward:0'><message xmlns='jabber:client'><body>hey</body></message></forwarded></received></message>",
] {
assert!(important(xml, &[]), "{xml}");
}
assert!(important(
"<message><custom xmlns='example:ns'><part/></custom></message>",
&["{example:ns}custom/part".into()]
));
}
#[test]
fn bounded_queue_flush_delay_activity_and_grace() {
let mut b = Buffer::default();
b.configure(2, Duration::from_secs(5), vec![]);
b.set_inactive(true);
let now = Instant::now();
assert!(b.output("<presence/>".into(), "a@example", now).is_empty());
assert!(b.output("<message/>".into(), "a@example", now).is_empty());
let output = b.output("<presence/>".into(), "a@example", now);
assert_eq!(output.len(), 3);
assert!(output[0].contains("urn:xmpp:delay"));
assert!(output[0].contains("a@example"));
assert_eq!(b.output("<presence/>".into(), "a@example", now).len(), 1);
assert!(
b.output(
"<presence/>".into(),
"a@example",
now + Duration::from_secs(6)
)
.is_empty()
);
assert_eq!(b.activity(now + Duration::from_secs(6)).len(), 1);
b.set_inactive(true);
b.output("<presence/>".into(), "a@example", now);
assert_eq!(b.set_inactive(false).len(), 1);
b.set_inactive(true);
b.output("<presence/>".into(), "a@example", now);
b.reset();
assert!(b.activity(now).is_empty());
assert_eq!(b.output("<presence/>".into(), "a@example", now).len(), 1);
}