]> git.lizzy.rs Git - rust.git/commitdiff
Change internal `getopts` so `--a=b=c` acts like `--a b=c` rather than `--a b`.
authorFelix S. Klock II <pnkfelix@pnkfx.org>
Fri, 4 Dec 2015 21:02:09 +0000 (22:02 +0100)
committerFelix S. Klock II <pnkfelix@pnkfx.org>
Fri, 4 Dec 2015 21:02:09 +0000 (22:02 +0100)
This is an adaption of

 https://github.com/rust-lang-nursery/getopts/commit/8ec916b86afce0a2a9100b7327b12b5ffcb2cabb

including its unit test.

src/libgetopts/lib.rs

index f7544e3f5ea07e97a67d3a308f461e02ab84db9a..228ceb92da661e3d228ee8447e4b864a8b30ff76 100644 (file)
@@ -598,7 +598,7 @@ fn f(_x: usize) -> Vec<Optval> {
             let mut i_arg = None;
             if cur.as_bytes()[1] == b'-' {
                 let tail = &cur[2..curlen];
-                let tail_eq: Vec<&str> = tail.split('=').collect();
+                let tail_eq: Vec<&str> = tail.splitn(2, '=').collect();
                 if tail_eq.len() <= 1 {
                     names = vec![Long(tail.to_owned())];
                 } else {
@@ -1626,4 +1626,18 @@ fn test_short_usage() {
         debug!("generated: <<{}>>", generated_usage);
         assert_eq!(generated_usage, expected);
     }
+
+    #[test]
+    fn test_args_with_equals() {
+        let args = vec!("--one".to_string(), "A=B".to_string(),
+                        "--two=C=D".to_string());
+        let opts = vec![optopt("o", "one", "One", "INFO"),
+                        optopt("t", "two", "Two", "INFO")];
+        let matches = &match getopts(&args, &opts) {
+            result::Result::Ok(m) => m,
+            result::Result::Err(e) => panic!("{}", e)
+        };
+        assert_eq!(matches.opts_str(&["o".to_string()]).unwrap(), "A=B");
+        assert_eq!(matches.opts_str(&["t".to_string()]).unwrap(), "C=D");
+    }
 }