diff --git a/src/gopher.rs b/src/gopher.rs index 4c081fa..5b824b8 100644 --- a/src/gopher.rs +++ b/src/gopher.rs @@ -151,7 +151,7 @@ pub fn download_url( } } } - + Ok((filename.to_string(), bytes)) } @@ -341,97 +341,149 @@ mod tests { "ssh://kiosk@bitreich.org", "https://github.com/xvxx/phetch", "telnet://bbs.impakt.net:6502/", + "gopher://some.url/9/file.mp4", + "gopher://some.url/;/file.mp4", + "mtv.com/s/best-of-britney-spears.mp3", + "gopher://microsoft.com:7070/x/developer/sitemap.xml", + "gopher://mtv.com/c/kriss-kross/tour-dates.ical", + "gopher://protonmail.com/M/mymail/inbox.eml", ]; + let mut urls = urls.iter(); + + macro_rules! parse_next_url { + () => { + parse_url(urls.next().unwrap()) + }; + } - let url = parse_url(urls[0]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "gopher.club"); assert_eq!(url.port, "70"); assert_eq!(url.sel, "/phlogs/"); - let url = parse_url(urls[1]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "sdf.org"); assert_eq!(url.port, "7777"); assert_eq!(url.sel, "/maps"); - let url = parse_url(urls[2]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "gopher.floodgap.org"); assert_eq!(url.port, "70"); assert_eq!(url.sel, ""); - let url = parse_url(urls[3]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Text); assert_eq!(url.host, "gopher.floodgap.com"); assert_eq!(url.port, "70"); assert_eq!(url.sel, "/gopher/relevance.txt"); - let url = parse_url(urls[4]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Search); assert_eq!(url.host, "gopherpedia.com"); assert_eq!(url.port, "70"); assert_eq!(url.sel, "/lookup?Gopher"); - let url = parse_url(urls[5]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "dead:beef:1234:5678:9012:3456:feed:deed"); assert_eq!(url.port, "70"); assert_eq!(url.sel, ""); - let url = parse_url(urls[6]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "1234:2345:dead:4567:7890:1234:beef:1111"); assert_eq!(url.port, "70"); assert_eq!(url.sel, "/files"); - let url = parse_url(urls[7]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "2001:cdba:0000:0000:0000:0000:3257:9121"); assert_eq!(url.port, "70"); assert_eq!(url.sel, ""); - let url = parse_url(urls[8]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "2001:cdba::3257:9652"); assert_eq!(url.port, "70"); assert_eq!(url.sel, ""); - let url = parse_url(urls[9]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "9999:aaaa::abab:baba:aaaa:9999"); assert_eq!(url.port, "70"); assert_eq!(url.sel, ""); - let url = parse_url(urls[10]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Error); assert_eq!(url.host, "Unclosed ipv6 bracket"); assert_eq!(url.port, ""); assert_eq!(url.sel, "[2001:2099:dead:beef:0000"); - let url = parse_url(urls[11]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Menu); assert_eq!(url.host, "::1"); assert_eq!(url.port, "70"); assert_eq!(url.sel, ""); - let url = parse_url(urls[12]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::HTML); assert_eq!(url.host, ""); assert_eq!(url.port, ""); assert_eq!(url.sel, "ssh://kiosk@bitreich.org"); - let url = parse_url(urls[13]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::HTML); assert_eq!(url.host, ""); assert_eq!(url.port, ""); assert_eq!(url.sel, "https://github.com/xvxx/phetch"); - let url = parse_url(urls[14]); + let url = parse_next_url!(); assert_eq!(url.typ, Type::Telnet); assert_eq!(url.host, "bbs.impakt.net"); assert_eq!(url.port, "6502"); assert_eq!(url.sel, "/"); + + let url = parse_next_url!(); + assert_eq!(url.typ, Type::Binary); + assert_eq!(url.host, "some.url"); + assert_eq!(url.port, "70"); + assert_eq!(url.sel, "/file.mp4"); + + let url = parse_next_url!(); + assert_eq!(url.typ, Type::Video); + assert_eq!(url.host, "some.url"); + assert_eq!(url.port, "70"); + assert_eq!(url.sel, "/file.mp4"); + + let url = parse_next_url!(); + assert_eq!(url.typ, Type::Sound); + assert_eq!(url.host, "mtv.com"); + assert_eq!(url.port, "70"); + assert_eq!(url.sel, "/best-of-britney-spears.mp3"); + + let url = parse_next_url!(); + assert_eq!(url.typ, Type::Xml); + assert_eq!(url.host, "microsoft.com"); + assert_eq!(url.port, "7070"); + assert_eq!(url.sel, "/developer/sitemap.xml"); + + let url = parse_next_url!(); + assert_eq!(url.typ, Type::Calendar); + assert_eq!(url.host, "mtv.com"); + assert_eq!(url.port, "70"); + assert_eq!(url.sel, "/kriss-kross/tour-dates.ical"); + + let url = parse_next_url!(); + assert_eq!(url.typ, Type::Mailbox); + assert_eq!(url.host, "protonmail.com"); + assert_eq!(url.port, "70"); + assert_eq!(url.sel, "/mymail/inbox.eml"); + + // make sure we got em all + assert_eq!(urls.next(), None); } #[test]