mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-12-27 02:12:53 +00:00
Add tests for sort field
**
This commit is contained in:
parent
45e1cb77a4
commit
bc5c0194b4
@ -30,17 +30,16 @@ impl Default for SortField {
|
||||
}
|
||||
}
|
||||
|
||||
const SORTS: &[&str] = &[ "name", "Name", "size", "extension",
|
||||
"Extension", "modified", "accessed",
|
||||
"created", "inode", "type", "none" ];
|
||||
|
||||
impl SortField {
|
||||
|
||||
/// Determine the sort field to use, based on the presence of a “sort”
|
||||
/// argument. This will return `Err` if the option is there, but does not
|
||||
/// correspond to a valid field.
|
||||
fn deduce(matches: &Matches) -> Result<SortField, Misfire> {
|
||||
|
||||
const SORTS: &[&str] = &[ "name", "Name", "size", "extension",
|
||||
"Extension", "modified", "accessed",
|
||||
"created", "inode", "type", "none" ];
|
||||
|
||||
let word = match matches.get(&flags::SORT) {
|
||||
Some(w) => w,
|
||||
None => return Ok(SortField::default()),
|
||||
@ -120,3 +119,55 @@ impl IgnorePatterns {
|
||||
Ok(IgnorePatterns { patterns })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use std::ffi::OsString;
|
||||
use options::flags;
|
||||
|
||||
pub fn os(input: &'static str) -> OsString {
|
||||
let mut os = OsString::new();
|
||||
os.push(input);
|
||||
os
|
||||
}
|
||||
|
||||
macro_rules! test {
|
||||
($name:ident: $type:ident <- $inputs:expr => $result:expr) => {
|
||||
#[test]
|
||||
fn $name() {
|
||||
use options::parser::{parse, Args, Arg};
|
||||
use std::ffi::OsString;
|
||||
|
||||
static TEST_ARGS: &[&Arg] = &[ &flags::SORT ];
|
||||
|
||||
let bits = $inputs.as_ref().into_iter().map(|&o| os(o)).collect::<Vec<OsString>>();
|
||||
let results = parse(&Args(TEST_ARGS), bits.iter());
|
||||
assert_eq!($type::deduce(results.as_ref().unwrap()), $result);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
mod sort_fields {
|
||||
use super::*;
|
||||
|
||||
// Default behaviour
|
||||
test!(empty: SortField <- [] => Ok(SortField::default()));
|
||||
|
||||
// Sort field arguments
|
||||
test!(one_arg: SortField <- ["--sort=cr"] => Ok(SortField::CreatedDate));
|
||||
test!(one_long: SortField <- ["--sort=size"] => Ok(SortField::Size));
|
||||
test!(one_short: SortField <- ["-saccessed"] => Ok(SortField::AccessedDate));
|
||||
test!(lowercase: SortField <- ["--sort", "name"] => Ok(SortField::Name(SortCase::Sensitive)));
|
||||
test!(uppercase: SortField <- ["--sort", "Name"] => Ok(SortField::Name(SortCase::Insensitive)));
|
||||
|
||||
// Errors
|
||||
test!(error: SortField <- ["--sort=colour"] => Err(Misfire::bad_argument(&flags::SORT, &os("colour"), super::SORTS)));
|
||||
|
||||
// Overriding
|
||||
test!(overridden: SortField <- ["--sort=cr", "--sort", "mod"] => Ok(SortField::ModifiedDate));
|
||||
test!(overridden_2: SortField <- ["--sort", "none", "--sort=Extension"] => Ok(SortField::Extension(SortCase::Insensitive)));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user