use crate::cli_utils::{
assert_command_failure, assert_command_success, assert_equal_exit_codes, execute_resolc,
execute_solc, RESOLC_YUL_FLAG, SOLC_YUL_FLAG, YUL_CONTRACT_PATH,
YUL_DUPLICATE_FUNCTIONS_DEEP_NESTING_PATH, YUL_DUPLICATE_FUNCTIONS_SWITCH_PATH,
YUL_INVALID_HEX_NIBBLES_PATH,
};
#[test]
fn runs_with_valid_input_file() {
let resolc_result = execute_resolc(&[YUL_CONTRACT_PATH, RESOLC_YUL_FLAG]);
assert_command_success(&resolc_result, "Providing a valid input file");
assert!(resolc_result
.stderr
.contains("Compiler run successful. No output requested"));
let solc_result = execute_solc(&[YUL_CONTRACT_PATH, SOLC_YUL_FLAG]);
assert_equal_exit_codes(&solc_result, &resolc_result);
}
#[test]
fn fails_without_input_file() {
let resolc_result = execute_resolc(&[RESOLC_YUL_FLAG]);
assert_command_failure(&resolc_result, "Omitting an input file");
let solc_result = execute_solc(&[SOLC_YUL_FLAG]);
assert_equal_exit_codes(&solc_result, &resolc_result);
}
#[test]
fn bails_with_invalid_input_file() {
let resolc_result = execute_resolc(&[YUL_INVALID_HEX_NIBBLES_PATH, RESOLC_YUL_FLAG]);
assert_command_failure(&resolc_result, "Providing an invalid input file");
let solc_result = execute_solc(&[YUL_INVALID_HEX_NIBBLES_PATH, SOLC_YUL_FLAG]);
assert_equal_exit_codes(&solc_result, &resolc_result);
}
#[test]
fn duplicate_functions_in_switch_cases() {
let resolc_result = execute_resolc(&[
YUL_DUPLICATE_FUNCTIONS_SWITCH_PATH,
RESOLC_YUL_FLAG,
"--bin",
]);
assert_command_success(
&resolc_result,
"Duplicate function names in different switch cases",
);
}
#[test]
fn duplicate_functions_deep_nesting() {
let resolc_result = execute_resolc(&[
YUL_DUPLICATE_FUNCTIONS_DEEP_NESTING_PATH,
RESOLC_YUL_FLAG,
"--bin",
]);
assert_command_success(
&resolc_result,
"Duplicate function names in deeply nested switch cases",
);
}