1
1
mirror of https://github.com/casey/just.git synced 2024-11-26 23:27:26 +03:00
just/tests/string.rs
2023-12-29 21:25:30 +00:00

394 lines
5.5 KiB
Rust

use super::*;
test! {
name: raw_string,
justfile: r#"
export EXPORTED_VARIABLE := '\z'
recipe:
printf "$EXPORTED_VARIABLE"
"#,
stdout: "\\z",
stderr: "printf \"$EXPORTED_VARIABLE\"\n",
}
test! {
name: multiline_raw_string,
justfile: "
string := 'hello
whatever'
a:
echo '{{string}}'
",
args: ("a"),
stdout: "hello
whatever
",
stderr: "echo 'hello
whatever'
",
}
test! {
name: multiline_backtick,
justfile: "
string := `echo hello
echo goodbye
`
a:
echo '{{string}}'
",
args: ("a"),
stdout: "hello\ngoodbye\n",
stderr: "echo 'hello
goodbye'
",
}
test! {
name: multiline_cooked_string,
justfile: r#"
string := "hello
whatever"
a:
echo '{{string}}'
"#,
args: ("a"),
stdout: "hello
whatever
",
stderr: "echo 'hello
whatever'
",
}
test! {
name: cooked_string_suppress_newline,
justfile: r#"
a := """
foo\
bar
"""
@default:
printf %s '{{a}}'
"#,
stdout: "
foobar
",
}
test! {
name: invalid_escape_sequence,
justfile: r#"x := "\q"
a:"#,
args: ("a"),
stdout: "",
stderr: "error: `\\q` is not a valid escape sequence
——▶ justfile:1:6
1 │ x := \"\\q\"
│ ^^^^
",
status: EXIT_FAILURE,
}
test! {
name: error_line_after_multiline_raw_string,
justfile: "
string := 'hello
whatever' + 'yo'
a:
echo '{{foo}}'
",
args: ("a"),
stdout: "",
stderr: "error: Variable `foo` not defined
——▶ justfile:6:11
6 │ echo '{{foo}}'
│ ^^^
",
status: EXIT_FAILURE,
}
test! {
name: error_column_after_multiline_raw_string,
justfile: "
string := 'hello
whatever' + bar
a:
echo '{{string}}'
",
args: ("a"),
stdout: "",
stderr: "error: Variable `bar` not defined
——▶ justfile:3:13
3 │ whatever' + bar
│ ^^^
",
status: EXIT_FAILURE,
}
test! {
name: multiline_raw_string_in_interpolation,
justfile: r#"
a:
echo '{{"a" + '
' + "b"}}'
"#,
args: ("a"),
stdout: "
a
b
",
stderr: "
echo 'a
b'
",
}
test! {
name: error_line_after_multiline_raw_string_in_interpolation,
justfile: r#"
a:
echo '{{"a" + '
' + "b"}}'
echo {{b}}
"#,
args: ("a"),
stdout: "",
stderr: "error: Variable `b` not defined
——▶ justfile:5:10
5 │ echo {{b}}
│ ^
",
status: EXIT_FAILURE,
}
test! {
name: unterminated_raw_string,
justfile: "
a b= ':
",
args: ("a"),
stdout: "",
stderr: "
error: Unterminated string
——▶ justfile:1:6
1 │ a b= ':
│ ^
",
status: EXIT_FAILURE,
}
test! {
name: unterminated_string,
justfile: r#"
a b= ":
"#,
args: ("a"),
stdout: "",
stderr: r#"
error: Unterminated string
justfile:1:6
1 a b= ":
│ ^
"#,
status: EXIT_FAILURE,
}
test! {
name: unterminated_backtick,
justfile: "
foo a=\t`echo blaaaaaah:
echo {{a}}
",
stderr: r#"
error: Unterminated backtick
——▶ justfile:1:8
1 │ foo a= `echo blaaaaaah:
│ ^
"#,
status: EXIT_FAILURE,
}
test! {
name: unterminated_indented_raw_string,
justfile: "
a b= ''':
",
args: ("a"),
stdout: "",
stderr: "
error: Unterminated string
——▶ justfile:1:6
1 │ a b= ''':
│ ^^^
",
status: EXIT_FAILURE,
}
test! {
name: unterminated_indented_string,
justfile: r#"
a b= """:
"#,
args: ("a"),
stdout: "",
stderr: r#"
error: Unterminated string
justfile:1:6
1 a b= """:
│ ^^^
"#,
status: EXIT_FAILURE,
}
test! {
name: unterminated_indented_backtick,
justfile: "
foo a=\t```echo blaaaaaah:
echo {{a}}
",
stderr: r#"
error: Unterminated backtick
——▶ justfile:1:8
1 │ foo a= ```echo blaaaaaah:
│ ^^^
"#,
status: EXIT_FAILURE,
}
test! {
name: indented_raw_string_contents_indentation_removed,
justfile: "
a := '''
foo
bar
'''
@default:
printf '{{a}}'
",
stdout: "
foo
bar
",
}
test! {
name: indented_cooked_string_contents_indentation_removed,
justfile: r#"
a := """
foo
bar
"""
@default:
printf '{{a}}'
"#,
stdout: "
foo
bar
",
}
test! {
name: indented_backtick_string_contents_indentation_removed,
justfile: r#"
a := ```
printf '
foo
bar
'
```
@default:
printf '{{a}}'
"#,
stdout: "\n\nfoo\nbar",
}
test! {
name: indented_raw_string_escapes,
justfile: r"
a := '''
foo\n
bar
'''
@default:
printf %s '{{a}}'
",
stdout: r"
foo\n
bar
",
}
test! {
name: indented_cooked_string_escapes,
justfile: r#"
a := """
foo\n
bar
"""
@default:
printf %s '{{a}}'
"#,
stdout: "
foo
bar
",
}
test! {
name: indented_backtick_string_escapes,
justfile: r"
a := ```
printf %s '
foo\n
bar
'
```
@default:
printf %s '{{a}}'
",
stdout: "\n\nfoo\\n\nbar",
}
test! {
name: shebang_backtick,
justfile: "
x := `#!/usr/bin/env sh`
",
stderr: "
error: Backticks may not start with `#!`
——▶ justfile:1:6
1 │ x := `#!/usr/bin/env sh`
│ ^^^^^^^^^^^^^^^^^^^
",
status: EXIT_FAILURE,
}