| 588 | |
| 589 | #[test] |
| 590 | fn test_option_parser() { |
| 591 | let mut parser = OptionParser::new(); |
| 592 | parser |
| 593 | .add("size") |
| 594 | .add("mergeable") |
| 595 | .add("hotplug_method") |
| 596 | .add("hotplug_size") |
| 597 | .add("topology") |
| 598 | .add("cmdline"); |
| 599 | |
| 600 | assert_eq!(split_commas("\"\"").unwrap(), vec!["\"\""]); |
| 601 | parser.parse("size=128M,hanging_param").unwrap_err(); |
| 602 | parser.parse("size=128M,file=/dev/shm").unwrap_err(); |
| 603 | |
| 604 | // Equals signs within a value are fine (splitn(2, '=') keeps them) |
| 605 | parser.add("extra"); |
| 606 | parser.parse("extra=foo=bar").unwrap(); |
| 607 | assert_eq!(parser.get("extra"), Some("foo=bar".to_owned())); |
| 608 | |
| 609 | parser.parse("size=128M").unwrap(); |
| 610 | assert_eq!(parser.get("size"), Some("128M".to_owned())); |
| 611 | assert!(!parser.is_set("mergeable")); |
| 612 | assert!(parser.is_set("size")); |
| 613 | parser.parse("size=").unwrap(); |
| 614 | assert!(parser.get("size").is_none()); |
| 615 | |
| 616 | parser.parse("size=128M,mergeable=on").unwrap(); |
| 617 | assert_eq!(parser.get("size"), Some("128M".to_owned())); |
| 618 | assert_eq!(parser.get("mergeable"), Some("on".to_owned())); |
| 619 | |
| 620 | parser |
| 621 | .parse("size=128M,mergeable=on,topology=[1,2]") |
| 622 | .unwrap(); |
| 623 | assert_eq!(parser.get("size"), Some("128M".to_owned())); |
| 624 | assert_eq!(parser.get("mergeable"), Some("on".to_owned())); |
| 625 | assert_eq!(parser.get("topology"), Some("[1,2]".to_owned())); |
| 626 | |
| 627 | parser |
| 628 | .parse("size=128M,mergeable=on,topology=[[1,2],[3,4]]") |
| 629 | .unwrap(); |
| 630 | assert_eq!(parser.get("size"), Some("128M".to_owned())); |
| 631 | assert_eq!(parser.get("mergeable"), Some("on".to_owned())); |
| 632 | assert_eq!(parser.get("topology"), Some("[[1,2],[3,4]]".to_owned())); |
| 633 | |
| 634 | parser.parse("topology=[").unwrap_err(); |
| 635 | parser.parse("topology=[[[]]]]").unwrap_err(); |
| 636 | parser.parse("topology=[\"@\"\"b\"@[1,2]]").unwrap(); |
| 637 | assert_eq!( |
| 638 | parser |
| 639 | .convert::<Tuple<String, Vec<u8>>>("topology") |
| 640 | .unwrap() |
| 641 | .unwrap(), |
| 642 | Tuple(vec![("@\"b".to_owned(), vec![1, 2])]) |
| 643 | ); |
| 644 | |
| 645 | parser.parse("cmdline=\"console=ttyS0,9600n8\"").unwrap(); |
| 646 | assert_eq!( |
| 647 | parser.get("cmdline"), |