on master help sign in
Tests ~ add instrumentation to visualize text differences in failing tests
commit01af28b781889a4cc52f563a6c4375422f48a336 authorRoy Ivy III <rivy.dev@gmail.com> dateTue 26 May 2020, 22:05 (6 years ago) parent3a7743f
1 file changed+235−86
tests/integration_tests.rs+235−86
tests/integration_tests.rs+235−86
@@ -24,9 +24,14 @@ fn bat() -> Command {
2424
2525#[test]
2626fn basic() {
27− bat()
27+ let assert = bat()
2828 .arg("test.txt")
29− .assert()
29+ .assert();
30+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
31+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
32+ println!("stdout={:#?}", stdout);
33+ println!("stderr={:#?}", stderr);
34+ assert
3035 .success()
3136 .stdout("hello world\n")
3237 .stderr("");
@@ -34,168 +39,216 @@ fn basic() {
3439
3540#[test]
3641fn stdin() {
37− bat()
42+ let assert = bat()
3843 .write_stdin("foo\nbar\n")
39− .assert()
44+ .assert();
45+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
46+ println!("stdout={:#?}", stdout);
47+ assert
4048 .success()
4149 .stdout("foo\nbar\n");
4250}
4351
4452#[test]
4553fn concatenate() {
46− bat()
54+ let assert = bat()
4755 .arg("test.txt")
4856 .arg("test.txt")
49− .assert()
57+ .assert();
58+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
59+ println!("stdout={:#?}", stdout);
60+ assert
5061 .success()
5162 .stdout("hello world\nhello world\n");
5263}
5364
5465#[test]
5566fn concatenate_stdin() {
56− bat()
67+ let assert = bat()
5768 .arg("test.txt")
5869 .arg("-")
5970 .arg("test.txt")
6071 .write_stdin("stdin\n")
61− .assert()
72+ .assert();
73+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
74+ println!("stdout={:#?}", stdout);
75+ assert
6276 .success()
6377 .stdout("hello world\nstdin\nhello world\n");
6478}
6579
6680#[test]
6781fn concatenate_empty_first() {
68− bat()
82+ let assert = bat()
6983 .arg("empty.txt")
7084 .arg("test.txt")
71− .assert()
85+ .assert();
86+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
87+ println!("stdout={:#?}", stdout);
88+ assert
7289 .success()
7390 .stdout("hello world\n");
7491}
7592
7693#[test]
7794fn concatenate_empty_last() {
78− bat()
95+ let assert = bat()
7996 .arg("test.txt")
8097 .arg("empty.txt")
81− .assert()
98+ .assert();
99+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
100+ println!("stdout={:#?}", stdout);
101+ assert
82102 .success()
83103 .stdout("hello world\n");
84104}
85105
86106#[test]
87107fn concatenate_empty_both() {
88− bat()
108+ let assert = bat()
89109 .arg("empty.txt")
90110 .arg("empty.txt")
91− .assert()
111+ .assert();
112+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
113+ println!("stdout={:#?}", stdout);
114+ assert
92115 .success()
93116 .stdout("");
94117}
95118
96119#[test]
97120fn concatenate_empty_between() {
98− bat()
121+ let assert = bat()
99122 .arg("test.txt")
100123 .arg("empty.txt")
101124 .arg("test.txt")
102− .assert()
125+ .assert();
126+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
127+ println!("stdout={:#?}", stdout);
128+ assert
103129 .success()
104130 .stdout("hello world\nhello world\n");
105131}
106132
107133#[test]
108134fn concatenate_empty_first_and_last() {
109− bat()
135+ let assert = bat()
110136 .arg("empty.txt")
111137 .arg("test.txt")
112138 .arg("empty.txt")
113− .assert()
139+ .assert();
140+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
141+ println!("stdout={:#?}", stdout);
142+ assert
114143 .success()
115144 .stdout("hello world\n");
116145}
117146
118147#[test]
119148fn concatenate_single_line() {
120− bat()
149+ let assert = bat()
121150 .arg("single-line.txt")
122151 .arg("single-line.txt")
123− .assert()
152+ .assert();
153+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
154+ println!("stdout={:#?}", stdout);
155+ assert
124156 .success()
125157 .stdout("Single LineSingle Line");
126158}
127159
128160#[test]
129161fn concatenate_single_line_empty() {
130− bat()
162+ let assert = bat()
131163 .arg("single-line.txt")
132164 .arg("empty.txt")
133165 .arg("single-line.txt")
134− .assert()
166+ .assert();
167+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
168+ println!("stdout={:#?}", stdout);
169+ assert
135170 .success()
136171 .stdout("Single LineSingle Line");
137172}
138173
139174#[test]
140175fn line_numbers() {
141− bat()
176+ let assert = bat()
142177 .arg("multiline.txt")
143178 .arg("--style=numbers")
144179 .arg("--decorations=always")
145− .assert()
180+ .assert();
181+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
182+ println!("stdout={:#?}", stdout);
183+ assert
146184 .success()
147185 .stdout(" 1 line 1\n 2 line 2\n 3 line 3\n 4 line 4\n");
148186}
149187
150188#[test]
151189fn line_range_2_3() {
152− bat()
190+ let assert = bat()
153191 .arg("multiline.txt")
154192 .arg("--line-range=2:3")
155− .assert()
193+ .assert();
194+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
195+ println!("stdout={:#?}", stdout);
196+ assert
156197 .success()
157198 .stdout("line 2\nline 3\n");
158199}
159200
160201#[test]
161202fn line_range_first_two() {
162− bat()
203+ let assert = bat()
163204 .arg("multiline.txt")
164205 .arg("--line-range=:2")
165− .assert()
206+ .assert();
207+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
208+ println!("stdout={:#?}", stdout);
209+ assert
166210 .success()
167211 .stdout("line 1\nline 2\n");
168212}
169213
170214#[test]
171215fn line_range_last_3() {
172− bat()
216+ let assert = bat()
173217 .arg("multiline.txt")
174218 .arg("--line-range=2:")
175− .assert()
219+ .assert();
220+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
221+ println!("stdout={:#?}", stdout);
222+ assert
176223 .success()
177224 .stdout("line 2\nline 3\nline 4\n");
178225}
179226
180227#[test]
181228fn line_range_multiple() {
182− bat()
229+ let assert = bat()
183230 .arg("multiline.txt")
184231 .arg("--line-range=1:2")
185232 .arg("--line-range=4:4")
186− .assert()
233+ .assert();
234+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
235+ println!("stdout={:#?}", stdout);
236+ assert
187237 .success()
188238 .stdout("line 1\nline 2\nline 4\n");
189239}
190240
191241#[test]
192242fn tabs_numbers() {
193− bat()
243+ let assert = bat()
194244 .arg("tabs.txt")
195245 .arg("--tabs=4")
196246 .arg("--style=numbers")
197247 .arg("--decorations=always")
198− .assert()
248+ .assert();
249+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
250+ println!("stdout={:#?}", stdout);
251+ assert
199252 .success()
200253 .stdout(
201254 " 1 1 2 3 4
@@ -213,12 +266,15 @@ fn tabs_numbers() {
213266
214267#[test]
215268fn tabs_passthrough_wrapped() {
216− bat()
269+ let assert = bat()
217270 .arg("tabs.txt")
218271 .arg("--tabs=0")
219272 .arg("--style=plain")
220273 .arg("--decorations=always")
221− .assert()
274+ .assert();
275+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
276+ println!("stdout={:#?}", stdout);
277+ assert
222278 .success()
223279 .stdout(
224280 " 1 2 3 4
@@ -236,12 +292,15 @@ fn tabs_passthrough_wrapped() {
236292
237293#[test]
238294fn tabs_4_wrapped() {
239− bat()
295+ let assert = bat()
240296 .arg("tabs.txt")
241297 .arg("--tabs=4")
242298 .arg("--style=plain")
243299 .arg("--decorations=always")
244− .assert()
300+ .assert();
301+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
302+ println!("stdout={:#?}", stdout);
303+ assert
245304 .success()
246305 .stdout(
247306 " 1 2 3 4
@@ -259,12 +318,15 @@ fn tabs_4_wrapped() {
259318
260319#[test]
261320fn tabs_8_wrapped() {
262− bat()
321+ let assert = bat()
263322 .arg("tabs.txt")
264323 .arg("--tabs=8")
265324 .arg("--style=plain")
266325 .arg("--decorations=always")
267− .assert()
326+ .assert();
327+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
328+ println!("stdout={:#?}", stdout);
329+ assert
268330 .success()
269331 .stdout(
270332 " 1 2 3 4
@@ -282,12 +344,15 @@ fn tabs_8_wrapped() {
282344
283345#[test]
284346fn tabs_passthrough() {
285− bat()
347+ let assert = bat()
286348 .arg("tabs.txt")
287349 .arg("--tabs=0")
288350 .arg("--style=plain")
289351 .arg("--decorations=always")
290− .assert()
352+ .assert();
353+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
354+ println!("stdout={:#?}", stdout);
355+ assert
291356 .success()
292357 .stdout(
293358 " 1 2 3 4
@@ -305,12 +370,15 @@ fn tabs_passthrough() {
305370
306371#[test]
307372fn tabs_4() {
308− bat()
373+ let assert = bat()
309374 .arg("tabs.txt")
310375 .arg("--tabs=4")
311376 .arg("--style=plain")
312377 .arg("--decorations=always")
313− .assert()
378+ .assert();
379+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
380+ println!("stdout={:#?}", stdout);
381+ assert
314382 .success()
315383 .stdout(
316384 " 1 2 3 4
@@ -328,12 +396,15 @@ fn tabs_4() {
328396
329397#[test]
330398fn tabs_8() {
331− bat()
399+ let assert = bat()
332400 .arg("tabs.txt")
333401 .arg("--tabs=8")
334402 .arg("--style=plain")
335403 .arg("--decorations=always")
336− .assert()
404+ .assert();
405+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
406+ println!("stdout={:#?}", stdout);
407+ assert
337408 .success()
338409 .stdout(
339410 " 1 2 3 4
@@ -361,65 +432,83 @@ fn fail_directory() {
361432
362433#[test]
363434fn do_not_exit_directory() {
364− bat()
435+ let assert = bat()
365436 .arg("sub_directory")
366437 .arg("test.txt")
367− .assert()
438+ .assert();
439+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
440+ println!("stdout={:#?}", stdout);
441+ assert
368442 .stdout("hello world\n")
369443 .failure();
370444}
371445
372446#[test]
373447fn pager_basic() {
374− bat()
448+ let assert = bat()
375449 .env("PAGER", "printf pager-output")
376450 .arg("--paging=always")
377451 .arg("test.txt")
378− .assert()
452+ .assert();
453+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
454+ println!("stdout={:#?}", stdout);
455+ assert
379456 .success()
380457 .stdout("pager-output");
381458}
382459
383460#[test]
384461fn pager_overwrite() {
385− bat()
462+ let assert = bat()
386463 .env("PAGER", "printf other-pager")
387464 .env("BAT_PAGER", "printf pager-output")
388465 .arg("--paging=always")
389466 .arg("test.txt")
390− .assert()
467+ .assert();
468+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
469+ println!("stdout={:#?}", stdout);
470+ assert
391471 .success()
392472 .stdout("pager-output");
393473}
394474
395475#[test]
396476fn pager_disable() {
397− bat()
477+ let assert = bat()
398478 .env("PAGER", "printf other-pager")
399479 .env("BAT_PAGER", "")
400480 .arg("--paging=always")
401481 .arg("test.txt")
402− .assert()
482+ .assert();
483+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
484+ println!("stdout={:#?}", stdout);
485+ assert
403486 .success()
404487 .stdout("hello world\n");
405488}
406489
407490#[test]
408491fn config_location_test() {
409− bat_with_config()
492+ let assert = bat_with_config()
410493 .env("BAT_CONFIG_PATH", "bat.conf")
411494 .arg("--config-file")
412− .assert()
495+ .assert();
496+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
497+ println!("stdout={:#?}", stdout);
498+ assert
413499 .success()
414500 .stdout("bat.conf\n");
415501}
416502
417503#[test]
418504fn config_read_arguments_from_file() {
419− bat_with_config()
505+ let assert = bat_with_config()
420506 .env("BAT_CONFIG_PATH", "bat.conf")
421507 .arg("test.txt")
422− .assert()
508+ .assert();
509+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
510+ println!("stdout={:#?}", stdout);
511+ assert
423512 .success()
424513 .stdout("dummy-pager-from-config");
425514}
@@ -427,20 +516,28 @@ fn config_read_arguments_from_file() {
427516#[test]
428517fn utf16() {
429518 // The output will be converted to UTF-8 with a leading UTF-8 BOM
430− bat()
519+ let assert = bat()
431520 .arg("--plain")
432521 .arg("--decorations=always")
433522 .arg("test_UTF-16LE.txt")
434− .assert()
523+ .assert();
524+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
525+ println!("stdout={:#?}", stdout);
526+ assert
435527 .success()
436528 .stdout(std::str::from_utf8(b"\xEF\xBB\xBFhello world\n").unwrap());
437529}
438530
439531#[test]
440532fn can_print_file_named_cache() {
441− bat_with_config()
533+ let assert = bat_with_config()
442534 .arg("cache")
443− .assert()
535+ .assert();
536+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
537+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
538+ println!("stdout={:#?}", stdout);
539+ println!("stderr={:#?}", stderr);
540+ assert
444541 .success()
445542 .stdout("test\n")
446543 .stderr("");
@@ -448,10 +545,15 @@ fn can_print_file_named_cache() {
448545
449546#[test]
450547fn can_print_file_named_cache_with_additional_argument() {
451− bat_with_config()
548+ let assert = bat_with_config()
452549 .arg("cache")
453550 .arg("test.txt")
454− .assert()
551+ .assert();
552+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
553+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
554+ println!("stdout={:#?}", stdout);
555+ println!("stderr={:#?}", stderr);
556+ assert
455557 .success()
456558 .stdout("test\nhello world\n")
457559 .stderr("");
@@ -459,9 +561,14 @@ fn can_print_file_named_cache_with_additional_argument() {
459561
460562#[test]
461563fn can_print_file_starting_with_cache() {
462− bat_with_config()
564+ let assert = bat_with_config()
463565 .arg("cache.c")
464− .assert()
566+ .assert();
567+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
568+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
569+ println!("stdout={:#?}", stdout);
570+ println!("stderr={:#?}", stderr);
571+ assert
465572 .success()
466573 .stdout("test\n")
467574 .stderr("");
@@ -474,12 +581,15 @@ fn does_not_print_unwanted_file_named_cache() {
474581
475582#[test]
476583fn unicode_wrap() {
477− bat_with_config()
584+ let assert = bat_with_config()
478585 .arg("unicode-wrap.txt")
479586 .arg("--style=numbers,snip")
480587 .arg("--decorations=always")
481588 .arg("--terminal-width=40")
482− .assert()
589+ .assert();
590+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
591+ println!("stdout={:#?}", stdout);
592+ assert
483593 .success()
484594 .stdout(
485595 " 1 ビタミンA ビタミンD ビタミンE ビ
@@ -516,14 +626,17 @@ fn unicode_wrap() {
516626
517627#[test]
518628fn snip() {
519− bat()
629+ let assert = bat()
520630 .arg("multiline.txt")
521631 .arg("--style=numbers,snip")
522632 .arg("--decorations=always")
523633 .arg("--line-range=1:2")
524634 .arg("--line-range=4:")
525635 .arg("--terminal-width=80")
526− .assert()
636+ .assert();
637+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
638+ println!("stdout={:#?}", stdout);
639+ assert
527640 .success()
528641 .stdout(
529642 " 1 line 1
@@ -536,25 +649,33 @@ fn snip() {
536649
537650#[test]
538651fn empty_file_leads_to_empty_output_with_grid_enabled() {
539− bat()
652+ let assert = bat()
540653 .arg("empty.txt")
541654 .arg("--style=grid")
542655 .arg("--decorations=always")
543656 .arg("--terminal-width=80")
544− .assert()
657+ .assert();
658+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
659+ println!("stdout={:#?}", stdout);
660+ assert
545661 .success()
546662 .stdout("");
547663}
548664
549665#[test]
550666fn filename_basic() {
551− bat()
667+ let assert = bat()
552668 .arg("test.txt")
553669 .arg("--decorations=always")
554670 .arg("--style=header")
555671 .arg("-r=0:0")
556672 .arg("--file-name=foo")
557− .assert()
673+ .assert();
674+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
675+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
676+ println!("stdout={:#?}", stdout);
677+ println!("stderr={:#?}", stderr);
678+ assert
558679 .success()
559680 .stdout("File: foo\n")
560681 .stderr("");
@@ -562,13 +683,18 @@ fn filename_basic() {
562683
563684#[test]
564685fn filename_binary() {
565− bat()
686+ let assert = bat()
566687 .arg("test.binary")
567688 .arg("--decorations=always")
568689 .arg("--style=header")
569690 .arg("-r=0:0")
570691 .arg("--file-name=foo")
571− .assert()
692+ .assert();
693+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
694+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
695+ println!("stdout={:#?}", stdout);
696+ println!("stderr={:#?}", stderr);
697+ assert
572698 .success()
573699 .stdout("File: foo <BINARY>\n")
574700 .stderr("");
@@ -576,14 +702,19 @@ fn filename_binary() {
576702
577703#[test]
578704fn filename_stdin() {
579− bat()
705+ let assert = bat()
580706 .arg("--decorations=always")
581707 .arg("--style=header")
582708 .arg("-r=0:0")
583709 .arg("-")
584710 .write_stdin("stdin\n")
585711 .arg("--file-name=foo")
586− .assert()
712+ .assert();
713+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
714+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
715+ println!("stdout={:#?}", stdout);
716+ println!("stderr={:#?}", stderr);
717+ assert
587718 .success()
588719 .stdout("File: foo\n")
589720 .stderr("");
@@ -592,12 +723,17 @@ fn filename_stdin() {
592723#[test]
593724fn filename_stdin_binary() {
594725 let vec = vec![0; 1];
595− bat_with_config()
726+ let assert = bat_with_config()
596727 .arg("--decorations=always")
597728 .arg("--style=header")
598729 .write_stdin(vec)
599730 .arg("--file-name=foo")
600− .assert()
731+ .assert();
732+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
733+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
734+ println!("stdout={:#?}", stdout);
735+ println!("stderr={:#?}", stderr);
736+ assert
601737 .success()
602738 .stdout("File: foo <BINARY>\n")
603739 .stderr("");
@@ -605,7 +741,7 @@ fn filename_stdin_binary() {
605741
606742#[test]
607743fn filename_multiple_ok() {
608− bat()
744+ let assert = bat()
609745 .arg("--decorations=always")
610746 .arg("--style=header")
611747 .arg("-r=0:0")
@@ -613,7 +749,12 @@ fn filename_multiple_ok() {
613749 .arg("--file-name=foo")
614750 .arg("single-line.txt")
615751 .arg("--file-name=bar")
616− .assert()
752+ .assert();
753+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
754+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
755+ println!("stdout={:#?}", stdout);
756+ println!("stderr={:#?}", stderr);
757+ assert
617758 .success()
618759 .stdout("File: foo\n\nFile: bar\n")
619760 .stderr("");
@@ -634,12 +775,17 @@ fn filename_multiple_err() {
634775
635776#[test]
636777fn header_padding() {
637− bat()
778+ let assert = bat()
638779 .arg("--decorations=always")
639780 .arg("--style=header")
640781 .arg("test.txt")
641782 .arg("single-line.txt")
642− .assert()
783+ .assert();
784+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
785+ let stderr = String::from_utf8_lossy(&assert.get_output().stderr);
786+ println!("stdout={:#?}", stdout);
787+ println!("stderr={:#?}", stderr);
788+ assert
643789 .stdout("File: test.txt\nhello world\n\nFile: single-line.txt\nSingle Line\n")
644790 .stderr("");
645791}
@@ -663,9 +809,12 @@ fn file_with_invalid_utf8_filename() {
663809 writeln!(file, "dummy content").expect("can write to file");
664810 }
665811
666− bat()
812+ let assert = bat()
667813 .arg(file_path.as_os_str())
668− .assert()
814+ .assert();
815+ let stdout = String::from_utf8_lossy(&assert.get_output().stdout);
816+ println!("stdout={:#?}", stdout);
817+ assert
669818 .success()
670819 .stdout("dummy content\n");
671820}