use mrmime::{register_mime, MimeType};
use std::str::FromStr;
register_mime! { mod testset {
"application/vnd.demo+json" => [djson];
"application/x-first" => [clash];
"application/x-second" => [clash]; "application/x-7z-compressed" => ["7z"];
}}
#[test]
fn parse_basic_and_params_and_whitespace() {
let m: MimeType = " text/plain ; charset=UTF-8 ".parse().unwrap();
assert_eq!(m.as_str(), "text/plain");
assert_eq!(m.extension(), "txt");
}
#[test]
fn parse_suffix_type() {
let m: MimeType = "application/vnd.demo+json".parse().unwrap();
assert_eq!(m.as_str(), "application/vnd.demo+json");
assert_eq!(m.extension(), "djson");
}
#[test]
fn error_missing_slash() {
let e = MimeType::from_str("text").unwrap_err();
assert!(matches!(e, mrmime::ParseError::MissingSlash));
}
#[test]
fn error_empty_type() {
let e = MimeType::from_str("/plain").unwrap_err();
assert!(matches!(e, mrmime::ParseError::EmptyType));
}
#[test]
fn error_empty_subtype() {
let e = MimeType::from_str("text/").unwrap_err();
assert!(matches!(e, mrmime::ParseError::EmptySubtype));
}
#[test]
fn error_not_registered() {
let e = MimeType::from_str("application/unknown-type").unwrap_err();
assert!(matches!(e, mrmime::ParseError::NotRegistered));
}
#[test]
fn extension_lookup_known_and_unknown() {
let plain = MimeType::from_extension("txt").unwrap();
assert_eq!(plain.as_str(), "text/plain");
assert!(MimeType::from_extension("nope").is_none());
}
#[test]
fn extension_collision_first_wins() {
let c = MimeType::from_extension("clash").unwrap();
assert_eq!(c.as_str(), "application/x-first");
}
#[test]
fn case_insensitive_extension_and_parse() {
let a = MimeType::from_extension("TXT").unwrap();
assert_eq!(a.as_str(), "text/plain");
let b: MimeType = "TEXT/PLAIN".parse().unwrap();
assert_eq!(b.as_str(), "text/plain");
assert_eq!(a, b);
}