Skip to content

Commit 22fa99d

Browse files
Rebuild cli tests so that they no-op if binary has not already been built
1 parent e7f2a88 commit 22fa99d

File tree

2 files changed

+101
-97
lines changed

2 files changed

+101
-97
lines changed

crates/readstat-tests/tests/cli.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
use assert_cmd::prelude::*; // Add methods on commands
1+
use assert_cmd::Command; // Add methods on commands
22
use predicates::prelude::*; // Used for writing assertions
3-
use std::process::Command; // Run programs
3+
// use std::process::Command; // Run programs
44

55
#[test]
66
fn cli_file_does_not_exist() -> Result<(), Box<dyn std::error::Error>> {
7-
let mut cmd = Command::cargo_bin("readstat")?;
8-
9-
cmd.arg("data").arg("tests/data/adataset.sas7bdat");
10-
cmd.assert().failure().stderr(
11-
predicate::str::is_match(r#"^(Stopping with error: File)\s(.+)\s(does not exist!\n)$"#)
12-
.unwrap(),
13-
);
14-
7+
if let Ok(mut cmd) = Command::cargo_bin("readstat") {
8+
cmd.arg("data").arg("tests/data/adataset.sas7bdat");
9+
cmd.assert().failure().stderr(
10+
predicate::str::is_match(r#"^(Stopping with error: File)\s(.+)\s(does not exist!\n)$"#)
11+
.unwrap(),
12+
);
13+
}
1514
Ok(())
1615
}
Lines changed: 92 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use ::predicates::prelude::*; // Used for writing assertions
2-
use assert_cmd::prelude::*; // Add methods on commands
2+
use assert_cmd::Command; // Add methods on commands
33
use assert_fs::NamedTempFile;
44
use polars::prelude::*;
5-
use std::{fs::File, path::PathBuf, process::Command, result::Result};
5+
use std::{fs::File, path::PathBuf, result::Result};
66

77
enum OverwriteOption {
88
Overwrite(NamedTempFile),
@@ -14,52 +14,54 @@ fn cli_data_to_parquet(
1414
overwrite: OverwriteOption,
1515
rows_to_stream: Option<u32>,
1616
) -> Result<(Command, NamedTempFile), Box<dyn std::error::Error>> {
17-
let mut cmd = Command::cargo_bin("readstat")?;
18-
19-
let tempfile = match (overwrite, rows_to_stream) {
20-
(OverwriteOption::Overwrite(tempfile), Some(rows)) => {
21-
cmd.arg("data")
22-
.arg(format!("tests/data/{}.sas7bdat", base_file_name))
23-
.args(["--format", "parquet"])
24-
.args(["--output", tempfile.as_os_str().to_str().unwrap()])
25-
.args(["--stream-rows", rows.to_string().as_str()])
26-
.arg("--overwrite");
27-
28-
tempfile
29-
}
30-
(OverwriteOption::DoNotOverwrite, Some(rows)) => {
31-
let tempfile = NamedTempFile::new(format!("{}.parquet", base_file_name))?;
32-
33-
cmd.arg("data")
34-
.arg(format!("tests/data/{}.sas7bdat", base_file_name))
35-
.args(["--format", "parquet"])
36-
.args(["--output", tempfile.as_os_str().to_str().unwrap()])
37-
.args(["--stream-rows", rows.to_string().as_str()]);
38-
39-
tempfile
40-
}
41-
(OverwriteOption::Overwrite(tempfile), None) => {
42-
cmd.arg("data")
43-
.arg(format!("tests/data/{}.sas7bdat", base_file_name))
44-
.args(["--format", "parquet"])
45-
.args(["--output", tempfile.as_os_str().to_str().unwrap()])
46-
.arg("--overwrite");
47-
48-
tempfile
49-
}
50-
(OverwriteOption::DoNotOverwrite, None) => {
51-
let tempfile = NamedTempFile::new(format!("{}.parquet", base_file_name))?;
52-
53-
cmd.arg("data")
54-
.arg(format!("tests/data/{}.sas7bdat", base_file_name))
55-
.args(["--format", "parquet"])
56-
.args(["--output", tempfile.as_os_str().to_str().unwrap()]);
57-
58-
tempfile
59-
}
60-
};
61-
62-
Ok((cmd, tempfile))
17+
if let Ok(mut cmd) = Command::cargo_bin("readstat") {
18+
let tempfile = match (overwrite, rows_to_stream) {
19+
(OverwriteOption::Overwrite(tempfile), Some(rows)) => {
20+
cmd.arg("data")
21+
.arg(format!("tests/data/{}.sas7bdat", base_file_name))
22+
.args(["--format", "parquet"])
23+
.args(["--output", tempfile.as_os_str().to_str().unwrap()])
24+
.args(["--stream-rows", rows.to_string().as_str()])
25+
.arg("--overwrite");
26+
27+
tempfile
28+
}
29+
(OverwriteOption::DoNotOverwrite, Some(rows)) => {
30+
let tempfile = NamedTempFile::new(format!("{}.parquet", base_file_name))?;
31+
32+
cmd.arg("data")
33+
.arg(format!("tests/data/{}.sas7bdat", base_file_name))
34+
.args(["--format", "parquet"])
35+
.args(["--output", tempfile.as_os_str().to_str().unwrap()])
36+
.args(["--stream-rows", rows.to_string().as_str()]);
37+
38+
tempfile
39+
}
40+
(OverwriteOption::Overwrite(tempfile), None) => {
41+
cmd.arg("data")
42+
.arg(format!("tests/data/{}.sas7bdat", base_file_name))
43+
.args(["--format", "parquet"])
44+
.args(["--output", tempfile.as_os_str().to_str().unwrap()])
45+
.arg("--overwrite");
46+
47+
tempfile
48+
}
49+
(OverwriteOption::DoNotOverwrite, None) => {
50+
let tempfile = NamedTempFile::new(format!("{}.parquet", base_file_name))?;
51+
52+
cmd.arg("data")
53+
.arg(format!("tests/data/{}.sas7bdat", base_file_name))
54+
.args(["--format", "parquet"])
55+
.args(["--output", tempfile.as_os_str().to_str().unwrap()]);
56+
57+
tempfile
58+
}
59+
};
60+
61+
Ok((cmd, tempfile))
62+
} else {
63+
Err(From::from("readstat binary does not exist"))
64+
}
6365
}
6466

6567
fn parquet_to_df(path: PathBuf) -> Result<DataFrame, Box<dyn std::error::Error>> {
@@ -72,66 +74,69 @@ fn parquet_to_df(path: PathBuf) -> Result<DataFrame, Box<dyn std::error::Error>>
7274

7375
#[test]
7476
fn cars_to_parquet() {
75-
let (mut cmd, tempfile) =
76-
cli_data_to_parquet("cars", OverwriteOption::DoNotOverwrite, None).unwrap();
77+
if let Ok((mut cmd, tempfile)) =
78+
cli_data_to_parquet("cars", OverwriteOption::DoNotOverwrite, None)
79+
{
80+
cmd.assert().success().stdout(predicate::str::contains(
81+
"In total, wrote 1,081 rows from file cars.sas7bdat into cars.parquet",
82+
));
7783

78-
cmd.assert().success().stdout(predicate::str::contains(
79-
"In total, wrote 1,081 rows from file cars.sas7bdat into cars.parquet",
80-
));
84+
let df = parquet_to_df(tempfile.to_path_buf()).unwrap();
8185

82-
let df = parquet_to_df(tempfile.to_path_buf()).unwrap();
86+
let (height, width) = df.shape();
8387

84-
let (height, width) = df.shape();
88+
assert_eq!(height, 1081);
89+
assert_eq!(width, 13);
8590

86-
assert_eq!(height, 1081);
87-
assert_eq!(width, 13);
88-
89-
tempfile.close().unwrap();
91+
tempfile.close().unwrap();
92+
}
9093
}
9194

9295
#[test]
9396
fn cars_to_parquet_with_streaming() {
94-
let (mut cmd, tempfile) =
95-
cli_data_to_parquet("cars", OverwriteOption::DoNotOverwrite, Some(500)).unwrap();
96-
97-
cmd.assert().success().stdout(predicate::str::contains(
98-
"In total, wrote 1,081 rows from file cars.sas7bdat into cars.parquet",
99-
));
97+
if let Ok((mut cmd, tempfile)) =
98+
cli_data_to_parquet("cars", OverwriteOption::DoNotOverwrite, Some(500))
99+
{
100+
cmd.assert().success().stdout(predicate::str::contains(
101+
"In total, wrote 1,081 rows from file cars.sas7bdat into cars.parquet",
102+
));
100103

101-
let df = parquet_to_df(tempfile.to_path_buf()).unwrap();
104+
let df = parquet_to_df(tempfile.to_path_buf()).unwrap();
102105

103-
let (height, width) = df.shape();
106+
let (height, width) = df.shape();
104107

105-
assert_eq!(height, 1081);
106-
assert_eq!(width, 13);
108+
assert_eq!(height, 1081);
109+
assert_eq!(width, 13);
107110

108-
tempfile.close().unwrap();
111+
tempfile.close().unwrap();
112+
}
109113
}
110114

111115
#[test]
112116
fn cars_to_parquet_overwrite() {
113117
// first stream
114-
let (mut cmd, tempfile) =
115-
cli_data_to_parquet("cars", OverwriteOption::DoNotOverwrite, Some(500)).unwrap();
116-
117-
cmd.assert().success().stdout(predicate::str::contains(
118-
"In total, wrote 1,081 rows from file cars.sas7bdat into cars.parquet",
119-
));
118+
if let Ok((mut cmd, tempfile)) =
119+
cli_data_to_parquet("cars", OverwriteOption::DoNotOverwrite, Some(500))
120+
{
121+
cmd.assert().success().stdout(predicate::str::contains(
122+
"In total, wrote 1,081 rows from file cars.sas7bdat into cars.parquet",
123+
));
120124

121-
// next do not stream
122-
let (mut cmd, tempfile) =
123-
cli_data_to_parquet("cars", OverwriteOption::Overwrite(tempfile), None).unwrap();
125+
// next do not stream
126+
let (mut cmd, tempfile) =
127+
cli_data_to_parquet("cars", OverwriteOption::Overwrite(tempfile), None).unwrap();
124128

125-
cmd.assert().success().stdout(predicate::str::contains(
126-
"In total, wrote 1,081 rows from file cars.sas7bdat into cars.parquet",
127-
));
129+
cmd.assert().success().stdout(predicate::str::contains(
130+
"In total, wrote 1,081 rows from file cars.sas7bdat into cars.parquet",
131+
));
128132

129-
let df = parquet_to_df(tempfile.to_path_buf()).unwrap();
133+
let df = parquet_to_df(tempfile.to_path_buf()).unwrap();
130134

131-
let (height, width) = df.shape();
135+
let (height, width) = df.shape();
132136

133-
assert_eq!(height, 1081);
134-
assert_eq!(width, 13);
137+
assert_eq!(height, 1081);
138+
assert_eq!(width, 13);
135139

136-
tempfile.close().unwrap();
140+
tempfile.close().unwrap();
141+
}
137142
}

0 commit comments

Comments
 (0)