diff --git a/src/lib.rs b/src/lib.rs index 5feba5b0..804e6396 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -266,6 +266,7 @@ impl Url { /// Methods of the `Url` struct assume a number of invariants. /// This checks each of these invariants and panic if one is not met. /// This is for testing rust-url itself. + #[doc(hidden)] pub fn assert_invariants(&self) { macro_rules! assert { ($x: expr) => { @@ -848,7 +849,7 @@ impl Url { let old_suffix_pos = if opt_new_port.is_some() { self.path_start } else { self.host_end }; let suffix = self.slice(old_suffix_pos..).to_owned(); self.serialization.truncate(self.host_start as usize); - if !self.has_host() { + if !self.has_authority() { debug_assert!(self.slice(self.scheme_end..self.host_start) == ":"); debug_assert!(self.username_end == self.host_start); self.serialization.push('/'); diff --git a/tests/unit.rs b/tests/unit.rs index 6038e1f9..09df7efa 100644 --- a/tests/unit.rs +++ b/tests/unit.rs @@ -233,3 +233,29 @@ fn test_form_serialize() { .finish(); assert_eq!(encoded, "foo=%C3%A9%26&bar=&foo=%23"); } + +#[test] +/// https://github.com/servo/rust-url/issues/25 +fn issue_25() { + let filename = if cfg!(windows) { r"C:\run\pg.sock" } else { "/run/pg.sock" }; + let mut url = Url::from_file_path(filename).unwrap(); + url.assert_invariants(); + url.set_scheme("postgres").unwrap(); + url.assert_invariants(); + url.set_host(Some("")).unwrap(); + url.assert_invariants(); + url.set_username("me").unwrap(); + url.assert_invariants(); + let expected = format!("postgres://me@/{}run/pg.sock", if cfg!(windows) { "C:/" } else { "" }); + assert_eq!(url.as_str(), expected); +} + +#[test] +/// https://github.com/servo/rust-url/issues/61 +fn issue_61() { + let mut url = Url::parse("http://mozilla.org").unwrap(); + url.set_scheme("https").unwrap(); + assert_eq!(url.port(), None); + assert_eq!(url.port_or_known_default(), Some(443)); + url.assert_invariants(); +}