mirror of
https://github.com/nushell/nushell
synced 2024-12-28 14:03:09 +00:00
120 lines
3.7 KiB
Rust
120 lines
3.7 KiB
Rust
|
use nu_parser::{Flag, PositionalArg, Signature, SyntaxShape};
|
||
|
|
||
|
#[test]
|
||
|
fn test_signature() {
|
||
|
let signature = Signature::new("new_signature");
|
||
|
let from_build = Signature::build("new_signature");
|
||
|
|
||
|
// asserting partial eq implementation
|
||
|
assert_eq!(signature, from_build);
|
||
|
|
||
|
// constructing signature with description
|
||
|
let signature = Signature::new("signature").desc("example usage");
|
||
|
assert_eq!(signature.usage, "example usage".to_string())
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_signature_chained() {
|
||
|
let signature = Signature::new("new_signature")
|
||
|
.desc("description")
|
||
|
.required("required", SyntaxShape::String, "required description")
|
||
|
.optional("optional", SyntaxShape::String, "optional description")
|
||
|
.required_named(
|
||
|
"req_named",
|
||
|
SyntaxShape::String,
|
||
|
"required named description",
|
||
|
Some('r'),
|
||
|
)
|
||
|
.named("named", SyntaxShape::String, "named description", Some('n'))
|
||
|
.switch("switch", "switch description", None)
|
||
|
.rest(SyntaxShape::String, "rest description");
|
||
|
|
||
|
assert_eq!(signature.required_positional.len(), 1);
|
||
|
assert_eq!(signature.optional_positional.len(), 1);
|
||
|
assert_eq!(signature.named.len(), 3);
|
||
|
assert!(signature.rest_positional.is_some());
|
||
|
assert_eq!(signature.get_shorts(), vec!['r', 'n']);
|
||
|
assert_eq!(signature.get_names(), vec!["req_named", "named", "switch"]);
|
||
|
assert_eq!(signature.num_positionals(), 2);
|
||
|
|
||
|
assert_eq!(
|
||
|
signature.get_positional(0),
|
||
|
Some(PositionalArg {
|
||
|
name: "required".to_string(),
|
||
|
desc: "required description".to_string(),
|
||
|
shape: SyntaxShape::String,
|
||
|
var_id: None
|
||
|
})
|
||
|
);
|
||
|
assert_eq!(
|
||
|
signature.get_positional(1),
|
||
|
Some(PositionalArg {
|
||
|
name: "optional".to_string(),
|
||
|
desc: "optional description".to_string(),
|
||
|
shape: SyntaxShape::String,
|
||
|
var_id: None
|
||
|
})
|
||
|
);
|
||
|
assert_eq!(
|
||
|
signature.get_positional(2),
|
||
|
Some(PositionalArg {
|
||
|
name: "rest".to_string(),
|
||
|
desc: "rest description".to_string(),
|
||
|
shape: SyntaxShape::String,
|
||
|
var_id: None
|
||
|
})
|
||
|
);
|
||
|
|
||
|
assert_eq!(
|
||
|
signature.get_long_flag("req_named"),
|
||
|
Some(Flag {
|
||
|
long: "req_named".to_string(),
|
||
|
short: Some('r'),
|
||
|
arg: Some(SyntaxShape::String),
|
||
|
required: true,
|
||
|
desc: "required named description".to_string(),
|
||
|
var_id: None
|
||
|
})
|
||
|
);
|
||
|
|
||
|
assert_eq!(
|
||
|
signature.get_short_flag('r'),
|
||
|
Some(Flag {
|
||
|
long: "req_named".to_string(),
|
||
|
short: Some('r'),
|
||
|
arg: Some(SyntaxShape::String),
|
||
|
required: true,
|
||
|
desc: "required named description".to_string(),
|
||
|
var_id: None
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
#[should_panic(expected = "There may be duplicate short flags, such as -h")]
|
||
|
fn test_signature_same_short() {
|
||
|
// Creating signature with same short name should panic
|
||
|
Signature::new("new_signature")
|
||
|
.required_named(
|
||
|
"required_named",
|
||
|
SyntaxShape::String,
|
||
|
"required named description",
|
||
|
Some('n'),
|
||
|
)
|
||
|
.named("named", SyntaxShape::String, "named description", Some('n'));
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
#[should_panic(expected = "There may be duplicate name flags, such as --help")]
|
||
|
fn test_signature_same_name() {
|
||
|
// Creating signature with same short name should panic
|
||
|
Signature::new("new_signature")
|
||
|
.required_named(
|
||
|
"name",
|
||
|
SyntaxShape::String,
|
||
|
"required named description",
|
||
|
Some('r'),
|
||
|
)
|
||
|
.named("name", SyntaxShape::String, "named description", Some('n'));
|
||
|
}
|