#[test]
fn repl_exits_with_nonzero_on_command_failure()
{
let output = std::process::Command::new( "cargo" )
.args( [ "run", "--quiet", "--release" ] )
.stdin( std::process::Stdio::piped() )
.current_dir( "/home/user1/pro/lib/wTools/module/core/genfile" )
.stdout( std::process::Stdio::piped() )
.stderr( std::process::Stdio::piped() )
.spawn()
.expect( "Failed to spawn genfile process" );
use std::io::Write;
output.stdin
.as_ref()
.unwrap()
.write_all( b".file.add path::\"test.txt\" content::\"Should fail - no archive\"\nexit\n" )
.expect( "Failed to write to stdin" );
let result = output.wait_with_output().expect( "Failed to wait for process" );
assert!(
!result.status.success(),
"REPL should exit with non-zero code when commands fail. \
Exit code: {:?}, stderr: {}",
result.status.code(),
String::from_utf8_lossy( &result.stderr )
);
let stderr = String::from_utf8_lossy( &result.stderr );
assert!(
stderr.contains( "No archive loaded" ) || stderr.contains( "ERROR" ),
"Error message should be present in stderr: {stderr}"
);
}
#[test]
fn repl_exits_with_zero_on_all_commands_successful()
{
use std::io::Write;
let output = std::process::Command::new( "cargo" )
.args( [ "run", "--quiet", "--release" ] )
.stdin( std::process::Stdio::piped() )
.current_dir( "/home/user1/pro/lib/wTools/module/core/genfile" )
.stdout( std::process::Stdio::piped() )
.stderr( std::process::Stdio::piped() )
.spawn()
.expect( "Failed to spawn genfile process" );
output.stdin
.as_ref()
.unwrap()
.write_all(
b".archive.new name::\"test\" description::\"Test\"\n\
.file.add path::\"readme.txt\" content::\"Hello\"\n\
exit\n"
)
.expect( "Failed to write to stdin" );
let result = output.wait_with_output().expect( "Failed to wait for process" );
assert!(
result.status.success(),
"REPL should exit with code 0 when all commands succeed. \
Exit code: {:?}, stderr: {}",
result.status.code(),
String::from_utf8_lossy( &result.stderr )
);
}
#[test]
fn repl_exits_with_nonzero_when_any_command_fails()
{
use std::io::Write;
let output = std::process::Command::new( "cargo" )
.args( [ "run", "--quiet", "--release" ] )
.stdin( std::process::Stdio::piped() )
.current_dir( "/home/user1/pro/lib/wTools/module/core/genfile" )
.stdout( std::process::Stdio::piped() )
.stderr( std::process::Stdio::piped() )
.spawn()
.expect( "Failed to spawn genfile process" );
output.stdin
.as_ref()
.unwrap()
.write_all(
b".archive.new name::\"test\" description::\"Test\"\n\
.file.add path::\"readme.txt\" content::\"Hello\"\n\
.file.add path::\"\" content::\"Should fail - empty path\"\n\
exit\n"
)
.expect( "Failed to write to stdin" );
let result = output.wait_with_output().expect( "Failed to wait for process" );
assert!(
!result.status.success(),
"REPL should exit with non-zero when any command fails. \
Exit code: {:?}, stderr: {}",
result.status.code(),
String::from_utf8_lossy( &result.stderr )
);
}