Просмотр исходного кода

Auto merge of #187 - servo:stuff, r=nox

Fix a corner case and add some tests

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/rust-url/187)
<!-- Reviewable:end -->
bors-servo 10 лет назад
Родитель
Сommit
e96d5a4006
2 измененных файлов с 28 добавлено и 1 удалено
  1. 2 1
      src/lib.rs
  2. 26 0
      tests/unit.rs

+ 2 - 1
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('/');

+ 26 - 0
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();
+}