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¶m2=" | url parse) == { scheme: 'http', username: '', password: '', host: 'www.abc.com', port: '8811', path: '/def/ghj', query: 'param1=11¶m2=', 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¶m2=¶m1=22" | url parse) == { scheme: 'http', username: '', password: '', host: 'www.abc.com', port: '8811', path: '/def/ghj', query: 'param1=11¶m2=¶m1=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¶m2=#hello-fragment" | url parse) == { scheme: 'http', username: '', password: '', host: 'www.abc.com', port: '8811', path: '/def/ghj', query: 'param1=11¶m2=', 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¶m2=#hello-fragment" | url parse) == { scheme: 'http', username: 'user123', password: 'password567', host: 'www.abc.com', port: '8811', path: '/def/ghj', query: 'param1=11¶m2=', 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" )); }