You've already forked uutils-args
mirror of
https://github.com/uutils/uutils-args.git
synced 2026-06-10 16:13:08 -07:00
test the new positional argument system in coreutils tests
This commit is contained in:
committed by
Sylvestre Ledru
parent
291beb3b3b
commit
a31f9bef39
+27
-23
@@ -1,4 +1,9 @@
|
||||
use uutils_args::{Arguments, Options};
|
||||
use std::ffi::OsString;
|
||||
|
||||
use uutils_args::{
|
||||
positional::{Opt, Unpack},
|
||||
Arguments, Options,
|
||||
};
|
||||
|
||||
#[derive(Clone, Arguments)]
|
||||
enum Arg {
|
||||
@@ -39,30 +44,29 @@ impl Options<Arg> for Settings {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse<I>(args: I) -> Result<(Settings, Option<OsString>), uutils_args::Error>
|
||||
where
|
||||
I: IntoIterator,
|
||||
I::Item: Into<OsString>,
|
||||
{
|
||||
let (s, ops) = Settings::default().parse(args)?;
|
||||
let file = Opt("FILE").unpack(ops)?;
|
||||
Ok((s, file))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn wrap() {
|
||||
assert_eq!(parse(["base32"]).unwrap().0.wrap, Some(76));
|
||||
assert_eq!(parse(["base32", "-w0"]).unwrap().0.wrap, None);
|
||||
assert_eq!(parse(["base32", "-w100"]).unwrap().0.wrap, Some(100));
|
||||
assert_eq!(parse(["base32", "--wrap=100"]).unwrap().0.wrap, Some(100));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn file() {
|
||||
assert_eq!(parse(["base32"]).unwrap().1, None);
|
||||
assert_eq!(
|
||||
Settings::default().parse(["base32"]).unwrap().0.wrap,
|
||||
Some(76)
|
||||
);
|
||||
assert_eq!(
|
||||
Settings::default().parse(["base32", "-w0"]).unwrap().0.wrap,
|
||||
None
|
||||
);
|
||||
assert_eq!(
|
||||
Settings::default()
|
||||
.parse(["base32", "-w100"])
|
||||
.unwrap()
|
||||
.0
|
||||
.wrap,
|
||||
Some(100)
|
||||
);
|
||||
assert_eq!(
|
||||
Settings::default()
|
||||
.parse(["base32", "--wrap=100"])
|
||||
.unwrap()
|
||||
.0
|
||||
.wrap,
|
||||
Some(100)
|
||||
parse(["base32", "file"]).unwrap().1,
|
||||
Some(OsString::from("file"))
|
||||
);
|
||||
}
|
||||
|
||||
+20
-12
@@ -1,6 +1,9 @@
|
||||
use std::ffi::OsString;
|
||||
|
||||
use uutils_args::{Arguments, Options};
|
||||
use uutils_args::{
|
||||
positional::{Many1, Unpack},
|
||||
Arguments, Options,
|
||||
};
|
||||
|
||||
#[derive(Clone, Arguments)]
|
||||
enum Arg {
|
||||
@@ -35,19 +38,24 @@ impl Options<Arg> for Settings {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse(args: &[&str]) -> Settings {
|
||||
let (mut settings, operands) = Settings::default().parse(args).unwrap();
|
||||
settings.names = operands;
|
||||
if !settings.multiple {
|
||||
assert_eq!(settings.names.len(), 2);
|
||||
settings.suffix = settings.names.pop().unwrap();
|
||||
fn parse(args: &[&str]) -> Result<Settings, uutils_args::Error> {
|
||||
let (mut settings, operands) = Settings::default().parse(args)?;
|
||||
|
||||
if settings.multiple {
|
||||
let names = Many1("FILE").unpack(operands)?;
|
||||
settings.names = names;
|
||||
} else {
|
||||
let (names, suffix) = ("FILE", "SUFFIX").unpack(operands)?;
|
||||
settings.names = vec![names];
|
||||
settings.suffix = suffix;
|
||||
}
|
||||
settings
|
||||
|
||||
Ok(settings)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn name_and_suffix() {
|
||||
let settings = parse(&["basename", "foobar", "bar"]);
|
||||
let settings = parse(&["basename", "foobar", "bar"]).unwrap();
|
||||
assert!(!settings.zero);
|
||||
assert_eq!(settings.names, vec!["foobar"]);
|
||||
assert_eq!(settings.suffix, "bar");
|
||||
@@ -55,7 +63,7 @@ fn name_and_suffix() {
|
||||
|
||||
#[test]
|
||||
fn zero_name_and_suffix() {
|
||||
let settings = parse(&["basename", "-z", "foobar", "bar"]);
|
||||
let settings = parse(&["basename", "-z", "foobar", "bar"]).unwrap();
|
||||
assert!(settings.zero);
|
||||
assert_eq!(settings.names, vec!["foobar"]);
|
||||
assert_eq!(settings.suffix, "bar");
|
||||
@@ -63,7 +71,7 @@ fn zero_name_and_suffix() {
|
||||
|
||||
#[test]
|
||||
fn all_and_names() {
|
||||
let settings = parse(&["basename", "-a", "foobar", "bar"]);
|
||||
let settings = parse(&["basename", "-a", "foobar", "bar"]).unwrap();
|
||||
assert!(settings.multiple);
|
||||
assert!(!settings.zero);
|
||||
assert_eq!(settings.names, vec!["foobar", "bar"]);
|
||||
@@ -72,7 +80,7 @@ fn all_and_names() {
|
||||
|
||||
#[test]
|
||||
fn option_like_names() {
|
||||
let settings = parse(&["basename", "-a", "--", "-a", "-z", "--suffix=SUFFIX"]);
|
||||
let settings = parse(&["basename", "-a", "--", "-a", "-z", "--suffix=SUFFIX"]).unwrap();
|
||||
assert!(settings.multiple);
|
||||
assert!(!settings.zero);
|
||||
assert_eq!(settings.names, vec!["-a", "-z", "--suffix=SUFFIX"]);
|
||||
|
||||
@@ -38,7 +38,7 @@ impl When {
|
||||
Self::Always => true,
|
||||
Self::Never => false,
|
||||
// Should be atty::is(atty::Stream::Stdout), but I don't want to
|
||||
// pull that depenency in just for this test.
|
||||
// pull that dependency in just for this test.
|
||||
Self::Auto => true,
|
||||
}
|
||||
}
|
||||
|
||||
+33
-14
@@ -1,6 +1,12 @@
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::{
|
||||
ffi::OsString,
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
|
||||
use uutils_args::{Arguments, Options};
|
||||
use uutils_args::{
|
||||
positional::{Opt, Unpack},
|
||||
Arguments, Options,
|
||||
};
|
||||
|
||||
#[derive(Clone, Arguments)]
|
||||
enum Arg {
|
||||
@@ -46,39 +52,52 @@ impl Options<Arg> for Settings {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse<I>(args: I) -> Result<(Settings, Option<OsString>), uutils_args::Error>
|
||||
where
|
||||
I: IntoIterator,
|
||||
I::Item: Into<OsString>,
|
||||
{
|
||||
let (s, ops) = Settings::default().parse(args)?;
|
||||
let file = Opt("FILE").unpack(ops)?;
|
||||
Ok((s, file))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn suffix() {
|
||||
let (s, _operands) = Settings::default()
|
||||
.parse(["mktemp", "--suffix=hello"])
|
||||
.unwrap();
|
||||
let (s, _template) = parse(["mktemp", "--suffix=hello"]).unwrap();
|
||||
assert_eq!(s.suffix.unwrap(), "hello");
|
||||
|
||||
let (s, _operands) = Settings::default().parse(["mktemp", "--suffix="]).unwrap();
|
||||
let (s, _template) = parse(["mktemp", "--suffix="]).unwrap();
|
||||
assert_eq!(s.suffix.unwrap(), "");
|
||||
|
||||
let (s, _operands) = Settings::default().parse(["mktemp", "--suffix="]).unwrap();
|
||||
let (s, _template) = parse(["mktemp", "--suffix="]).unwrap();
|
||||
assert_eq!(s.suffix.unwrap(), "");
|
||||
|
||||
let (s, _operands) = Settings::default().parse(["mktemp"]).unwrap();
|
||||
let (s, _template) = parse(["mktemp"]).unwrap();
|
||||
assert_eq!(s.suffix, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tmpdir() {
|
||||
let (s, _operands) = Settings::default().parse(["mktemp", "--tmpdir"]).unwrap();
|
||||
let (s, _template) = parse(["mktemp", "--tmpdir"]).unwrap();
|
||||
assert_eq!(s.tmp_dir.unwrap(), Path::new("."));
|
||||
|
||||
let (s, _operands) = Settings::default().parse(["mktemp", "--tmpdir="]).unwrap();
|
||||
let (s, _template) = parse(["mktemp", "--tmpdir="]).unwrap();
|
||||
assert_eq!(s.tmp_dir.unwrap(), Path::new(""));
|
||||
|
||||
let (s, _operands) = Settings::default().parse(["mktemp", "-p", "foo"]).unwrap();
|
||||
let (s, _template) = parse(["mktemp", "-p", "foo"]).unwrap();
|
||||
assert_eq!(s.tmp_dir.unwrap(), Path::new("foo"));
|
||||
|
||||
let (s, _operands) = Settings::default().parse(["mktemp", "-pfoo"]).unwrap();
|
||||
let (s, _template) = parse(["mktemp", "-pfoo"]).unwrap();
|
||||
assert_eq!(s.tmp_dir.unwrap(), Path::new("foo"));
|
||||
|
||||
let (s, _operands) = Settings::default().parse(["mktemp", "-p", ""]).unwrap();
|
||||
let (s, _template) = parse(["mktemp", "-p", ""]).unwrap();
|
||||
assert_eq!(s.tmp_dir.unwrap(), Path::new(""));
|
||||
|
||||
assert!(Settings::default().parse(["mktemp", "-p"]).is_err());
|
||||
assert!(parse(["mktemp", "-p"]).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn too_many_arguments() {
|
||||
assert!(parse(["mktemp", "foo", "bar"]).is_err());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user