#![ allow( missing_docs ) ]
include!( "../../../../module/step/meta/src/module/terminal.rs" );
#[ allow( unused_imports ) ]
use ::process_tools as the_module;
#[ allow( unused_imports ) ]
use test_tools :: *;
#[ cfg( feature = "enabled" ) ]
mod inc
{
use super :: *;
use the_module ::exit_status;
#[ test ]
fn synthetic_exit_status_zero_is_success()
{
let status = exit_status ::synthetic_exit_status( 0 );
assert!( status.success(), "exit code 0 must be success" );
assert_eq!( status.code(), Some( 0 ) );
}
#[ test ]
fn synthetic_exit_status_one_is_failure()
{
let status = exit_status ::synthetic_exit_status( 1 );
assert!( !status.success(), "exit code 1 must not be success" );
assert_eq!( status.code(), Some( 1 ) );
}
#[ test ]
fn synthetic_exit_status_arbitrary_code()
{
let status = exit_status ::synthetic_exit_status( 42 );
assert_eq!( status.code(), Some( 42 ) );
}
#[ test ]
fn synthetic_success_status_returns_zero()
{
let status = exit_status ::synthetic_success_status();
assert!( status.success() );
assert_eq!( status.code(), Some( 0 ) );
}
#[ test ]
fn synthetic_failure_status_returns_one()
{
let status = exit_status ::synthetic_failure_status();
assert!( !status.success() );
assert_eq!( status.code(), Some( 1 ) );
}
#[ test ]
fn synthetic_exit_status_max_byte_255()
{
let status = exit_status ::synthetic_exit_status( 255 );
assert!( !status.success(), "code 255 must be failure" );
assert_eq!( status.code(), Some( 255 ) );
}
#[ test ]
fn synthetic_exit_status_command_not_found_127()
{
let status = exit_status ::synthetic_exit_status( 127 );
assert!( !status.success() );
assert_eq!( status.code(), Some( 127 ) );
}
#[ test ]
fn synthetic_exit_status_signal_killed_137()
{
let status = exit_status ::synthetic_exit_status( 137 );
assert!( !status.success() );
assert_eq!( status.code(), Some( 137 ) );
}
#[ cfg( unix ) ]
#[ test ]
fn synthetic_exit_status_negative_one_wraps()
{
let status = exit_status ::synthetic_exit_status( -1 );
assert_eq!( status.code(), Some( 255 ) );
}
#[ cfg( unix ) ]
#[ test ]
fn synthetic_exit_status_256_wraps_inconsistently()
{
let status = exit_status ::synthetic_exit_status( 256 );
assert_eq!( status.code(), Some( 0 ), "WEXITSTATUS extracts 0" );
assert!( !status.success(), "raw status 0x10000 != 0 so not success" );
}
#[ cfg( unix ) ]
#[ test ]
fn synthetic_exit_status_i32_max_wraps()
{
let status = exit_status ::synthetic_exit_status( i32 ::MAX );
assert_eq!( status.code(), Some( 255 ) );
}
#[ cfg( unix ) ]
#[ test ]
fn synthetic_exit_status_i32_min_wraps()
{
let status = exit_status ::synthetic_exit_status( i32 ::MIN );
assert_eq!( status.code(), Some( 0 ) );
assert!( status.success(), "raw status happens to be 0" );
}
#[ cfg( unix ) ]
#[ test ]
fn synthetic_status_works_with_empty_path()
{
let orig = std::env::var( "PATH" ).unwrap_or_default();
std::env::set_var( "PATH", "/nonexistent" );
let success = exit_status ::synthetic_success_status();
let failure = exit_status ::synthetic_failure_status();
std::env::set_var( "PATH", orig );
assert!( success.success(), "success must not depend on PATH" );
assert!( !failure.success(), "failure must not depend on PATH" );
}
}