about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libextra/url.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/libextra/url.rs b/src/libextra/url.rs
index 2afc49df43a..e836d3b5270 100644
--- a/src/libextra/url.rs
+++ b/src/libextra/url.rs
@@ -671,9 +671,13 @@ pub fn to_str(url: &Url) -> ~str {
     };
 
     let authority = if url.host.is_empty() {
+        // If port is Some, we're in a nonsensical situation. Too bad.
         ~""
     } else {
-        format!("//{}{}", user, url.host)
+        match url.port {
+            Some(ref port) => format!("//{}{}:{}", user, url.host, *port),
+            None => format!("//{}{}", user, url.host),
+        }
     };
 
     let query = if url.query.is_empty() {
@@ -896,6 +900,12 @@ mod tests {
     }
 
     #[test]
+    fn test_url_with_port_parse_and_format() {
+        let url = ~"http://rust-lang.org:80/doc";
+        assert_eq!(from_str(url).unwrap().to_str(), url);
+    }
+
+    #[test]
     fn test_scheme_host_only_url_parse_and_format() {
         let url = ~"http://rust-lang.org";
         assert_eq!(from_str(url).unwrap().to_str(), url);