2020-11-24 20:01:17 +00:00
use assert_cmd ::Command ;
2020-09-20 18:47:21 +00:00
use predicates ::{ prelude ::predicate , str ::PredicateStrExt } ;
2020-05-13 09:51:49 +00:00
use std ::path ::Path ;
use std ::str ::from_utf8 ;
const EXAMPLES_DIR : & str = " tests/examples " ;
2018-11-02 17:33:06 +00:00
2020-11-24 20:01:17 +00:00
fn bat_with_config ( ) -> Command {
2020-03-06 23:01:35 +00:00
let mut cmd = Command ::cargo_bin ( " bat " ) . unwrap ( ) ;
2018-10-10 20:56:56 +00:00
cmd . current_dir ( " tests/examples " ) ;
2018-10-17 18:44:15 +00:00
cmd . env_remove ( " PAGER " ) ;
cmd . env_remove ( " BAT_PAGER " ) ;
2018-11-04 09:46:56 +00:00
cmd . env_remove ( " BAT_CONFIG_PATH " ) ;
2018-11-04 09:50:28 +00:00
cmd . env_remove ( " BAT_STYLE " ) ;
cmd . env_remove ( " BAT_THEME " ) ;
cmd . env_remove ( " BAT_TABS " ) ;
2018-11-04 09:46:56 +00:00
cmd
}
2020-11-24 20:01:17 +00:00
fn bat ( ) -> Command {
2018-11-04 09:46:56 +00:00
let mut cmd = bat_with_config ( ) ;
cmd . arg ( " --no-config " ) ;
2018-10-10 20:56:56 +00:00
cmd
}
#[ test ]
fn basic ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-10 20:56:56 +00:00
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-10 20:56:56 +00:00
. success ( )
. stdout ( " hello world \n " )
. stderr ( " " ) ;
}
#[ test ]
fn stdin ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-03-06 23:01:35 +00:00
. write_stdin ( " foo \n bar \n " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-10 20:56:56 +00:00
. success ( )
. stdout ( " foo \n bar \n " ) ;
}
#[ test ]
fn concatenate ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-10 20:56:56 +00:00
. arg ( " test.txt " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-10 20:56:56 +00:00
. success ( )
. stdout ( " hello world \n hello world \n " ) ;
}
#[ test ]
fn concatenate_stdin ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-10 20:56:56 +00:00
. arg ( " test.txt " )
. arg ( " - " )
. arg ( " test.txt " )
2020-03-06 23:01:35 +00:00
. write_stdin ( " stdin \n " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-10 20:56:56 +00:00
. success ( )
. stdout ( " hello world \n stdin \n hello world \n " ) ;
}
2019-02-08 03:27:48 +00:00
#[ test ]
fn concatenate_empty_first ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2019-02-08 03:27:48 +00:00
. arg ( " empty.txt " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-02-08 03:27:48 +00:00
. success ( )
. stdout ( " hello world \n " ) ;
}
#[ test ]
fn concatenate_empty_last ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2019-02-08 03:27:48 +00:00
. arg ( " test.txt " )
. arg ( " empty.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-02-08 03:27:48 +00:00
. success ( )
. stdout ( " hello world \n " ) ;
}
#[ test ]
fn concatenate_empty_both ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2019-02-08 03:27:48 +00:00
. arg ( " empty.txt " )
. arg ( " empty.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-02-08 03:27:48 +00:00
. success ( )
. stdout ( " " ) ;
}
#[ test ]
fn concatenate_empty_between ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2019-02-08 03:27:48 +00:00
. arg ( " test.txt " )
. arg ( " empty.txt " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-02-08 03:27:48 +00:00
. success ( )
. stdout ( " hello world \n hello world \n " ) ;
}
#[ test ]
fn concatenate_empty_first_and_last ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2019-02-08 03:27:48 +00:00
. arg ( " empty.txt " )
. arg ( " test.txt " )
. arg ( " empty.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-02-08 03:27:48 +00:00
. success ( )
. stdout ( " hello world \n " ) ;
}
2019-02-10 07:52:38 +00:00
#[ test ]
fn concatenate_single_line ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2019-02-10 07:52:38 +00:00
. arg ( " single-line.txt " )
. arg ( " single-line.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-02-10 07:52:38 +00:00
. success ( )
. stdout ( " Single LineSingle Line " ) ;
}
#[ test ]
fn concatenate_single_line_empty ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2019-02-10 07:52:38 +00:00
. arg ( " single-line.txt " )
. arg ( " empty.txt " )
. arg ( " single-line.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-02-10 07:52:38 +00:00
. success ( )
. stdout ( " Single LineSingle Line " ) ;
}
2018-10-10 20:56:56 +00:00
#[ test ]
fn line_numbers ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-10 20:56:56 +00:00
. arg ( " multiline.txt " )
. arg ( " --style=numbers " )
. arg ( " --decorations=always " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-10 20:56:56 +00:00
. success ( )
. stdout ( " 1 line 1 \n 2 line 2 \n 3 line 3 \n 4 line 4 \n " ) ;
}
#[ test ]
fn line_range_2_3 ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-10 20:56:56 +00:00
. arg ( " multiline.txt " )
. arg ( " --line-range=2:3 " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-10 20:56:56 +00:00
. success ( )
. stdout ( " line 2 \n line 3 \n " ) ;
}
#[ test ]
fn line_range_first_two ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-10 20:56:56 +00:00
. arg ( " multiline.txt " )
. arg ( " --line-range=:2 " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-10 20:56:56 +00:00
. success ( )
. stdout ( " line 1 \n line 2 \n " ) ;
}
#[ test ]
fn line_range_last_3 ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-10 20:56:56 +00:00
. arg ( " multiline.txt " )
. arg ( " --line-range=2: " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-10 20:56:56 +00:00
. success ( )
. stdout ( " line 2 \n line 3 \n line 4 \n " ) ;
}
2018-10-19 22:10:10 +00:00
#[ test ]
fn line_range_multiple ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-19 22:10:10 +00:00
. arg ( " multiline.txt " )
. arg ( " --line-range=1:2 " )
. arg ( " --line-range=4:4 " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-19 22:10:10 +00:00
. success ( )
. stdout ( " line 1 \n line 2 \n line 4 \n " ) ;
}
2018-10-18 12:27:04 +00:00
#[ test ]
fn tabs_numbers ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-18 12:27:04 +00:00
. arg ( " tabs.txt " )
. arg ( " --tabs=4 " )
. arg ( " --style=numbers " )
. arg ( " --decorations=always " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-18 12:27:04 +00:00
. success ( )
2018-10-19 00:55:50 +00:00
. stdout (
" 1 1 2 3 4
2018-10-18 12:35:10 +00:00
2 1 ?
3 22 ?
4 333 ?
5 4444 ?
6 55555 ?
7 666666 ?
8 7777777 ?
9 88888888 ?
2018-10-19 00:55:50 +00:00
" ,
) ;
2018-10-18 12:27:04 +00:00
}
2018-10-14 14:22:59 +00:00
#[ test ]
fn tabs_passthrough_wrapped ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-15 15:22:23 +00:00
. arg ( " tabs.txt " )
. arg ( " --tabs=0 " )
. arg ( " --style=plain " )
. arg ( " --decorations=always " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-15 15:22:23 +00:00
. success ( )
2018-10-19 00:55:50 +00:00
. stdout (
" 1 2 3 4
2018-10-15 15:22:23 +00:00
1 ?
22 ?
333 ?
4444 ?
55555 ?
666666 ?
7777777 ?
88888888 ?
2018-10-19 00:55:50 +00:00
" ,
) ;
2018-10-14 14:22:59 +00:00
}
#[ test ]
fn tabs_4_wrapped ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-15 15:22:23 +00:00
. arg ( " tabs.txt " )
. arg ( " --tabs=4 " )
. arg ( " --style=plain " )
. arg ( " --decorations=always " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-15 15:22:23 +00:00
. success ( )
2018-10-19 00:55:50 +00:00
. stdout (
" 1 2 3 4
2018-10-15 15:22:23 +00:00
1 ?
22 ?
333 ?
4444 ?
55555 ?
666666 ?
7777777 ?
88888888 ?
2018-10-19 00:55:50 +00:00
" ,
) ;
2018-10-14 14:22:59 +00:00
}
#[ test ]
fn tabs_8_wrapped ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-15 15:22:23 +00:00
. arg ( " tabs.txt " )
. arg ( " --tabs=8 " )
. arg ( " --style=plain " )
. arg ( " --decorations=always " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-15 15:22:23 +00:00
. success ( )
2018-10-19 00:55:50 +00:00
. stdout (
" 1 2 3 4
2018-10-15 15:22:23 +00:00
1 ?
22 ?
333 ?
4444 ?
55555 ?
666666 ?
7777777 ?
88888888 ?
2018-10-19 00:55:50 +00:00
" ,
) ;
2018-10-14 14:22:59 +00:00
}
#[ test ]
fn tabs_passthrough ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-15 15:22:23 +00:00
. arg ( " tabs.txt " )
. arg ( " --tabs=0 " )
. arg ( " --style=plain " )
. arg ( " --decorations=always " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-15 15:22:23 +00:00
. success ( )
2018-10-19 00:55:50 +00:00
. stdout (
" 1 2 3 4
2018-10-15 15:22:23 +00:00
1 ?
22 ?
333 ?
4444 ?
55555 ?
666666 ?
7777777 ?
88888888 ?
2018-10-19 00:55:50 +00:00
" ,
) ;
2018-10-14 14:22:59 +00:00
}
#[ test ]
fn tabs_4 ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-15 15:22:23 +00:00
. arg ( " tabs.txt " )
. arg ( " --tabs=4 " )
. arg ( " --style=plain " )
. arg ( " --decorations=always " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-15 15:22:23 +00:00
. success ( )
2018-10-19 00:55:50 +00:00
. stdout (
" 1 2 3 4
2018-10-15 15:22:23 +00:00
1 ?
22 ?
333 ?
4444 ?
55555 ?
666666 ?
7777777 ?
88888888 ?
2018-10-19 00:55:50 +00:00
" ,
) ;
2018-10-14 14:22:59 +00:00
}
#[ test ]
fn tabs_8 ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-15 15:22:23 +00:00
. arg ( " tabs.txt " )
. arg ( " --tabs=8 " )
. arg ( " --style=plain " )
. arg ( " --decorations=always " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-15 15:22:23 +00:00
. success ( )
2018-10-19 00:55:50 +00:00
. stdout (
" 1 2 3 4
2018-10-15 15:22:23 +00:00
1 ?
22 ?
333 ?
4444 ?
55555 ?
666666 ?
7777777 ?
88888888 ?
2018-10-19 00:55:50 +00:00
" ,
) ;
2018-10-14 14:22:59 +00:00
}
2018-10-10 20:56:56 +00:00
#[ test ]
fn fail_non_existing ( ) {
bat ( ) . arg ( " non-existing-file " ) . assert ( ) . failure ( ) ;
}
#[ test ]
fn fail_directory ( ) {
bat ( ) . arg ( " sub_directory " ) . assert ( ) . failure ( ) ;
}
2018-10-11 19:54:19 +00:00
#[ test ]
fn do_not_exit_directory ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2018-10-11 19:54:19 +00:00
. arg ( " sub_directory " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-11 19:54:19 +00:00
. stdout ( " hello world \n " )
. failure ( ) ;
}
2018-10-17 18:44:15 +00:00
#[ test ]
fn pager_basic ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-05-28 03:30:51 +00:00
. env ( " PAGER " , " echo pager-output " )
2018-10-17 18:44:15 +00:00
. arg ( " --paging=always " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-17 18:44:15 +00:00
. success ( )
2020-05-28 14:43:51 +00:00
. stdout ( predicate ::eq ( " pager-output \n " ) . normalize ( ) ) ;
2018-10-17 18:44:15 +00:00
}
#[ test ]
fn pager_overwrite ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-05-28 03:30:51 +00:00
. env ( " PAGER " , " echo other-pager " )
. env ( " BAT_PAGER " , " echo pager-output " )
2018-10-17 18:44:15 +00:00
. arg ( " --paging=always " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-17 18:44:15 +00:00
. success ( )
2020-05-28 14:43:51 +00:00
. stdout ( predicate ::eq ( " pager-output \n " ) . normalize ( ) ) ;
2018-10-17 18:44:15 +00:00
}
#[ test ]
fn pager_disable ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-05-28 03:30:51 +00:00
. env ( " PAGER " , " echo other-pager " )
2018-10-17 18:44:15 +00:00
. env ( " BAT_PAGER " , " " )
. arg ( " --paging=always " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-10-17 18:44:15 +00:00
. success ( )
2020-05-28 14:43:51 +00:00
. stdout ( predicate ::eq ( " hello world \n " ) . normalize ( ) ) ;
2018-10-17 18:44:15 +00:00
}
2018-11-01 15:48:56 +00:00
2020-10-25 09:13:57 +00:00
#[ test ]
fn pager_value_bat ( ) {
bat ( )
. arg ( " --pager=bat " )
. arg ( " --paging=always " )
. arg ( " test.txt " )
. assert ( )
. failure ( ) ;
}
2020-11-27 05:47:46 +00:00
#[ test ]
fn pager_most ( ) {
bat ( )
. env ( " PAGER " , " most " )
. arg ( " --paging=always " )
. arg ( " test.txt " )
. assert ( )
. success ( )
. stderr ( predicate ::eq ( " WARNING: Ignoring PAGER= \" most \" : Coloring not supported. Override with BAT_PAGER= \" most \" or --pager \" most \" \n " ) . normalize ( ) )
. stdout ( predicate ::eq ( " hello world \n " ) . normalize ( ) ) ;
}
#[ test ]
fn pager_most_with_arg ( ) {
bat ( )
. env ( " PAGER " , " most -w " )
. arg ( " --paging=always " )
. arg ( " test.txt " )
. assert ( )
. success ( )
. stderr ( predicate ::eq ( " WARNING: Ignoring PAGER= \" most -w \" : Coloring not supported. Override with BAT_PAGER= \" most -w \" or --pager \" most -w \" \n " ) . normalize ( ) )
. stdout ( predicate ::eq ( " hello world \n " ) . normalize ( ) ) ;
}
2020-06-30 19:41:50 +00:00
#[ test ]
fn alias_pager_disable ( ) {
bat ( )
. env ( " PAGER " , " echo other-pager " )
. arg ( " -P " )
. arg ( " test.txt " )
. assert ( )
. success ( )
. stdout ( predicate ::eq ( " hello world \n " ) . normalize ( ) ) ;
}
#[ test ]
fn alias_pager_disable_long_overrides_short ( ) {
bat ( )
. env ( " PAGER " , " echo pager-output " )
. arg ( " -P " )
. arg ( " --paging=always " )
. arg ( " test.txt " )
. assert ( )
. success ( )
. stdout ( predicate ::eq ( " pager-output \n " ) . normalize ( ) ) ;
}
2018-11-01 15:48:56 +00:00
#[ test ]
fn config_location_test ( ) {
2020-06-01 21:50:24 +00:00
bat_with_config ( )
2018-11-01 15:48:56 +00:00
. env ( " BAT_CONFIG_PATH " , " bat.conf " )
. arg ( " --config-file " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-11-01 15:48:56 +00:00
. success ( )
. stdout ( " bat.conf \n " ) ;
}
#[ test ]
2018-11-04 09:56:31 +00:00
fn config_read_arguments_from_file ( ) {
2020-06-01 21:50:24 +00:00
bat_with_config ( )
2018-11-01 15:48:56 +00:00
. env ( " BAT_CONFIG_PATH " , " bat.conf " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2018-11-01 15:48:56 +00:00
. success ( )
2020-05-28 14:43:51 +00:00
. stdout ( predicate ::eq ( " dummy-pager-from-config \n " ) . normalize ( ) ) ;
2018-11-01 15:48:56 +00:00
}
2019-02-10 08:19:38 +00:00
#[ test ]
fn utf16 ( ) {
// The output will be converted to UTF-8 with a leading UTF-8 BOM
2020-06-01 21:50:24 +00:00
bat ( )
2019-02-10 08:19:38 +00:00
. arg ( " --plain " )
. arg ( " --decorations=always " )
. arg ( " test_UTF-16LE.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-02-10 08:19:38 +00:00
. success ( )
. stdout ( std ::str ::from_utf8 ( b " \xEF \xBB \xBF hello world \n " ) . unwrap ( ) ) ;
}
2019-05-10 19:02:08 +00:00
#[ test ]
fn can_print_file_named_cache ( ) {
2020-06-01 21:50:24 +00:00
bat_with_config ( )
2019-05-10 19:02:08 +00:00
. arg ( " cache " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-05-10 19:02:08 +00:00
. success ( )
. stdout ( " test \n " )
. stderr ( " " ) ;
}
2019-09-21 07:10:12 +00:00
#[ test ]
fn can_print_file_named_cache_with_additional_argument ( ) {
2020-06-01 21:50:24 +00:00
bat_with_config ( )
2019-09-21 07:10:12 +00:00
. arg ( " cache " )
. arg ( " test.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-09-21 07:10:12 +00:00
. success ( )
. stdout ( " test \n hello world \n " )
. stderr ( " " ) ;
}
2019-08-31 12:13:19 +00:00
#[ test ]
fn can_print_file_starting_with_cache ( ) {
2020-06-01 21:50:24 +00:00
bat_with_config ( )
2019-08-31 12:13:19 +00:00
. arg ( " cache.c " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-08-31 12:13:19 +00:00
. success ( )
. stdout ( " test \n " )
. stderr ( " " ) ;
}
2019-05-10 19:02:08 +00:00
#[ test ]
fn does_not_print_unwanted_file_named_cache ( ) {
bat_with_config ( ) . arg ( " cach " ) . assert ( ) . failure ( ) ;
}
2019-08-31 10:46:03 +00:00
2020-02-01 09:49:29 +00:00
#[ test ]
fn unicode_wrap ( ) {
2020-06-01 21:50:24 +00:00
bat_with_config ( )
2020-02-01 09:49:29 +00:00
. arg ( " unicode-wrap.txt " )
. arg ( " --style=numbers,snip " )
. arg ( " --decorations=always " )
. arg ( " --terminal-width=40 " )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-02-01 09:49:29 +00:00
. success ( )
2020-02-28 09:27:06 +00:00
. stdout (
" 1 ビタミンA ビタミンD ビタミンE ビ
2020-02-28 02:42:44 +00:00
タ ミ ン K ビ タ ミ ン B1 ビ タ ミ ン B2 ナ
イ ア シ ン パ ン ト テ ン 酸 ビ タ ミ ン B6
ビ タ ミ ン B12 葉 酸 ビ オ チ ン ビ タ
ミ ン C
2020-02-01 09:49:29 +00:00
2
2020-02-28 02:42:44 +00:00
3 고 양 이 고 양 이 고 양 이 고 양 이 고 양 이
고 양 이 고 양 이 고 양 이 고 양 이 고 양 이
고 양 이 고 양 이 고 양 이 고 양 이 고 양 이
고 양 이 고 양 이 고 양 이 고 양 이 고 양 이
고 양 이 고 양 이 고 양 이 고 양 이 고 양 이
고 양 이 고 양 이 고 양 이 고 양 이 고 양 이
고 양 이 고 양 이 고 양 이 고 양 이 고 양 이
고 양 이 고 양 이 고 양 이 고 양 이 고 양 이
고 양 이
2020-02-01 09:49:29 +00:00
4
2020-02-28 02:42:44 +00:00
5 1 บ ว ก 2 บ ว ก 3 บ ว ก 4 บ ว ก 5 บ ว ก 6 บ ว ก
7 บ ว ก 8 บ ว ก 9 บ ว ก 10 บ ว ก 11 บ ว ก 12
บ ว ก 13 บ ว ก 14 บ ว ก 15 บ ว ก 16 บ ว ก 17
บ ว ก 18 บ ว ก 19 บ ว ก 20
2020-02-01 09:49:29 +00:00
6
2020-02-28 02:42:44 +00:00
7 Б е л ь г и я Б о л г а р и я Ч е х и я Д а н и я Г е р м а н
и я Э с т о н и я И р л а н д и я Г р е ц и я И с п а н и я
Ф р а н ц и я Х о р в а т и я И т а л и я К и п р Л а т в и я
Л и т в а Л ю к с е м б у р г В е н г р и я М а л ь т а Н и
д е р л а н д ы А в с т р и я П о л ь ш а П о р т у г а л и я
Р у м ы н и я С л о в е н и я С л о в а к и я Ф и н л я н д и я
Ш в е ц и я В е л и к о б р и т а н и я
2020-02-28 09:27:06 +00:00
" ,
) ;
2020-02-01 09:49:29 +00:00
}
2019-08-31 10:46:03 +00:00
#[ test ]
fn snip ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2019-08-31 10:46:03 +00:00
. arg ( " multiline.txt " )
. arg ( " --style=numbers,snip " )
. arg ( " --decorations=always " )
. arg ( " --line-range=1:2 " )
. arg ( " --line-range=4: " )
2019-08-31 11:01:36 +00:00
. arg ( " --terminal-width=80 " )
2020-06-01 21:50:24 +00:00
. assert ( )
2019-08-31 10:46:03 +00:00
. success ( )
. stdout (
" 1 line 1
2 line 2
.. . ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ 8 < ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
4 line 4
" ,
) ;
}
2020-02-27 23:09:01 +00:00
#[ test ]
fn empty_file_leads_to_empty_output_with_grid_enabled ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-02-27 23:09:01 +00:00
. arg ( " empty.txt " )
. arg ( " --style=grid " )
. arg ( " --decorations=always " )
. arg ( " --terminal-width=80 " )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-02-27 23:09:01 +00:00
. success ( )
. stdout ( " " ) ;
}
2020-03-20 02:46:19 +00:00
2020-10-06 15:57:47 +00:00
#[ test ]
fn empty_file_leads_to_empty_output_with_rule_enabled ( ) {
bat ( )
. arg ( " empty.txt " )
. arg ( " --style=rule " )
. arg ( " --decorations=always " )
. arg ( " --terminal-width=80 " )
. assert ( )
. success ( )
. stdout ( " " ) ;
}
2020-03-20 02:46:19 +00:00
#[ test ]
fn filename_basic ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-03-20 02:46:19 +00:00
. arg ( " test.txt " )
. arg ( " --decorations=always " )
. arg ( " --style=header " )
. arg ( " -r=0:0 " )
. arg ( " --file-name=foo " )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-03-20 02:46:19 +00:00
. success ( )
. stdout ( " File: foo \n " )
. stderr ( " " ) ;
}
#[ test ]
fn filename_binary ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-03-20 02:46:19 +00:00
. arg ( " test.binary " )
. arg ( " --decorations=always " )
. arg ( " --style=header " )
. arg ( " -r=0:0 " )
. arg ( " --file-name=foo " )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-03-20 02:46:19 +00:00
. success ( )
. stdout ( " File: foo <BINARY> \n " )
. stderr ( " " ) ;
}
#[ test ]
fn filename_stdin ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-03-20 02:46:19 +00:00
. arg ( " --decorations=always " )
. arg ( " --style=header " )
. arg ( " -r=0:0 " )
. arg ( " - " )
. write_stdin ( " stdin \n " )
. arg ( " --file-name=foo " )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-03-20 02:46:19 +00:00
. success ( )
. stdout ( " File: foo \n " )
. stderr ( " " ) ;
}
#[ test ]
fn filename_stdin_binary ( ) {
let vec = vec! [ 0 ; 1 ] ;
2020-06-01 21:50:24 +00:00
bat_with_config ( )
2020-03-20 02:46:19 +00:00
. arg ( " --decorations=always " )
. arg ( " --style=header " )
. write_stdin ( vec )
. arg ( " --file-name=foo " )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-03-20 02:46:19 +00:00
. success ( )
. stdout ( " File: foo <BINARY> \n " )
. stderr ( " " ) ;
}
2020-03-25 00:26:00 +00:00
#[ test ]
fn filename_multiple_ok ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-03-25 00:26:00 +00:00
. arg ( " --decorations=always " )
. arg ( " --style=header " )
. arg ( " -r=0:0 " )
. arg ( " test.txt " )
. arg ( " --file-name=foo " )
. arg ( " single-line.txt " )
. arg ( " --file-name=bar " )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-03-25 00:26:00 +00:00
. success ( )
2020-05-12 00:57:51 +00:00
. stdout ( " File: foo \n \n File: bar \n " )
2020-03-25 00:26:00 +00:00
. stderr ( " " ) ;
}
#[ test ]
fn filename_multiple_err ( ) {
bat ( )
. arg ( " --decorations=always " )
. arg ( " --style=header " )
. arg ( " -r=0:0 " )
. arg ( " test.txt " )
. arg ( " --file-name=foo " )
. arg ( " single-line.txt " )
. assert ( )
. failure ( ) ;
}
2020-04-21 07:59:17 +00:00
2020-05-12 00:57:51 +00:00
#[ test ]
fn header_padding ( ) {
2020-06-01 21:50:24 +00:00
bat ( )
2020-05-12 00:57:51 +00:00
. arg ( " --decorations=always " )
2020-05-12 14:06:58 +00:00
. arg ( " --style=header " )
2020-05-12 00:57:51 +00:00
. arg ( " test.txt " )
. arg ( " single-line.txt " )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-05-12 14:06:58 +00:00
. stdout ( " File: test.txt \n hello world \n \n File: single-line.txt \n Single Line \n " )
2020-05-12 00:57:51 +00:00
. stderr ( " " ) ;
}
2020-10-08 08:59:14 +00:00
#[ test ]
fn header_padding_rule ( ) {
bat ( )
. arg ( " --decorations=always " )
. arg ( " --style=header,rule " )
. arg ( " --terminal-width=80 " )
. arg ( " test.txt " )
. arg ( " single-line.txt " )
. assert ( )
. stdout (
" File: test.txt
hello world
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
File : single - line . txt
Single Line
" ,
)
. stderr ( " " ) ;
}
2020-10-12 08:02:08 +00:00
#[ test ]
fn grid_overrides_rule ( ) {
bat ( )
. arg ( " --decorations=always " )
. arg ( " --style=grid,rule " )
. arg ( " --terminal-width=80 " )
. arg ( " test.txt " )
. arg ( " single-line.txt " )
. assert ( )
. stdout (
" \
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
hello world
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
Single Line
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
" ,
)
. stderr ( " \x1b [33m[bat warning] \x1b [0m: Style 'rule' is a subset of style 'grid', 'rule' will not be visible. \n " ) ;
}
2020-04-21 12:09:05 +00:00
#[ cfg(target_os = " linux " ) ]
#[ test ]
fn file_with_invalid_utf8_filename ( ) {
use std ::ffi ::OsStr ;
2020-04-21 14:02:28 +00:00
use std ::fs ::File ;
use std ::io ::Write ;
2020-04-21 12:09:05 +00:00
use std ::os ::unix ::ffi ::OsStrExt ;
2020-04-21 14:02:28 +00:00
use tempdir ::TempDir ;
let tmp_dir = TempDir ::new ( " bat_test " ) . expect ( " can create temporary directory " ) ;
let file_path = tmp_dir
. path ( )
. join ( OsStr ::from_bytes ( b " test-invalid-utf8- \xC3 (.rs " ) ) ;
{
let mut file = File ::create ( & file_path ) . expect ( " can create temporary file " ) ;
writeln! ( file , " dummy content " ) . expect ( " can write to file " ) ;
}
2020-06-01 21:50:24 +00:00
bat ( )
2020-04-21 14:02:28 +00:00
. arg ( file_path . as_os_str ( ) )
2020-06-01 21:50:24 +00:00
. assert ( )
2020-04-21 14:02:28 +00:00
. success ( )
. stdout ( " dummy content \n " ) ;
2020-04-21 12:09:05 +00:00
}
2020-04-21 07:59:17 +00:00
#[ test ]
fn do_not_panic_regression_tests ( ) {
for filename in & [
" issue_28.md " ,
" issue_190.md " ,
" issue_314.hs " ,
" issue_914.rb " ,
" issue_915.vue " ,
] {
bat ( )
. arg ( " --color=always " )
. arg ( & format! ( " regression_tests/ {} " , filename ) )
. assert ( )
. success ( ) ;
}
}
2020-05-13 09:51:49 +00:00
#[ test ]
fn do_not_detect_different_syntax_for_stdin_and_files ( ) {
let file = " regression_tests/issue_985.js " ;
2020-05-15 19:29:01 +00:00
let cmd_for_file = bat ( )
2020-05-13 09:51:49 +00:00
. arg ( " --color=always " )
. arg ( " --map-syntax=*.js:Markdown " )
. arg ( & format! ( " --file-name= {} " , file ) )
. arg ( " --style=plain " )
. arg ( file )
. assert ( )
2020-05-15 19:29:01 +00:00
. success ( ) ;
2020-05-13 09:51:49 +00:00
2020-05-15 19:29:01 +00:00
let cmd_for_stdin = bat ( )
2020-05-13 09:51:49 +00:00
. arg ( " --color=always " )
. arg ( " --map-syntax=*.js:Markdown " )
. arg ( " --style=plain " )
. arg ( & format! ( " --file-name= {} " , file ) )
. pipe_stdin ( Path ::new ( EXAMPLES_DIR ) . join ( file ) )
. unwrap ( )
. assert ( )
2020-05-15 19:29:01 +00:00
. success ( ) ;
2020-05-13 09:51:49 +00:00
assert_eq! (
2020-05-15 19:29:01 +00:00
from_utf8 ( & cmd_for_file . get_output ( ) . stdout ) . expect ( " output is valid utf-8 " ) ,
from_utf8 ( & cmd_for_stdin . get_output ( ) . stdout ) . expect ( " output is valid utf-8 " )
2020-05-13 09:51:49 +00:00
) ;
}
2020-06-20 15:00:32 +00:00
#[ test ]
fn show_all_mode ( ) {
bat ( )
. arg ( " --show-all " )
. arg ( " nonprintable.txt " )
. assert ( )
2020-07-06 20:44:19 +00:00
. stdout ( " hello·world␊ \n ├──┤␍␀␇␈␛ " )
2020-06-20 15:00:32 +00:00
. stderr ( " " ) ;
}
2020-12-21 07:34:22 +00:00
#[ test ]
fn plain_mode_does_not_add_nonexisting_newline ( ) {
bat ( )
. arg ( " --paging=never " )
. arg ( " --color=never " )
. arg ( " --decorations=always " )
. arg ( " --style=plain " )
. arg ( " single-line.txt " )
. assert ( )
. success ( )
. stdout ( " Single Line " ) ;
}
2020-12-21 16:00:14 +00:00
// Regression test for https://github.com/sharkdp/bat/issues/299
#[ test ]
fn grid_for_file_without_newline ( ) {
bat ( )
. arg ( " --paging=never " )
. arg ( " --color=never " )
. arg ( " --terminal-width=80 " )
. arg ( " --wrap=never " )
. arg ( " --decorations=always " )
. arg ( " --style=full " )
. arg ( " single-line.txt " )
. assert ( )
. success ( )
. stdout (
" \
─ ─ ─ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
│ File : single - line . txt
─ ─ ─ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
1 │ Single Line
─ ─ ─ ─ ─ ─ ─ ┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
" ,
)
. stderr ( " " ) ;
}