use crate::workdir::Workdir;
#[test]
fn implode() {
let wrk = Workdir::new("implode");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue"],
svec!["John", "orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("implode");
cmd.arg("colors").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue|orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn implode_custom_sep() {
let wrk = Workdir::new("implode_custom_sep");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue"],
svec!["John", "orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("implode");
cmd.arg("colors").args(["--sep", "%"]).arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue%orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn implode_rename() {
let wrk = Workdir::new("implode_rename");
wrk.create(
"data.csv",
vec![
svec!["name", "color"],
svec!["Mary", "yellow"],
svec!["John", "blue"],
svec!["John", "orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("implode");
cmd.arg("color")
.args(["--rename", "colors"])
.arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue|orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn implode_pluralize() {
let wrk = Workdir::new("implode_pluralize");
wrk.create(
"data.csv",
vec![
svec!["name", "color"],
svec!["Mary", "yellow"],
svec!["John", "blue"],
svec!["John", "orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("implode");
cmd.arg("color").arg("--pluralize").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue|orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn implode_no_headers() {
let wrk = Workdir::new("implode_no_headers");
wrk.create(
"data.csv",
vec![
svec!["Mary", "yellow"],
svec!["John", "blue"],
svec!["John", "orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("implode");
cmd.arg("1").arg("--no-headers").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["Mary", "yellow"],
svec!["John", "blue|orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn implode_multiple_columns() {
let wrk = Workdir::new("implode_multiple_columns");
wrk.create(
"data.csv",
vec![
svec!["name", "color", "letter"],
svec!["Mary", "yellow", "a"],
svec!["John", "blue", "b"],
svec!["John", "orange", "c"],
svec!["Jack", "", "d"],
],
);
let mut cmd = wrk.command("implode");
cmd.arg("color,letter").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "color", "letter"],
svec!["Mary", "yellow", "a"],
svec!["John", "blue|orange", "b|c"],
svec!["Jack", "", "d"],
];
assert_eq!(got, expected);
}
#[test]
fn implode_multiple_columns_rename() {
let wrk = Workdir::new("implode_multiple_columns_rename");
wrk.create(
"data.csv",
vec![
svec!["name", "color", "letter"],
svec!["Mary", "yellow", "a"],
svec!["John", "blue", "b"],
svec!["John", "orange", "c"],
svec!["Jack", "", "d"],
],
);
let mut cmd = wrk.command("implode");
cmd.arg("color,letter")
.args(["-r", "colors,letters"])
.arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors", "letters"],
svec!["Mary", "yellow", "a"],
svec!["John", "blue|orange", "b|c"],
svec!["Jack", "", "d"],
];
assert_eq!(got, expected);
}
#[test]
fn implode_cmp() {
let wrk = Workdir::new("implode_cmp");
wrk.create(
"data.csv",
vec![
svec!["name", "n", "colors"],
svec!["Mary", "0", "yellow"],
svec!["John", "1", "blue"],
svec!["John", "2", "orange"],
],
);
let mut cmd = wrk.command("implode");
cmd.arg("colors").args(["--cmp", "name"]).arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "n", "colors"],
svec!["Mary", "0", "yellow"],
svec!["John", "2", "blue|orange"],
];
assert_eq!(got, expected);
}