use workdir::Workdir;
fn data(headers: bool) -> Vec<Vec<String>> {
let mut rows = vec![
svec!["foobar", "barfoo"],
svec!["a", "b"],
svec!["barfoo", "foobar"],
];
if headers { rows.insert(0, svec!["h1", "h2"]); }
rows
}
#[test]
fn search() {
let wrk = Workdir::new("search");
wrk.create("data.csv", data(true));
let mut cmd = wrk.command("search");
cmd.arg("^foo").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["h1", "h2"],
svec!["foobar", "barfoo"],
svec!["barfoo", "foobar"],
];
assert_eq!(got, expected);
}
#[test]
fn search_empty() {
let wrk = Workdir::new("search");
wrk.create("data.csv", data(true));
let mut cmd = wrk.command("search");
cmd.arg("xxx").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["h1", "h2"],
];
assert_eq!(got, expected);
}
#[test]
fn search_empty_no_headers() {
let wrk = Workdir::new("search");
wrk.create("data.csv", data(true));
let mut cmd = wrk.command("search");
cmd.arg("xxx").arg("data.csv");
cmd.arg("--no-headers");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected: Vec<Vec<String>> = vec![];
assert_eq!(got, expected);
}
#[test]
fn search_ignore_case() {
let wrk = Workdir::new("search");
wrk.create("data.csv", data(true));
let mut cmd = wrk.command("search");
cmd.arg("^FoO").arg("data.csv");
cmd.arg("--ignore-case");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["h1", "h2"],
svec!["foobar", "barfoo"],
svec!["barfoo", "foobar"],
];
assert_eq!(got, expected);
}
#[test]
fn search_no_headers() {
let wrk = Workdir::new("search_no_headers");
wrk.create("data.csv", data(false));
let mut cmd = wrk.command("search");
cmd.arg("^foo").arg("data.csv");
cmd.arg("--no-headers");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["foobar", "barfoo"],
svec!["barfoo", "foobar"],
];
assert_eq!(got, expected);
}
#[test]
fn search_select() {
let wrk = Workdir::new("search_select");
wrk.create("data.csv", data(true));
let mut cmd = wrk.command("search");
cmd.arg("^foo").arg("data.csv");
cmd.arg("--select").arg("h2");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["h1", "h2"],
svec!["barfoo", "foobar"],
];
assert_eq!(got, expected);
}
#[test]
fn search_select_no_headers() {
let wrk = Workdir::new("search_select_no_headers");
wrk.create("data.csv", data(false));
let mut cmd = wrk.command("search");
cmd.arg("^foo").arg("data.csv");
cmd.arg("--select").arg("2");
cmd.arg("--no-headers");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["barfoo", "foobar"],
];
assert_eq!(got, expected);
}
#[test]
fn search_invert_match() {
let wrk = Workdir::new("search_invert_match");
wrk.create("data.csv", data(false));
let mut cmd = wrk.command("search");
cmd.arg("^foo").arg("data.csv");
cmd.arg("--invert-match");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["foobar", "barfoo"],
svec!["a", "b"],
];
assert_eq!(got, expected);
}
#[test]
fn search_invert_match_no_headers() {
let wrk = Workdir::new("search_invert_match");
wrk.create("data.csv", data(false));
let mut cmd = wrk.command("search");
cmd.arg("^foo").arg("data.csv");
cmd.arg("--invert-match");
cmd.arg("--no-headers");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["a", "b"],
];
assert_eq!(got, expected);
}