use crate::workdir::Workdir;
#[test]
fn explode() {
let wrk = Workdir::new("explode");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue|orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("explode");
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"],
svec!["John", "orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn explode_drop_empty() {
let wrk = Workdir::new("explode_drop_empty");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["Mary", ""],
svec!["John", "blue|orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("explode");
cmd.arg("colors").arg("--drop-empty").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors"],
svec!["John", "blue"],
svec!["John", "orange"],
];
assert_eq!(got, expected);
}
#[test]
fn explode_rename() {
let wrk = Workdir::new("explode_rename");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue|orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("explode");
cmd.arg("colors")
.args(["--rename", "color"])
.arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "color"],
svec!["Mary", "yellow"],
svec!["John", "blue"],
svec!["John", "orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn explode_singularize() {
let wrk = Workdir::new("explode_singularize");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["Mary", "yellow"],
svec!["John", "blue|orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("explode");
cmd.arg("colors").arg("-S").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "color"],
svec!["Mary", "yellow"],
svec!["John", "blue"],
svec!["John", "orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn explode_no_headers() {
let wrk = Workdir::new("explode_no_headers");
wrk.create(
"data.csv",
vec![
svec!["Mary", "yellow"],
svec!["John", "blue|orange"],
svec!["Jack", ""],
],
);
let mut cmd = wrk.command("explode");
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"],
svec!["John", "orange"],
svec!["Jack", ""],
];
assert_eq!(got, expected);
}
#[test]
fn explode_multichar_sep() {
let wrk = Workdir::new("explode_multichar_sep");
wrk.create(
"data.csv",
vec![
svec!["name", "colors"],
svec!["John", "blue[x]orange[x]red"],
svec!["Jack", "yellow[x]green"],
],
);
let mut cmd = wrk.command("explode");
cmd.arg("colors").args(["--sep", "[x]"]).arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors"],
svec!["John", "blue"],
svec!["John", "orange"],
svec!["John", "red"],
svec!["Jack", "yellow"],
svec!["Jack", "green"],
];
assert_eq!(got, expected);
}
#[test]
fn explode_multipe_columns() {
let wrk = Workdir::new("explode_multipe_columns");
wrk.create(
"data.csv",
vec![
svec!["name", "colors", "letters"],
svec!["John", "blue|red", "a|b"],
svec!["Jack", "", ""],
],
);
let mut cmd = wrk.command("explode");
cmd.arg("colors,letters").arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "colors", "letters"],
svec!["John", "blue", "a"],
svec!["John", "red", "b"],
svec!["Jack", "", ""],
];
assert_eq!(got, expected);
}
#[test]
fn explode_multipe_columns_rename() {
let wrk = Workdir::new("explode_multipe_columns_rename");
wrk.create(
"data.csv",
vec![
svec!["name", "colors", "letters"],
svec!["John", "blue|red", "a|b"],
svec!["Jack", "", ""],
],
);
let mut cmd = wrk.command("explode");
cmd.arg("colors,letters")
.args(["-r", "color,letter"])
.arg("data.csv");
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
let expected = vec![
svec!["name", "color", "letter"],
svec!["John", "blue", "a"],
svec!["John", "red", "b"],
svec!["Jack", "", ""],
];
assert_eq!(got, expected);
}