171 lines
4.6 KiB
Rust
Raw Permalink Normal View History

2025-06-27 02:33:44 +01:00
use nu_test_support::{nu, pipeline};
#[test]
fn url_parse_simple() {
let actual = nu!(pipeline(
r#"
("https://www.abc.com"
| url parse)
== {
scheme: 'https',
username: '',
password: '',
host: 'www.abc.com',
port: '',
path: '/',
query: '',
fragment: '',
params: []
}
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn url_parse_with_port() {
let actual = nu!(pipeline(
r#"
("https://www.abc.com:8011"
| url parse)
== {
scheme: 'https',
username: '',
password: '',
host: 'www.abc.com',
port: '8011',
path: '/',
query: '',
fragment: '',
params: []
}
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn url_parse_with_path() {
let actual = nu!(pipeline(
r#"
("http://www.abc.com:8811/def/ghj"
| url parse)
== {
scheme: 'http',
username: '',
password: '',
host: 'www.abc.com',
port: '8811',
path: '/def/ghj',
query: '',
fragment: '',
params: []
}
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn url_parse_with_params() {
let actual = nu!(pipeline(
r#"
("http://www.abc.com:8811/def/ghj?param1=11&param2="
| url parse)
== {
scheme: 'http',
username: '',
password: '',
host: 'www.abc.com',
port: '8811',
path: '/def/ghj',
query: 'param1=11&param2=',
fragment: '',
params: [[key, value]; ["param1", "11"], ["param2", ""]]
}
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn url_parse_with_duplicate_params() {
let actual = nu!(pipeline(
r#"
("http://www.abc.com:8811/def/ghj?param1=11&param2=&param1=22"
| url parse)
== {
scheme: 'http',
username: '',
password: '',
host: 'www.abc.com',
port: '8811',
path: '/def/ghj',
query: 'param1=11&param2=&param1=22',
fragment: '',
params: [[key, value]; ["param1", "11"], ["param2", ""], ["param1", "22"]]
}
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn url_parse_with_fragment() {
let actual = nu!(pipeline(
r#"
("http://www.abc.com:8811/def/ghj?param1=11&param2=#hello-fragment"
| url parse)
== {
scheme: 'http',
username: '',
password: '',
host: 'www.abc.com',
port: '8811',
path: '/def/ghj',
query: 'param1=11&param2=',
fragment: 'hello-fragment',
params: [[key, value]; ["param1", "11"], ["param2", ""]]
}
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn url_parse_with_username_and_password() {
let actual = nu!(pipeline(
r#"
("http://user123:password567@www.abc.com:8811/def/ghj?param1=11&param2=#hello-fragment"
| url parse)
== {
scheme: 'http',
username: 'user123',
password: 'password567',
host: 'www.abc.com',
port: '8811',
path: '/def/ghj',
query: 'param1=11&param2=',
fragment: 'hello-fragment',
params: [[key, value]; ["param1", "11"], ["param2", ""]]
}
"#
));
assert_eq!(actual.out, "true");
}
#[test]
fn url_parse_error_empty_url() {
let actual = nu!(r#""" | url parse"#);
assert!(actual.err.contains(
"Incomplete or incorrect URL. Expected a full URL, e.g., https://www.example.com"
));
}