mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-06-16 06:11:08 +00:00
Implement Rust CLI tests (#372)
# Description Closes #365 Ports all `resolc` CLI tests to Rust and removes the CLI TypeScript tests.
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
//! Common utilities used for CLI tests.
|
||||
|
||||
use std::{
|
||||
fs::File,
|
||||
process::{Command, Stdio},
|
||||
};
|
||||
|
||||
use revive_common;
|
||||
|
||||
use crate::SolcCompiler;
|
||||
|
||||
pub const SOLIDITY_CONTRACT_PATH: &str = "src/tests/cli/contracts/solidity/contract.sol";
|
||||
pub const YUL_CONTRACT_PATH: &str = "src/tests/cli/contracts/yul/contract.yul";
|
||||
pub const YUL_MEMSET_CONTRACT_PATH: &str = "src/tests/cli/contracts/yul/memset.yul";
|
||||
pub const STANDARD_JSON_CONTRACTS_PATH: &str =
|
||||
"src/tests/cli/contracts/standard_json/solidity_contracts.json";
|
||||
|
||||
/// The result of executing a command.
|
||||
pub struct CommandResult {
|
||||
/// The data written to `stdout`.
|
||||
pub stdout: String,
|
||||
/// The data written to `stderr`.
|
||||
pub stderr: String,
|
||||
/// Whether termination was successful.
|
||||
pub success: bool,
|
||||
/// The exit code of the process.
|
||||
pub code: i32,
|
||||
}
|
||||
|
||||
pub fn execute_resolc(arguments: &[&str]) -> CommandResult {
|
||||
execute_command("resolc", arguments, None)
|
||||
}
|
||||
|
||||
pub fn execute_resolc_with_stdin_input(arguments: &[&str], stdin_file_path: &str) -> CommandResult {
|
||||
execute_command("resolc", arguments, Some(stdin_file_path))
|
||||
}
|
||||
|
||||
pub fn execute_solc(arguments: &[&str]) -> CommandResult {
|
||||
execute_command(SolcCompiler::DEFAULT_EXECUTABLE_NAME, arguments, None)
|
||||
}
|
||||
|
||||
pub fn execute_solc_with_stdin_input(arguments: &[&str], stdin_file_path: &str) -> CommandResult {
|
||||
execute_command(
|
||||
SolcCompiler::DEFAULT_EXECUTABLE_NAME,
|
||||
arguments,
|
||||
Some(stdin_file_path),
|
||||
)
|
||||
}
|
||||
|
||||
fn execute_command(
|
||||
command: &str,
|
||||
arguments: &[&str],
|
||||
stdin_file_path: Option<&str>,
|
||||
) -> CommandResult {
|
||||
let stdin_config = match stdin_file_path {
|
||||
Some(path) => Stdio::from(File::open(path).unwrap()),
|
||||
None => Stdio::null(),
|
||||
};
|
||||
let result = Command::new(command)
|
||||
.args(arguments)
|
||||
.stdin(stdin_config)
|
||||
.stdout(Stdio::piped())
|
||||
.stderr(Stdio::piped())
|
||||
.output()
|
||||
.unwrap();
|
||||
|
||||
CommandResult {
|
||||
stdout: String::from_utf8_lossy(&result.stdout).to_string(),
|
||||
stderr: String::from_utf8_lossy(&result.stderr).to_string(),
|
||||
success: result.status.success(),
|
||||
code: result.status.code().unwrap(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn assert_equal_exit_codes(solc_result: &CommandResult, resolc_result: &CommandResult) {
|
||||
assert_eq!(
|
||||
solc_result.code, resolc_result.code,
|
||||
"Expected solc and resolc to have the same exit code."
|
||||
);
|
||||
}
|
||||
|
||||
pub fn assert_command_success(result: &CommandResult, error_message_prefix: &str) {
|
||||
assert!(
|
||||
result.success,
|
||||
"{error_message_prefix} should succeed with exit code {}, got {}.\nDetails: {}",
|
||||
revive_common::EXIT_CODE_SUCCESS,
|
||||
result.code,
|
||||
result.stderr
|
||||
);
|
||||
}
|
||||
|
||||
pub fn assert_command_failure(result: &CommandResult, error_message_prefix: &str) {
|
||||
assert!(
|
||||
!result.success,
|
||||
"{error_message_prefix} should fail with exit code {}, got {}.",
|
||||
revive_common::EXIT_CODE_FAILURE,
|
||||
result.code
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user