use super::*;
use wtools::error::BasicError;
use wca::command::Command;
use wca::instruction::Instruction;
use wca::string::parse_request::OpType::Primitive;
fn commands_form() -> std::collections::HashMap< String, Command >
{
let help_command : Command = wca::CommandOptions::default()
.hint( "Get help." )
.long_hint( "Get help for command [command]" )
.phrase( ".help" )
.subject_hint( "some command" )
.routine( &| _i : &Instruction | { println!( "this is help" ); Ok( () ) } )
.form();
let list_command : Command = wca::CommandOptions::default()
.hint( "Get list." )
.long_hint( "Get list of" )
.phrase( ".list" )
.subject_hint( "some subject" )
.routine( &| _i : &Instruction | { println!( "this is list" ); Ok( () ) } )
.form();
let err_command : Command = wca::CommandOptions::default()
.hint( "Error." )
.long_hint( "Throw error" )
.phrase( ".error" )
.routine( &| _i : &Instruction | { Err( BasicError::new( "err" ) ) } )
.form();
let commands : std::collections::HashMap< String, Command > = std::collections::HashMap::from
([
( ".help".to_string(), help_command ),
( ".list".to_string(), list_command ),
( ".error".to_string(), err_command ),
]);
commands
}
tests_impls!
{
fn basic()
{
let ca = wca::commands_aggregator()
.form();
a_id!( ca.base_path, None );
a_id!( ca.command_prefix, "".to_string() );
a_id!( ca.delimeter, vec![ ".".to_string(), " ".to_string() ] );
a_id!( ca.command_explicit_delimeter, ";".to_string() );
a_id!( ca.command_implicit_delimeter, " ".to_string() );
a_id!( ca.commands_explicit_delimiting, true );
a_id!( ca.commands_implicit_delimiting, false );
a_id!( ca.properties_map_parsing, false );
a_id!( ca.several_values, true );
a_id!( ca.with_help, true );
a_id!( ca.changing_exit_code, true );
a_id!( ca.commands, std::collections::HashMap::new() );
}
fn program_perform_basic()
{
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".help" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".error" );
a_id!( got, Err( BasicError::new( "err" ) ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".help ; .list" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list ; .error" );
a_id!( got, Err( BasicError::new( "err" ) ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".help .list" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list .error" );
a_id!( got, Err( BasicError::new( "err" ) ) );
}
fn program_perform_with_dotted_paths()
{
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list ." );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list .." );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list ./" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list ../" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list .\\" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list ..\\" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.program_perform( ".list ..\\ .help ./some" );
a_id!( got, Ok( () ) );
}
fn instruction_perform_basic()
{
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.form();
let got = ca.instruction_perform( ".help" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.instruction_perform( ".help" );
a_id!( got, Ok( () ) );
let ca = wca::commands_aggregator()
.changing_exit_code( false )
.commands().replace( commands_form() ).end()
.form();
let got = ca.instruction_perform( ".error" );
a_id!( got, Err( BasicError::new( "err" ) ) );
}
fn instructions_parse_basic()
{
let ca = wca::commands_aggregator()
.form();
let got = ca.instructions_parse( "" );
a_id!( got, vec![] );
let got = ca.instructions_parse( ".help" );
let instruction = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "".to_string(),
properties_map : HashMap::new(),
};
a_id!( got, vec![ instruction ] );
let got = ca.instructions_parse( ".help command" );
let instruction = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "command".to_string(),
properties_map : HashMap::new(),
};
a_id!( got, vec![ instruction ] );
let got = ca.instructions_parse( ".help command v:3" );
let instruction = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "command".to_string(),
properties_map : HashMap::from([ ( "v".to_string(), Primitive( "3".to_string() ) ) ]),
};
a_id!( got, vec![ instruction ] );
let got = ca.instructions_parse( ".help ; .version" );
let instruction1 = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "".to_string(),
properties_map : HashMap::new(),
};
let instruction2 = wca::instruction::Instruction
{
err : None,
command_name : ".version".to_string(),
subject : "".to_string(),
properties_map : HashMap::new(),
};
a_id!( got, vec![ instruction1, instruction2 ] );
let got = ca.instructions_parse( ".help command ; .version delta" );
let instruction1 = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "command".to_string(),
properties_map : HashMap::new(),
};
let instruction2 = wca::instruction::Instruction
{
err : None,
command_name : ".version".to_string(),
subject : "delta".to_string(),
properties_map : HashMap::new(),
};
a_id!( got, vec![ instruction1, instruction2 ] );
let got = ca.instructions_parse( ".help command v:3 ; .version delta n:5" );
let instruction1 = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "command".to_string(),
properties_map : HashMap::from([ ( "v".to_string(), Primitive( "3".to_string() ) ) ]),
};
let instruction2 = wca::instruction::Instruction
{
err : None,
command_name : ".version".to_string(),
subject : "delta".to_string(),
properties_map : HashMap::from([ ( "n".to_string(), Primitive( "5".to_string() ) ) ]),
};
a_id!( got, vec![ instruction1, instruction2 ] );
let got = ca.instructions_parse( ".help .version" );
let instruction1 = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "".to_string(),
properties_map : HashMap::new(),
};
let instruction2 = wca::instruction::Instruction
{
err : None,
command_name : ".version".to_string(),
subject : "".to_string(),
properties_map : HashMap::new(),
};
a_id!( got, vec![ instruction1, instruction2 ] );
let got = ca.instructions_parse( ".help command .version delta" );
let instruction1 = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "command".to_string(),
properties_map : HashMap::new(),
};
let instruction2 = wca::instruction::Instruction
{
err : None,
command_name : ".version".to_string(),
subject : "delta".to_string(),
properties_map : HashMap::new(),
};
a_id!( got, vec![ instruction1, instruction2 ] );
let got = ca.instructions_parse( ".help command v:3 .version delta n:5" );
let instruction1 = wca::instruction::Instruction
{
err : None,
command_name : ".help".to_string(),
subject : "command".to_string(),
properties_map : HashMap::from([ ( "v".to_string(), Primitive( "3".to_string() ) ) ]),
};
let instruction2 = wca::instruction::Instruction
{
err : None,
command_name : ".version".to_string(),
subject : "delta".to_string(),
properties_map : HashMap::from([ ( "n".to_string(), Primitive( "5".to_string() ) ) ]),
};
a_id!( got, vec![ instruction1, instruction2 ] );
}
}
tests_index!
{
basic,
program_perform_basic,
program_perform_with_dotted_paths,
instruction_perform_basic,
instructions_parse_basic,
}