jid: add more testcases

Because why not!
This commit is contained in:
Jonas Schäfer 2024-04-15 19:54:59 +02:00
parent c08946aa7c
commit 054447d147

View file

@ -1017,6 +1017,7 @@ mod tests {
FullJid::from_str("a@b"), FullJid::from_str("a@b"),
Err(Error::ResourceMissingInFullJid) Err(Error::ResourceMissingInFullJid)
); );
assert_eq!(BareJid::from_str("a@b/c"), Err(Error::ResourceInBareJid));
} }
#[test] #[test]
@ -1217,4 +1218,124 @@ mod tests {
map.insert(jid2); map.insert(jid2);
assert!(map.contains(&jid3)); assert!(map.contains(&jid3));
} }
#[test]
fn normalizes_all_parts() {
assert_eq!(
Jid::new("ßA@IX.test/\u{2168}").unwrap().as_str(),
"ssa@ix.test/IX"
);
}
#[test]
fn rejects_unassigned_codepoints() {
match Jid::new("\u{01f601}@example.com") {
Err(Error::NodePrep) => (),
other => panic!("unexpected result: {:?}", other),
};
match Jid::new("foo@\u{01f601}.example.com") {
Err(Error::NamePrep) => (),
other => panic!("unexpected result: {:?}", other),
};
match Jid::new("foo@example.com/\u{01f601}") {
Err(Error::ResourcePrep) => (),
other => panic!("unexpected result: {:?}", other),
};
}
#[test]
fn accepts_domain_only_jid() {
match Jid::new("example.com") {
Ok(_) => (),
other => panic!("unexpected result: {:?}", other),
};
match BareJid::new("example.com") {
Ok(_) => (),
other => panic!("unexpected result: {:?}", other),
};
match FullJid::new("example.com/x") {
Ok(_) => (),
other => panic!("unexpected result: {:?}", other),
};
}
#[test]
fn is_bare_returns_true_iff_bare() {
let bare = Jid::new("foo@bar").unwrap();
let full = Jid::new("foo@bar/baz").unwrap();
assert!(bare.is_bare());
assert!(!full.is_bare());
}
#[test]
fn is_full_returns_true_iff_full() {
let bare = Jid::new("foo@bar").unwrap();
let full = Jid::new("foo@bar/baz").unwrap();
assert!(!bare.is_full());
assert!(full.is_full());
}
#[test]
fn reject_long_localpart() {
let mut long = Vec::with_capacity(1028);
long.resize(1024, b'a');
let mut long = String::from_utf8(long).unwrap();
long.push_str("@foo");
match Jid::new(&long) {
Err(Error::NodeTooLong) => (),
other => panic!("unexpected result: {:?}", other),
}
match BareJid::new(&long) {
Err(Error::NodeTooLong) => (),
other => panic!("unexpected result: {:?}", other),
}
}
#[test]
fn reject_long_domainpart() {
let mut long = Vec::with_capacity(1028);
long.push(b'x');
long.push(b'@');
long.resize(1026, b'a');
let long = String::from_utf8(long).unwrap();
match Jid::new(&long) {
Err(Error::DomainTooLong) => (),
other => panic!("unexpected result: {:?}", other),
}
match BareJid::new(&long) {
Err(Error::DomainTooLong) => (),
other => panic!("unexpected result: {:?}", other),
}
}
#[test]
fn reject_long_resourcepart() {
let mut long = Vec::with_capacity(1028);
long.push(b'x');
long.push(b'@');
long.push(b'y');
long.push(b'/');
long.resize(1028, b'a');
let long = String::from_utf8(long).unwrap();
match Jid::new(&long) {
Err(Error::ResourceTooLong) => (),
other => panic!("unexpected result: {:?}", other),
}
match FullJid::new(&long) {
Err(Error::ResourceTooLong) => (),
other => panic!("unexpected result: {:?}", other),
}
}
} }