mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-12-28 10:40:48 +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 {
|
impl SortField {
|
||||||
|
|
||||||
/// Determine the sort field to use, based on the presence of a “sort”
|
/// 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
|
/// argument. This will return `Err` if the option is there, but does not
|
||||||
/// correspond to a valid field.
|
/// correspond to a valid field.
|
||||||
fn deduce(matches: &Matches) -> Result<SortField, Misfire> {
|
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) {
|
let word = match matches.get(&flags::SORT) {
|
||||||
Some(w) => w,
|
Some(w) => w,
|
||||||
None => return Ok(SortField::default()),
|
None => return Ok(SortField::default()),
|
||||||
@ -120,3 +119,55 @@ impl IgnorePatterns {
|
|||||||
Ok(IgnorePatterns { patterns })
|
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