#[test]
fn test_generate_purified_bash_pipeline() {
let ast = BashAst {
statements: vec![BashStmt::Pipeline {
commands: vec![
BashStmt::Command {
name: "echo".to_string(),
args: vec![BashExpr::Literal("hello".to_string())],
redirects: vec![],
span: Span::dummy(),
},
BashStmt::Command {
name: "grep".to_string(),
args: vec![BashExpr::Literal("h".to_string())],
redirects: vec![],
span: Span::dummy(),
},
],
span: Span::dummy(),
}],
metadata: AstMetadata {
source_file: None,
line_count: 1,
parse_time_ms: 0,
},
};
let output = generate_purified_bash(&ast);
assert!(output.contains("echo hello | grep h"));
}
#[test]
fn test_generate_purified_bash_and_list() {
let ast = BashAst {
statements: vec![BashStmt::AndList {
left: Box::new(BashStmt::Command {
name: "true".to_string(),
args: vec![],
redirects: vec![],
span: Span::dummy(),
}),
right: Box::new(BashStmt::Command {
name: "echo".to_string(),
args: vec![BashExpr::Literal("ok".to_string())],
redirects: vec![],
span: Span::dummy(),
}),
span: Span::dummy(),
}],
metadata: AstMetadata {
source_file: None,
line_count: 1,
parse_time_ms: 0,
},
};
let output = generate_purified_bash(&ast);
assert!(output.contains("true && echo ok"));
}
#[test]
fn test_generate_purified_bash_or_list() {
let ast = BashAst {
statements: vec![BashStmt::OrList {
left: Box::new(BashStmt::Command {
name: "false".to_string(),
args: vec![],
redirects: vec![],
span: Span::dummy(),
}),
right: Box::new(BashStmt::Command {
name: "echo".to_string(),
args: vec![BashExpr::Literal("failed".to_string())],
redirects: vec![],
span: Span::dummy(),
}),
span: Span::dummy(),
}],
metadata: AstMetadata {
source_file: None,
line_count: 1,
parse_time_ms: 0,
},
};
let output = generate_purified_bash(&ast);
assert!(output.contains("false || echo failed"));
}
#[test]
fn test_generate_purified_bash_brace_group() {
let ast = BashAst {
statements: vec![BashStmt::BraceGroup {
body: vec![
BashStmt::Command {
name: "echo".to_string(),
args: vec![BashExpr::Literal("a".to_string())],
redirects: vec![],
span: Span::dummy(),
},
BashStmt::Command {
name: "echo".to_string(),
args: vec![BashExpr::Literal("b".to_string())],
redirects: vec![],
span: Span::dummy(),
},
],
subshell: false,
span: Span::dummy(),
}],
metadata: AstMetadata {
source_file: None,
line_count: 1,
parse_time_ms: 0,
},
};
let output = generate_purified_bash(&ast);
assert!(output.contains("{"));
assert!(output.contains("}"));
}
#[test]
fn test_generate_purified_bash_coproc_with_name() {
let ast = BashAst {
statements: vec![BashStmt::Coproc {
name: Some("mycoproc".to_string()),
body: vec![BashStmt::Command {
name: "cat".to_string(),
args: vec![],
redirects: vec![],
span: Span::dummy(),
}],
span: Span::dummy(),
}],
metadata: AstMetadata {
source_file: None,
line_count: 1,
parse_time_ms: 0,
},
};
let output = generate_purified_bash(&ast);
assert!(output.contains("coproc mycoproc"));
}
#[test]
fn test_generate_purified_bash_coproc_without_name() {
let ast = BashAst {
statements: vec![BashStmt::Coproc {
name: None,
body: vec![BashStmt::Command {
name: "cat".to_string(),
args: vec![],
redirects: vec![],
span: Span::dummy(),
}],
span: Span::dummy(),
}],
metadata: AstMetadata {
source_file: None,
line_count: 1,
parse_time_ms: 0,
},
};
let output = generate_purified_bash(&ast);
assert!(output.contains("coproc { cat; }"));
}
#[test]
fn test_generate_expr_literal_simple() {
let expr = BashExpr::Literal("hello".to_string());
let output = generate_expr(&expr);
assert_eq!(output, "hello");
}
#[test]
fn test_generate_expr_literal_with_space() {
let expr = BashExpr::Literal("hello world".to_string());
let output = generate_expr(&expr);
assert_eq!(output, "'hello world'");
}
#[test]
fn test_generate_expr_literal_with_dollar() {
let expr = BashExpr::Literal("$HOME".to_string());
let output = generate_expr(&expr);
assert_eq!(output, "'$HOME'");
}
#[test]
fn test_generate_expr_variable() {
let expr = BashExpr::Variable("FOO".to_string());
let output = generate_expr(&expr);
assert_eq!(output, "\"$FOO\"");
}
#[test]
fn test_generate_expr_array() {
let expr = BashExpr::Array(vec![
BashExpr::Literal("a".to_string()),
BashExpr::Literal("b".to_string()),
]);
let output = generate_expr(&expr);
assert_eq!(output, "a b");
}
include!("generators_tests_extracted_generate_generate_generate.rs");