mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-12-27 18:24:57 +00:00
Add some tests for split_equals
This commit is contained in:
parent
bf643c65fe
commit
62b85e3e93
@ -168,17 +168,65 @@ fn parse<'a>(args: Args, inputs: &'a [OsString]) -> Result<Matches<'a>, ParseErr
|
||||
}
|
||||
|
||||
|
||||
fn split_on_equals<'a>(input: &OsStr) -> Option<(&OsStr, &OsStr)> {
|
||||
/// Splits a string on its `=` character, returning the two substrings on
|
||||
/// either side. Returns `None` if there’s no equals or a string is missing.
|
||||
fn split_on_equals(input: &OsStr) -> Option<(&OsStr, &OsStr)> {
|
||||
use std::os::unix::ffi::OsStrExt;
|
||||
|
||||
input.as_bytes()
|
||||
.iter()
|
||||
.position(|elem| *elem == b'=')
|
||||
.map(|index| input.as_bytes().split_at(index))
|
||||
.map(|(b,a)| (OsStr::from_bytes(b), OsStr::from_bytes(&a[1..])))
|
||||
if let Some(index) = input.as_bytes().iter().position(|elem| *elem == b'=') {
|
||||
let (before, after) = input.as_bytes().split_at(index);
|
||||
|
||||
// The after string contains the = that we need to remove.
|
||||
if before.len() >= 1 && after.len() >= 2 {
|
||||
return Some((OsStr::from_bytes(before),
|
||||
OsStr::from_bytes(&after[1..])))
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod split_test {
|
||||
use super::split_on_equals;
|
||||
use std::ffi::OsString;
|
||||
|
||||
fn os(input: &'static str) -> OsString {
|
||||
let mut os = OsString::new();
|
||||
os.push(input);
|
||||
os
|
||||
}
|
||||
|
||||
macro_rules! test_split {
|
||||
($name:ident: $input:expr => None) => {
|
||||
#[test]
|
||||
fn $name() {
|
||||
assert_eq!(split_on_equals(&os($input)),
|
||||
None);
|
||||
}
|
||||
};
|
||||
|
||||
($name:ident: $input:expr => $before:expr, $after:expr) => {
|
||||
#[test]
|
||||
fn $name() {
|
||||
assert_eq!(split_on_equals(&os($input)),
|
||||
Some((&*os($before), &*os($after))));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
test_split!(empty: "" => None);
|
||||
test_split!(letter: "a" => None);
|
||||
|
||||
test_split!(just: "=" => None);
|
||||
test_split!(intro: "=bbb" => None);
|
||||
test_split!(denou: "aaa=" => None);
|
||||
test_split!(equals: "aaa=bbb" => "aaa", "bbb");
|
||||
|
||||
test_split!(sort: "--sort=size" => "--sort", "size");
|
||||
test_split!(more: "this=that=other" => "this", "that=other");
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
|
Loading…
Reference in New Issue
Block a user