1 use workdir::Workdir;
2 
data(headers: bool) -> Vec<Vec<String>>3 fn data(headers: bool) -> Vec<Vec<String>> {
4     let mut rows = vec![
5         svec!["foobar", "barfoo"],
6         svec!["a", "b"],
7         svec!["barfoo", "foobar"],
8     ];
9     if headers { rows.insert(0, svec!["h1", "h2"]); }
10     rows
11 }
12 
13 #[test]
search()14 fn search() {
15     let wrk = Workdir::new("search");
16     wrk.create("data.csv", data(true));
17     let mut cmd = wrk.command("search");
18     cmd.arg("^foo").arg("data.csv");
19 
20     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
21     let expected = vec![
22         svec!["h1", "h2"],
23         svec!["foobar", "barfoo"],
24         svec!["barfoo", "foobar"],
25     ];
26     assert_eq!(got, expected);
27 }
28 
29 #[test]
search_empty()30 fn search_empty() {
31     let wrk = Workdir::new("search");
32     wrk.create("data.csv", data(true));
33     let mut cmd = wrk.command("search");
34     cmd.arg("xxx").arg("data.csv");
35 
36     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
37     let expected = vec![
38         svec!["h1", "h2"],
39     ];
40     assert_eq!(got, expected);
41 }
42 
43 #[test]
search_empty_no_headers()44 fn search_empty_no_headers() {
45     let wrk = Workdir::new("search");
46     wrk.create("data.csv", data(true));
47     let mut cmd = wrk.command("search");
48     cmd.arg("xxx").arg("data.csv");
49     cmd.arg("--no-headers");
50 
51     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
52     let expected: Vec<Vec<String>> = vec![];
53     assert_eq!(got, expected);
54 }
55 
56 #[test]
search_ignore_case()57 fn search_ignore_case() {
58     let wrk = Workdir::new("search");
59     wrk.create("data.csv", data(true));
60     let mut cmd = wrk.command("search");
61     cmd.arg("^FoO").arg("data.csv");
62     cmd.arg("--ignore-case");
63 
64     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
65     let expected = vec![
66         svec!["h1", "h2"],
67         svec!["foobar", "barfoo"],
68         svec!["barfoo", "foobar"],
69     ];
70     assert_eq!(got, expected);
71 }
72 
73 #[test]
search_no_headers()74 fn search_no_headers() {
75     let wrk = Workdir::new("search_no_headers");
76     wrk.create("data.csv", data(false));
77     let mut cmd = wrk.command("search");
78     cmd.arg("^foo").arg("data.csv");
79     cmd.arg("--no-headers");
80 
81     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
82     let expected = vec![
83         svec!["foobar", "barfoo"],
84         svec!["barfoo", "foobar"],
85     ];
86     assert_eq!(got, expected);
87 }
88 
89 #[test]
search_select()90 fn search_select() {
91     let wrk = Workdir::new("search_select");
92     wrk.create("data.csv", data(true));
93     let mut cmd = wrk.command("search");
94     cmd.arg("^foo").arg("data.csv");
95     cmd.arg("--select").arg("h2");
96 
97     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
98     let expected = vec![
99         svec!["h1", "h2"],
100         svec!["barfoo", "foobar"],
101     ];
102     assert_eq!(got, expected);
103 }
104 
105 #[test]
search_select_no_headers()106 fn search_select_no_headers() {
107     let wrk = Workdir::new("search_select_no_headers");
108     wrk.create("data.csv", data(false));
109     let mut cmd = wrk.command("search");
110     cmd.arg("^foo").arg("data.csv");
111     cmd.arg("--select").arg("2");
112     cmd.arg("--no-headers");
113 
114     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
115     let expected = vec![
116         svec!["barfoo", "foobar"],
117     ];
118     assert_eq!(got, expected);
119 }
120 
121 #[test]
search_invert_match()122 fn search_invert_match() {
123     let wrk = Workdir::new("search_invert_match");
124     wrk.create("data.csv", data(false));
125     let mut cmd = wrk.command("search");
126     cmd.arg("^foo").arg("data.csv");
127     cmd.arg("--invert-match");
128 
129     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
130     let expected = vec![
131         svec!["foobar", "barfoo"],
132         svec!["a", "b"],
133     ];
134     assert_eq!(got, expected);
135 }
136 
137 #[test]
search_invert_match_no_headers()138 fn search_invert_match_no_headers() {
139     let wrk = Workdir::new("search_invert_match");
140     wrk.create("data.csv", data(false));
141     let mut cmd = wrk.command("search");
142     cmd.arg("^foo").arg("data.csv");
143     cmd.arg("--invert-match");
144     cmd.arg("--no-headers");
145 
146     let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
147     let expected = vec![
148         svec!["a", "b"],
149     ];
150     assert_eq!(got, expected);
151 }
152