use only_semantic::compile_document;
#[test]
fn reports_validation_errors_for_dependencies_and_variables() {
let compiled = compile_document("deploy() & build:\n echo {{target}}\n");
let messages: Vec<_> = compiled
.diagnostics
.iter()
.map(|diagnostic| diagnostic.message.as_str())
.collect();
assert!(
messages
.iter()
.any(|message| message.contains("depends on missing task 'build'"))
);
assert!(
messages
.iter()
.any(|message| message.contains("variable 'target' is not defined"))
);
}
#[test]
fn reports_duplicate_directives() {
let compiled = compile_document("!shell bash\n!shell deno\n");
let messages: Vec<_> = compiled
.diagnostics
.iter()
.map(|diagnostic| diagnostic.message.as_str())
.collect();
assert!(messages.contains(&"`!shell` is used more than once"));
}
#[test]
fn reports_slice_parameter_before_final_position() {
let compiled = compile_document("run(args.., tail):\n echo {{args}} {{tail}}\n");
let messages: Vec<_> = compiled
.diagnostics
.iter()
.map(|diagnostic| diagnostic.message.as_str())
.collect();
assert!(messages.contains(&"slice parameter 'args..' must be last in task 'run'"));
}
#[test]
fn reports_slice_parameter_default_value() {
let compiled = compile_document("run(args..=\"fetch\"):\n echo {{args}}\n");
let messages: Vec<_> = compiled
.diagnostics
.iter()
.map(|diagnostic| diagnostic.message.as_str())
.collect();
assert!(messages.contains(&"slice parameter 'args..' cannot have a default"));
}