11use :: predicates:: prelude:: * ; // Used for writing assertions
2- use assert_cmd:: prelude :: * ; // Add methods on commands
2+ use assert_cmd:: Command ; // Add methods on commands
33use assert_fs:: NamedTempFile ;
44use polars:: prelude:: * ;
5- use std:: { fs:: File , path:: PathBuf , process :: Command , result:: Result } ;
5+ use std:: { fs:: File , path:: PathBuf , result:: Result } ;
66
77enum 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
6567fn 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]
7476fn 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]
9396fn 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]
112116fn 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