use ghostscope_ui::components::command_panel::script_editor::ScriptEditor;
use ghostscope_ui::events::{ExecutionStatus, ScriptCompilationDetails, ScriptExecutionResult};
use ghostscope_ui::ui::emoji::EmojiConfig;
#[test]
fn test_trace_results_success_color() {
let emoji_config = EmojiConfig::new(true);
let compilation_details = ScriptCompilationDetails {
total_count: 1,
success_count: 1,
failed_count: 0,
results: vec![ScriptExecutionResult {
target_name: "test.c:10".to_string(),
binary_path: "/path/to/binary".to_string(),
pc_address: 0x1000,
status: ExecutionStatus::Success,
source_file: None,
source_line: None,
is_inline: None,
}],
trace_ids: vec![0],
};
let result = ScriptEditor::format_compilation_results(
&compilation_details,
Some("trace test.c:10"),
&emoji_config,
);
assert!(
result.contains("\x1b[32m1 successful\x1b[0m"),
"Expected green color for successful count, got: {result}"
);
assert!(
!result.contains("\x1b[31m0 failed\x1b[0m"),
"Should not have red color for 0 failed, got: {result}"
);
assert!(
result.contains("0 failed"),
"Expected '0 failed' without color, got: {result}"
);
}
#[test]
fn test_trace_results_failed_color() {
let emoji_config = EmojiConfig::new(true);
let compilation_details = ScriptCompilationDetails {
total_count: 1,
success_count: 0,
failed_count: 1,
results: vec![ScriptExecutionResult {
target_name: "test.c:10".to_string(),
binary_path: "/path/to/binary".to_string(),
pc_address: 0x0,
status: ExecutionStatus::Failed("Error".to_string()),
source_file: None,
source_line: None,
is_inline: None,
}],
trace_ids: vec![],
};
let result = ScriptEditor::format_compilation_results(
&compilation_details,
Some("trace test.c:10"),
&emoji_config,
);
assert!(
result.contains("\x1b[31m1 failed\x1b[0m"),
"Expected red color for failed count, got: {result}"
);
assert!(
!result.contains("\x1b[32m0 successful\x1b[0m"),
"Should not have green color for 0 successful, got: {result}"
);
assert!(
result.contains("0 successful"),
"Expected '0 successful' without color, got: {result}"
);
}
#[test]
fn test_trace_results_mixed_colors() {
let emoji_config = EmojiConfig::new(true);
let compilation_details = ScriptCompilationDetails {
total_count: 3,
success_count: 2,
failed_count: 1,
results: vec![
ScriptExecutionResult {
target_name: "test.c:10".to_string(),
binary_path: "/path/to/binary".to_string(),
pc_address: 0x1000,
status: ExecutionStatus::Success,
source_file: None,
source_line: None,
is_inline: None,
},
ScriptExecutionResult {
target_name: "test.c:20".to_string(),
binary_path: "/path/to/binary".to_string(),
pc_address: 0x2000,
status: ExecutionStatus::Success,
source_file: None,
source_line: None,
is_inline: None,
},
ScriptExecutionResult {
target_name: "test.c:30".to_string(),
binary_path: "/path/to/binary".to_string(),
pc_address: 0x0,
status: ExecutionStatus::Failed("Error".to_string()),
source_file: None,
source_line: None,
is_inline: None,
},
],
trace_ids: vec![0, 1],
};
let result = ScriptEditor::format_compilation_results(
&compilation_details,
Some("trace multiple"),
&emoji_config,
);
assert!(
result.contains("\x1b[32m2 successful\x1b[0m"),
"Expected green color for 2 successful, got: {result}"
);
assert!(
result.contains("\x1b[31m1 failed\x1b[0m"),
"Expected red color for 1 failed, got: {result}"
);
}