2023-08-21 08:49:27 +00:00
// This file is part of the uutils coreutils package.
//
// For the full copyright and license information, please view the LICENSE
// file that was distributed with this source code.
2023-03-20 13:51:19 +00:00
use crate ::common ::util ::TestScenario ;
2015-11-16 05:25:01 +00:00
#[ test ]
fn test_encode ( ) {
let input = " hello, world! " ;
2016-08-23 11:52:43 +00:00
new_ucmd! ( )
2016-07-29 21:26:32 +00:00
. pipe_in ( input )
2016-07-17 16:56:11 +00:00
. succeeds ( )
2021-05-30 05:10:54 +00:00
. stdout_only ( " aGVsbG8sIHdvcmxkIQ== \n " ) ; // spell-checker:disable-line
2021-04-28 07:36:27 +00:00
// Using '-' as our file
new_ucmd! ( )
. arg ( " - " )
. pipe_in ( input )
. succeeds ( )
2021-05-30 05:10:54 +00:00
. stdout_only ( " aGVsbG8sIHdvcmxkIQ== \n " ) ; // spell-checker:disable-line
2021-04-28 07:36:27 +00:00
}
2024-02-24 19:42:51 +00:00
#[ test ]
fn test_encode_repeat_flags_later_wrap_10 ( ) {
let input = " hello, world! " ;
new_ucmd! ( )
. args ( & [ " -ii " , " -w15 " , " -w10 " ] )
. pipe_in ( input )
. succeeds ( )
. stdout_only ( " aGVsbG8sIH \n dvcmxkIQ== \n " ) ; // spell-checker:disable-line
}
#[ test ]
fn test_encode_repeat_flags_later_wrap_15 ( ) {
let input = " hello, world! " ;
new_ucmd! ( )
. args ( & [ " -ii " , " -w10 " , " -w15 " ] )
. pipe_in ( input )
. succeeds ( )
. stdout_only ( " aGVsbG8sIHdvcmx \n kIQ== \n " ) ; // spell-checker:disable-line
}
2021-04-28 07:36:27 +00:00
#[ test ]
fn test_base64_encode_file ( ) {
new_ucmd! ( )
. arg ( " input-simple.txt " )
. succeeds ( )
2021-05-30 05:10:54 +00:00
. stdout_only ( " SGVsbG8sIFdvcmxkIQo= \n " ) ; // spell-checker:disable-line
2015-11-16 05:25:01 +00:00
}
#[ test ]
fn test_decode ( ) {
2022-04-02 08:47:37 +00:00
for decode_param in [ " -d " , " --decode " , " --dec " ] {
2021-05-30 05:10:54 +00:00
let input = " aGVsbG8sIHdvcmxkIQ== " ; // spell-checker:disable-line
2016-08-23 11:52:43 +00:00
new_ucmd! ( )
2016-07-29 21:26:32 +00:00
. arg ( decode_param )
2016-07-17 16:56:11 +00:00
. pipe_in ( input )
. succeeds ( )
2016-07-17 06:44:16 +00:00
. stdout_only ( " hello, world! " ) ;
2016-02-16 00:06:30 +00:00
}
2015-11-16 05:25:01 +00:00
}
2024-02-24 19:42:51 +00:00
#[ test ]
fn test_decode_repeat_flags ( ) {
let input = " aGVsbG8sIHdvcmxkIQ== \n " ; // spell-checker:disable-line
new_ucmd! ( )
. args ( & [ " -didiw80 " , " --wrap=17 " , " --wrap " , " 8 " ] ) // spell-checker:disable-line
. pipe_in ( input )
. succeeds ( )
. stdout_only ( " hello, world! " ) ;
}
2015-11-16 05:25:01 +00:00
#[ test ]
fn test_garbage ( ) {
2021-05-31 03:55:28 +00:00
let input = " aGVsbG8sIHdvcmxkIQ== \0 " ; // spell-checker:disable-line
2016-08-23 11:52:43 +00:00
new_ucmd! ( )
2016-07-29 21:26:32 +00:00
. arg ( " -d " )
2016-07-17 16:56:11 +00:00
. pipe_in ( input )
. fails ( )
2016-08-06 03:47:09 +00:00
. stderr_only ( " base64: error: invalid input \n " ) ;
2015-11-16 05:25:01 +00:00
}
#[ test ]
fn test_ignore_garbage ( ) {
2022-04-02 08:47:37 +00:00
for ignore_garbage_param in [ " -i " , " --ignore-garbage " , " --ig " ] {
2021-05-31 03:55:28 +00:00
let input = " aGVsbG8sIHdvcmxkIQ== \0 " ; // spell-checker:disable-line
2016-08-23 11:52:43 +00:00
new_ucmd! ( )
2016-07-29 21:26:32 +00:00
. arg ( " -d " )
. arg ( ignore_garbage_param )
2016-07-17 16:56:11 +00:00
. pipe_in ( input )
. succeeds ( )
2016-07-17 06:44:16 +00:00
. stdout_only ( " hello, world! " ) ;
2016-02-16 00:06:30 +00:00
}
2015-11-16 05:25:01 +00:00
}
#[ test ]
fn test_wrap ( ) {
2022-04-02 08:47:37 +00:00
for wrap_param in [ " -w " , " --wrap " , " --wr " ] {
2016-02-16 00:06:30 +00:00
let input = " The quick brown fox jumps over the lazy dog. " ;
2016-08-23 11:52:43 +00:00
new_ucmd! ( )
2016-07-29 21:26:32 +00:00
. arg ( wrap_param )
. arg ( " 20 " )
2016-07-17 16:56:11 +00:00
. pipe_in ( input )
. succeeds ( )
2021-05-30 05:10:54 +00:00
// spell-checker:disable-next-line
2016-07-17 06:44:16 +00:00
. stdout_only ( " VGhlIHF1aWNrIGJyb3du \n IGZveCBqdW1wcyBvdmVy \n IHRoZSBsYXp5IGRvZy4= \n " ) ;
2016-02-16 00:06:30 +00:00
}
2015-11-16 05:25:01 +00:00
}
2016-02-16 01:38:03 +00:00
#[ test ]
fn test_wrap_no_arg ( ) {
2022-04-02 08:47:37 +00:00
for wrap_param in [ " -w " , " --wrap " ] {
2022-10-12 20:04:21 +00:00
new_ucmd! ( )
. arg ( wrap_param )
. fails ( )
2023-03-08 14:06:07 +00:00
. stderr_contains ( " a value is required for '--wrap <COLS>' but none was supplied " )
2022-09-29 13:21:29 +00:00
. no_stdout ( ) ;
2016-02-16 01:38:03 +00:00
}
}
#[ test ]
fn test_wrap_bad_arg ( ) {
2022-04-02 08:47:37 +00:00
for wrap_param in [ " -w " , " --wrap " ] {
2016-08-23 11:52:43 +00:00
new_ucmd! ( )
2016-08-06 03:47:09 +00:00
. arg ( wrap_param )
. arg ( " b " )
2016-07-17 16:56:11 +00:00
. fails ( )
2021-08-03 21:37:49 +00:00
. stderr_only ( " base64: invalid wrap size: 'b' \n " ) ;
2016-02-16 01:38:03 +00:00
}
}
2021-04-28 07:36:27 +00:00
#[ test ]
fn test_base64_extra_operand ( ) {
// Expect a failure when multiple files are specified.
2021-11-09 20:23:41 +00:00
new_ucmd! ( )
2021-04-28 07:36:27 +00:00
. arg ( " a.txt " )
2021-08-03 21:37:20 +00:00
. arg ( " b.txt " )
2021-04-28 07:36:27 +00:00
. fails ( )
2021-11-09 20:23:41 +00:00
. usage_error ( " extra operand 'b.txt' " ) ;
2021-04-28 07:36:27 +00:00
}
#[ test ]
fn test_base64_file_not_found ( ) {
new_ucmd! ( )
. arg ( " a.txt " )
. fails ( )
2023-01-05 20:09:15 +00:00
. stderr_only ( " base64: a.txt: No such file or directory \n " ) ;
2021-04-28 07:36:27 +00:00
}
2024-09-20 19:34:18 +00:00
#[ test ]
fn test_no_repeated_trailing_newline ( ) {
new_ucmd! ( )
. args ( & [ " --wrap " , " 10 " , " -- " , " - " ] )
. pipe_in ( " The quick brown fox jumps over the lazy dog. " )
. succeeds ( )
. stdout_only (
2024-09-20 21:23:13 +00:00
// cSpell:disable
2024-09-20 19:34:18 +00:00
" \
VGhlIHF1aW
NrIGJyb3du
IGZveCBqdW
1 wcyBvdmVy
IHRoZSBsYX
p5IGRvZy4 =
" ,
2024-09-20 21:23:13 +00:00
// cSpell:enable
2024-09-20 19:34:18 +00:00
) ;
}
#[ test ]
fn test_wrap_default ( ) {
2024-09-20 21:23:13 +00:00
const PIPE_IN : & str = " The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. " ;
2024-09-20 19:34:18 +00:00
new_ucmd! ( )
. args ( & [ " -- " , " - " ] )
2024-09-20 21:23:13 +00:00
. pipe_in ( PIPE_IN )
2024-09-20 19:34:18 +00:00
. succeeds ( )
. stdout_only (
2024-09-20 21:23:13 +00:00
// cSpell:disable
2024-09-20 19:34:18 +00:00
" \
VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4gVGhlIHF1aWNrIGJy
b3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4gVGhlIHF1aWNrIGJyb3duIGZveCBqdW1w
cyBvdmVyIHRoZSBsYXp5IGRvZy4 =
" ,
2024-09-20 21:23:13 +00:00
// cSpell:enable
2024-09-20 19:34:18 +00:00
) ;
}
2024-10-05 13:17:10 +00:00
// Prevent regression to:
//
// ❯ coreutils manpage base64 | rg --fixed-strings -- 'base32'
// The data are encoded as described for the base32 alphabet in RFC 4648.
// to the bytes of the formal base32 alphabet. Use \-\-ignore\-garbage
// The data are encoded as described for the base32 alphabet in RFC 4648.
// to the bytes of the formal base32 alphabet. Use \-\-ignore\-garbage
#[ test ]
fn test_manpage ( ) {
use std ::process ::{ Command , Stdio } ;
let test_scenario = TestScenario ::new ( " " ) ;
let child = Command ::new ( test_scenario . bin_path )
. arg ( " manpage " )
. arg ( " base64 " )
. stdin ( Stdio ::piped ( ) )
. stdout ( Stdio ::piped ( ) )
. stderr ( Stdio ::piped ( ) )
. spawn ( )
. unwrap ( ) ;
let output = child . wait_with_output ( ) . unwrap ( ) ;
assert_eq! ( output . status . code ( ) . unwrap ( ) , 0 ) ;
assert! ( output . stderr . is_empty ( ) ) ;
let stdout_str = std ::str ::from_utf8 ( & output . stdout ) . unwrap ( ) ;
assert! ( stdout_str . contains ( " base64 alphabet " ) ) ;
assert! ( ! stdout_str . to_ascii_lowercase ( ) . contains ( " base32 " ) ) ;
}