228 lines
7.6 KiB
Rust
228 lines
7.6 KiB
Rust
// ██████╗ █████╗ ███████╗███████╗██╗███╗ ██╗ ██████╗
|
|
// ██╔══██╗██╔══██╗██╔════╝██╔════╝██║████╗ ██║██╔════╝
|
|
// ██████╔╝███████║███████╗███████╗██║██╔██╗ ██║██║ ███╗
|
|
// ██╔═══╝ ██╔══██║╚════██║╚════██║██║██║╚██╗██║██║ ██║
|
|
// ██║ ██║ ██║███████║███████║██║██║ ╚████║╚██████╔╝
|
|
// ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝
|
|
|
|
#[cfg(test)]
|
|
mod passing {
|
|
use reqwest::Url;
|
|
|
|
use monolith::url;
|
|
|
|
#[test]
|
|
fn basic_httsp_relative() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("https://www.kernel.org").unwrap(),
|
|
"category/signatures.html"
|
|
)
|
|
.as_str(),
|
|
Url::parse("https://www.kernel.org/category/signatures.html")
|
|
.unwrap()
|
|
.as_str()
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn basic_httsp_absolute() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("https://www.kernel.org").unwrap(),
|
|
"/category/signatures.html"
|
|
)
|
|
.as_str(),
|
|
Url::parse("https://www.kernel.org/category/signatures.html")
|
|
.unwrap()
|
|
.as_str()
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_https_to_level_up_relative() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("https://www.kernel.org").unwrap(),
|
|
"../category/signatures.html"
|
|
)
|
|
.as_str(),
|
|
Url::parse("https://www.kernel.org/category/signatures.html")
|
|
.unwrap()
|
|
.as_str()
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_https_url_to_url_with_no_protocol() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("https://www.kernel.org").unwrap(),
|
|
"//www.kernel.org/theme/images/logos/tux.png",
|
|
)
|
|
.as_str(),
|
|
"https://www.kernel.org/theme/images/logos/tux.png"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_https_url_to_url_with_no_protocol_and_on_different_hostname() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("https://www.kernel.org").unwrap(),
|
|
"//another-host.org/theme/images/logos/tux.png",
|
|
)
|
|
.as_str(),
|
|
"https://another-host.org/theme/images/logos/tux.png"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_https_url_to_absolute_path() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("https://www.kernel.org/category/signatures.html").unwrap(),
|
|
"/theme/images/logos/tux.png",
|
|
)
|
|
.as_str(),
|
|
"https://www.kernel.org/theme/images/logos/tux.png"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_https_to_just_filename() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("https://www.w3schools.com/html/html_iframe.asp").unwrap(),
|
|
"default.asp",
|
|
)
|
|
.as_str(),
|
|
"https://www.w3schools.com/html/default.asp"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_data_url_to_https() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("data:text/html;base64,V2VsY29tZSBUbyBUaGUgUGFydHksIDxiPlBhbDwvYj4h")
|
|
.unwrap(),
|
|
"https://www.kernel.org/category/signatures.html",
|
|
)
|
|
.as_str(),
|
|
"https://www.kernel.org/category/signatures.html"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_data_url_to_data_url() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("data:text/html;base64,V2VsY29tZSBUbyBUaGUgUGFydHksIDxiPlBhbDwvYj4h")
|
|
.unwrap(),
|
|
"data:text/html;base64,PGEgaHJlZj0iaW5kZXguaHRtbCI+SG9tZTwvYT4K",
|
|
)
|
|
.as_str(),
|
|
"data:text/html;base64,PGEgaHJlZj0iaW5kZXguaHRtbCI+SG9tZTwvYT4K"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_file_url_to_relative_path() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("file:///home/user/Websites/my-website/index.html").unwrap(),
|
|
"assets/images/logo.png",
|
|
)
|
|
.as_str(),
|
|
"file:///home/user/Websites/my-website/assets/images/logo.png"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_file_url_to_relative_path_with_backslashes() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("file:\\\\\\home\\user\\Websites\\my-website\\index.html").unwrap(),
|
|
"assets\\images\\logo.png",
|
|
)
|
|
.as_str(),
|
|
"file:///home/user/Websites/my-website/assets/images/logo.png"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn from_data_url_to_file_url() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("data:text/html;base64,V2VsY29tZSBUbyBUaGUgUGFydHksIDxiPlBhbDwvYj4h")
|
|
.unwrap(),
|
|
"file:///etc/passwd",
|
|
)
|
|
.as_str(),
|
|
"file:///etc/passwd"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn preserve_fragment() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("http://doesnt-matter.local/").unwrap(),
|
|
"css/fonts/fontmarvelous.svg#fontmarvelous",
|
|
)
|
|
.as_str(),
|
|
"http://doesnt-matter.local/css/fonts/fontmarvelous.svg#fontmarvelous"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn resolve_from_file_url_to_file_url() {
|
|
if cfg!(windows) {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("file:///c:/index.html").unwrap(),
|
|
"file:///c:/image.png"
|
|
)
|
|
.as_str(),
|
|
"file:///c:/image.png"
|
|
);
|
|
} else {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("file:///tmp/index.html").unwrap(),
|
|
"file:///tmp/image.png"
|
|
)
|
|
.as_str(),
|
|
"file:///tmp/image.png"
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ███████╗ █████╗ ██╗██╗ ██╗███╗ ██╗ ██████╗
|
|
// ██╔════╝██╔══██╗██║██║ ██║████╗ ██║██╔════╝
|
|
// █████╗ ███████║██║██║ ██║██╔██╗ ██║██║ ███╗
|
|
// ██╔══╝ ██╔══██║██║██║ ██║██║╚██╗██║██║ ██║
|
|
// ██║ ██║ ██║██║███████╗██║██║ ╚████║╚██████╔╝
|
|
// ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝
|
|
|
|
#[cfg(test)]
|
|
mod failing {
|
|
use reqwest::Url;
|
|
|
|
use monolith::url;
|
|
|
|
#[test]
|
|
fn from_data_url_to_url_with_no_protocol() {
|
|
assert_eq!(
|
|
url::resolve_url(
|
|
&Url::parse("data:text/html;base64,V2VsY29tZSBUbyBUaGUgUGFydHksIDxiPlBhbDwvYj4h")
|
|
.unwrap(),
|
|
"//www.w3schools.com/html/html_iframe.asp",
|
|
)
|
|
.as_str(),
|
|
"data:,"
|
|
);
|
|
}
|
|
}
|