81 lines
2.5 KiB
Rust
81 lines
2.5 KiB
Rust
use rustbot::irc::{base64_encode, parse_server_time, Message};
|
|
|
|
#[test]
|
|
fn parses_privmsg_with_prefix() {
|
|
let m = Message::parse(":alice!a@host PRIVMSG #chan :hi there\r\n").unwrap();
|
|
assert_eq!(m.command, "PRIVMSG");
|
|
assert_eq!(m.nick(), Some("alice"));
|
|
assert_eq!(m.param(0), Some("#chan"));
|
|
assert_eq!(m.trailing(), Some("hi there"));
|
|
}
|
|
|
|
#[test]
|
|
fn parses_ping_without_prefix() {
|
|
let m = Message::parse("PING :LAG1234").unwrap();
|
|
assert_eq!(m.command, "PING");
|
|
assert!(m.prefix.is_none());
|
|
assert_eq!(m.trailing(), Some("LAG1234"));
|
|
}
|
|
|
|
#[test]
|
|
fn parses_and_unescapes_tags() {
|
|
let m = Message::parse("@id=123;key=a\\sb\\:c :n!u@h PRIVMSG #c :yo").unwrap();
|
|
assert_eq!(m.tag("id"), Some("123"));
|
|
assert_eq!(m.tag("key"), Some("a b;c"));
|
|
assert_eq!(m.command, "PRIVMSG");
|
|
assert_eq!(m.trailing(), Some("yo"));
|
|
}
|
|
|
|
#[test]
|
|
fn parses_numeric_reply() {
|
|
let m = Message::parse(":srv 001 me :Welcome to the network").unwrap();
|
|
assert_eq!(m.command, "001");
|
|
assert_eq!(m.param(0), Some("me"));
|
|
assert_eq!(m.trailing(), Some("Welcome to the network"));
|
|
}
|
|
|
|
#[test]
|
|
fn full_prefix_is_split() {
|
|
let m = Message::parse(":nick!user@host.example PRIVMSG #c :hi").unwrap();
|
|
let p = m.prefix.expect("prefix present");
|
|
assert_eq!(p.nick.as_deref(), Some("nick"));
|
|
assert_eq!(p.user.as_deref(), Some("user"));
|
|
assert_eq!(p.host.as_deref(), Some("host.example"));
|
|
assert_eq!(p.name(), "nick");
|
|
}
|
|
|
|
#[test]
|
|
fn blank_line_is_none() {
|
|
assert!(Message::parse(" \r\n").is_none());
|
|
}
|
|
|
|
#[test]
|
|
fn base64_matches_known_vectors() {
|
|
assert_eq!(base64_encode(b""), "");
|
|
assert_eq!(base64_encode(b"f"), "Zg==");
|
|
assert_eq!(base64_encode(b"fo"), "Zm8=");
|
|
assert_eq!(base64_encode(b"foobar"), "Zm9vYmFy");
|
|
assert_eq!(base64_encode(b"\0me\0pw"), "AG1lAHB3");
|
|
}
|
|
|
|
#[test]
|
|
fn server_time_parses_to_unix_seconds() {
|
|
assert_eq!(parse_server_time("1970-01-01T00:00:00.000Z"), Some(0));
|
|
assert_eq!(
|
|
parse_server_time("2020-01-01T00:00:00Z"),
|
|
Some(1_577_836_800)
|
|
);
|
|
assert_eq!(
|
|
parse_server_time("2021-01-01T00:00:00.123Z"),
|
|
Some(1_609_459_200)
|
|
);
|
|
assert_eq!(parse_server_time("not-a-timestamp"), None);
|
|
}
|
|
|
|
#[test]
|
|
fn reads_message_tags_via_accessor() {
|
|
let m = Message::parse("@time=2021-01-01T00:00:00Z;batch=42 :s PRIVMSG #c :hi").unwrap();
|
|
assert_eq!(m.tag("batch"), Some("42"));
|
|
assert_eq!(m.tag("time"), Some("2021-01-01T00:00:00Z"));
|
|
assert_eq!(m.tag("missing"), None);
|
|
}
|