helm-schema-gen 0.0.6

Generate an accurate JSON schema for any helm chart
Documentation
use color_eyre::eyre::{self, OptionExt as _};
use indoc::indoc;
use test_util::prelude::sim_assert_eq;

use crate::path_resolver::ecma_compatible_pattern;

#[test]
fn leading_multiline_start_anchor_has_an_exact_ecma_form() -> eyre::Result<()> {
    let go_pattern = r"(?m)^name\s*=\s*value";
    let ecma_pattern = ecma_compatible_pattern(go_pattern).ok_or_eyre("pattern must lower")?;

    sim_assert_eq!(
        have: &ecma_pattern,
        want: r"(?:^|\n)name\s*=\s*value"
    );

    let go = regex::Regex::new(go_pattern)?;
    let ecma = regex::Regex::new(&ecma_pattern)?;
    for sample in [
        "",
        "name=value",
        indoc! {"
            # comment
            name = value
        "},
        "xname=value",
        indoc! {"

             xname=value"
        },
    ] {
        sim_assert_eq!(
            have: ecma.is_match(sample),
            want: go.is_match(sample),
            "sample={sample:?}"
        );
    }

    Ok(())
}

#[test]
fn multiline_without_anchors_drops_the_semantically_idle_flag() {
    sim_assert_eq!(
        have: ecma_compatible_pattern("(?m)literal"),
        want: Some("literal".to_string())
    );
}

#[test]
fn later_multiline_anchors_abstain() {
    sim_assert_eq!(
        have: ecma_compatible_pattern("(?m)prefix$"),
        want: None
    );
    sim_assert_eq!(
        have: ecma_compatible_pattern("(?m)^first$"),
        want: None
    );
}