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