jbx 0.6.3

jbx: one-stop Java toolbox for scripts, tools, and agents
Documentation
use jbx::{parse_directives, split_directive_words};

#[test]
fn parses_core_jbang_directives() {
    let src = r#"
//JAVA 25
//DEPS org.slf4j:slf4j-simple:2.0.13, org.slf4j:slf4j-api:2.0.13
//RUNTIME org.slf4j:slf4j-nop:2.0.13
//REPOS central=https://repo1.maven.org/maven2
//SOURCES helper.java
//JAVAC_OPTIONS --enable-preview "-Xlint:all"
//RUNTIME_OPTIONS --enable-preview '-Ddemo=true'
//MAIN com.acme.Main
//PREVIEW
class Main {}
"#;

    let directives = parse_directives(src);
    assert_eq!(directives.java_version.as_deref(), Some("25"));
    assert_eq!(directives.main_class.as_deref(), Some("com.acme.Main"));
    assert_eq!(
        directives.deps,
        vec![
            "org.slf4j:slf4j-simple:2.0.13",
            "org.slf4j:slf4j-api:2.0.13"
        ]
    );
    assert_eq!(directives.runtime_deps, vec!["org.slf4j:slf4j-nop:2.0.13"]);
    assert_eq!(
        directives.repos,
        vec!["central=https://repo1.maven.org/maven2"]
    );
    assert_eq!(directives.sources, vec!["helper.java"]);
    assert!(directives.enable_preview);
    assert_eq!(
        directives.javac_options,
        vec!["--enable-preview", "-Xlint:all"]
    );
    assert_eq!(
        directives.runtime_options,
        vec!["--enable-preview", "-Ddemo=true"]
    );
}

#[test]
fn splits_like_jbang_spaces_semicolons_commas_tabs_with_quotes() {
    assert_eq!(
        split_directive_words(r#"a:b:1, c:d:2; "quoted value" 'single value'"#),
        vec!["a:b:1", "c:d:2", "quoted value", "single value"]
    );
}

#[test]
fn ignores_comment_lines_that_look_like_disabled_directives() {
    let directives = parse_directives("// //DEPS <dependency1> <dependency2>\n//DEPS real:dep:1\n");
    assert_eq!(directives.deps, vec!["real:dep:1"]);
}