mirror of
https://github.com/clap-rs/clap
synced 2024-12-15 07:12:32 +00:00
ebde32aa5b
* Add raw attributes This makes it possible to call clap functions that don't take strings, but any arbitrary value. Even functions that take more than one argument can be called. All attributes that are called `attribute_name_raw` are augmented to `attribute_name(value)` without quoting `value`. * Add tests for raw attributes and fix spelling
65 lines
2.6 KiB
Rust
65 lines
2.6 KiB
Rust
// Copyright (c) 2017 Guillaume Pinot <texitoi(a)texitoi.eu>
|
|
//
|
|
// This work is free. You can redistribute it and/or modify it under
|
|
// the terms of the Do What The Fuck You Want To Public License,
|
|
// Version 2, as published by Sam Hocevar. See the COPYING file for
|
|
// more details.
|
|
|
|
extern crate structopt;
|
|
#[macro_use]
|
|
extern crate structopt_derive;
|
|
|
|
use structopt::StructOpt;
|
|
use structopt::clap::AppSettings;
|
|
|
|
// Check if the global settings compile
|
|
#[derive(StructOpt, Debug, PartialEq, Eq)]
|
|
#[structopt(global_settings_raw = "&[AppSettings::ColoredHelp]")]
|
|
struct Opt {
|
|
#[structopt(long = "x", display_order_raw = "2", next_line_help_raw = "true",
|
|
default_value_raw = "\"0\"", require_equals_raw = "true")]
|
|
x: i32,
|
|
|
|
#[structopt(short = "l", long = "level", aliases_raw = "&[\"set-level\", \"lvl\"]")]
|
|
level: String,
|
|
|
|
#[structopt(long = "values")]
|
|
values: Vec<i32>,
|
|
|
|
#[structopt(name = "FILE", requires_if_raw = "\"FILE\", \"values\"")]
|
|
files: Vec<String>,
|
|
}
|
|
|
|
#[test]
|
|
fn test_raw_slice() {
|
|
assert_eq!(Opt { x: 0, level: "1".to_string(), files: Vec::new(), values: vec![] },
|
|
Opt::from_clap(Opt::clap().get_matches_from(&["test", "-l", "1"])));
|
|
assert_eq!(Opt { x: 0, level: "1".to_string(), files: Vec::new(), values: vec![] },
|
|
Opt::from_clap(Opt::clap().get_matches_from(&["test", "--level", "1"])));
|
|
assert_eq!(Opt { x: 0, level: "1".to_string(), files: Vec::new(), values: vec![] },
|
|
Opt::from_clap(Opt::clap().get_matches_from(&["test", "--set-level", "1"])));
|
|
assert_eq!(Opt { x: 0, level: "1".to_string(), files: Vec::new(), values: vec![] },
|
|
Opt::from_clap(Opt::clap().get_matches_from(&["test", "--lvl", "1"])));
|
|
}
|
|
|
|
#[test]
|
|
fn test_raw_multi_args() {
|
|
assert_eq!(Opt { x: 0, level: "1".to_string(), files: vec!["file".to_string()], values: vec![] },
|
|
Opt::from_clap(Opt::clap().get_matches_from(&["test", "-l", "1", "file"])));
|
|
assert_eq!(Opt { x: 0, level: "1".to_string(), files: vec!["FILE".to_string()], values: vec![1] },
|
|
Opt::from_clap(Opt::clap().get_matches_from(&["test", "-l", "1", "--values", "1", "--", "FILE"])));
|
|
}
|
|
|
|
#[test]
|
|
fn test_raw_multi_args_fail() {
|
|
let result = Opt::clap().get_matches_from_safe(&["test", "-l", "1", "--", "FILE"]);
|
|
assert!(result.is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn test_raw_bool() {
|
|
assert_eq!(Opt { x: 1, level: "1".to_string(), files: vec![], values: vec![] },
|
|
Opt::from_clap(Opt::clap().get_matches_from(&["test", "-l", "1", "--x=1"])));
|
|
let result = Opt::clap().get_matches_from_safe(&["test", "-l", "1", "--x", "1"]);
|
|
assert!(result.is_err());
|
|
}
|