use super::types::DebugFieldOptions;
use crate::ts_syn::abi::{DecoratorIR, SpanIR};

fn span() -> SpanIR {
    SpanIR::new(0, 0)
}

#[test]
fn test_skip_flag() {
    let decorator = DecoratorIR {
        name: "Debug".into(),
        args_src: "skip".into(),
        span: span(),
        #[cfg(feature = "swc")]
        node: None,
    };

    let opts = DebugFieldOptions::from_decorators(&[decorator]);
    assert!(opts.skip, "skip flag should be true");
}

#[test]
fn test_skip_false_keeps_field() {
    let decorator = DecoratorIR {
        name: "Debug".into(),
        args_src: r#"{ skip: false }"#.into(),
        span: span(),
        #[cfg(feature = "swc")]
        node: None,
    };

    let opts = DebugFieldOptions::from_decorators(&[decorator]);
    assert!(!opts.skip, "skip: false should not skip the field");
}

#[test]
fn test_rename_option() {
    let decorator = DecoratorIR {
        name: "Debug".into(),
        args_src: r#"{ rename: "identifier" }"#.into(),
        span: span(),
        #[cfg(feature = "swc")]
        node: None,
    };

    let opts = DebugFieldOptions::from_decorators(&[decorator]);
    assert_eq!(opts.rename.as_deref(), Some("identifier"));
}
