typstyle 0.14.4

The CLI for Typstyle.
mod common;

use common::{Workspace, typstyle_cmd_snapshot};

const STDIN: &str = "#let  x  = (1+2)";

#[test]
fn test_nothing() {
    let space = Workspace::new();

    typstyle_cmd_snapshot!(space.cli(), @r"
    success: true
    exit_code: 0
    ----- stdout -----


    ----- stderr -----
    ");
}

#[test]
fn test_stdin() {
    let space = Workspace::new();

    typstyle_cmd_snapshot!(space.cli().pass_stdin(STDIN), @r"
    success: true
    exit_code: 0
    ----- stdout -----
    #let x = (1 + 2)

    ----- stderr -----
    ");
}

#[test]
fn test_stdin_erroneous() {
    let space = Workspace::new();

    typstyle_cmd_snapshot!(space.cli().pass_stdin("#"), @r"
    success: true
    exit_code: 0
    ----- stdout -----
    #
    ----- stderr -----
    warn: Failed to parse stdin. The source is erroneous.
    ");
}

#[test]
fn test_stdin_column() {
    let space = Workspace::new();

    typstyle_cmd_snapshot!(space.cli().args(["-c=0"]).pass_stdin(STDIN), @r"
    success: true
    exit_code: 0
    ----- stdout -----
    #let x = (
      1
        + 2
    )

    ----- stderr -----
    ");
}

#[test]
fn test_stdin_check() {
    let space = Workspace::new();

    typstyle_cmd_snapshot!(space.cli().args(["--check"]).pass_stdin(STDIN), @r"
    success: false
    exit_code: 1
    ----- stdout -----

    ----- stderr -----
    ");
}

#[test]
fn test_stdin_diff() {
    let space: Workspace = Workspace::new();

    typstyle_cmd_snapshot!(space.cli().args(["--diff"]).pass_stdin(STDIN), @r"
    success: false
    exit_code: 1
    ----- stdout -----
    @@ -1 +1 @@
    -#let  x  = (1+2)
    \ No newline at end of file
    +#let x = (1 + 2)


    ----- stderr -----
    ");
}

#[test]
fn test_stdin_inplace() {
    let space = Workspace::new();

    typstyle_cmd_snapshot!(space.cli().args(["-i"]).pass_stdin(STDIN), @r"
    success: false
    exit_code: 2
    ----- stdout -----

    ----- stderr -----
    error: cannot perform in-place formatting without at least one file being presented

    Usage: typstyle [OPTIONS] [INPUT]...

    For more information, try '--help'.
    ");
}

#[test]
fn test_stdin_inplace_check() {
    let space = Workspace::new();

    typstyle_cmd_snapshot!(space.cli().args(["-i", "--check"]).pass_stdin(STDIN), @r"
    success: false
    exit_code: 2
    ----- stdout -----

    ----- stderr -----
    error: the argument '--inplace' cannot be used with '--check'

    Usage: typstyle --inplace [INPUT]...

    For more information, try '--help'.
    ");
}

#[test]
fn test_stdin_debug_ast() {
    let space = Workspace::new();

    typstyle_cmd_snapshot!(space.cli().args(["-a"]).pass_stdin(STDIN), @r##"
    success: true
    exit_code: 0
    ----- stdout -----
    Markup: 16 [
      Hash: "#",
      LetBinding: 15 [
        Let: "let",
        Space: "  ",
        Ident: "x",
        Space: "  ",
        Eq: "=",
        Space: " ",
        Parenthesized: 5 [
          LeftParen: "(",
          Binary: 3 [
            Int: "1",
            Plus: "+",
            Int: "2",
          ],
          RightParen: ")",
        ],
      ],
    ]
    #let x = (1 + 2)

    ----- stderr -----
    "##);
}