use super::*;

#[test]
fn once() {
  Test::new()
    .justfile("x := 'a' / 'b'")
    .args(["--evaluate", "x"])
    .stdout("a/b")
    .run();
}

#[test]
fn twice() {
  Test::new()
    .justfile("x := 'a' / 'b' / 'c'")
    .args(["--evaluate", "x"])
    .stdout("a/b/c")
    .run();
}

#[test]
fn no_lhs_once() {
  Test::new()
    .justfile("x := / 'a'")
    .args(["--evaluate", "x"])
    .stdout("/a")
    .run();
}

#[test]
fn no_lhs_twice() {
  Test::new()
    .justfile("x := / 'a' / 'b'")
    .args(["--evaluate", "x"])
    .stdout("/a/b")
    .run();
  Test::new()
    .justfile("x := // 'a'")
    .args(["--evaluate", "x"])
    .stdout("//a")
    .run();
}

#[test]
fn no_rhs_once() {
  Test::new()
    .justfile("x := 'a' /")
    .stderr(
      "
      error: Expected backtick, identifier, '(', '/', or string, but found end of file
       ——▶ justfile:1:11
        │
      1 │ x := 'a' /
        │           ^
    ",
    )
    .status(EXIT_FAILURE)
    .run();
}

#[test]
fn default_un_parenthesized() {
  Test::new()
    .justfile(
      "
      foo x='a' / 'b':
        echo {{x}}
    ",
    )
    .stderr(
      "
      error: Expected '*', ':', '$', identifier, or '+', but found '/'
       ——▶ justfile:1:11
        │
      1 │ foo x='a' / 'b':
        │           ^
    ",
    )
    .status(EXIT_FAILURE)
    .run();
}

#[test]
fn no_lhs_un_parenthesized() {
  Test::new()
    .justfile(
      "
      foo x=/ 'a' / 'b':
        echo {{x}}
    ",
    )
    .stderr(
      "
      error: Expected backtick, identifier, '(', or string, but found '/'
       ——▶ justfile:1:7
        │
      1 │ foo x=/ 'a' / 'b':
        │       ^
    ",
    )
    .status(EXIT_FAILURE)
    .run();
}

#[test]
fn default_parenthesized() {
  Test::new()
    .justfile(
      "
      foo x=('a' / 'b'):
        echo {{x}}
    ",
    )
    .stderr("echo a/b\n")
    .stdout("a/b\n")
    .run();
}

#[test]
fn no_lhs_parenthesized() {
  Test::new()
    .justfile(
      "
      foo x=(/ 'a' / 'b'):
        echo {{x}}
    ",
    )
    .stderr("echo /a/b\n")
    .stdout("/a/b\n")
    .run();
}
