#![cfg(any(feature = "vm-legacy", feature = "phi-legacy"))]

#[test]
fn plugin_invoke_hygiene_prefers_hostcall_for_mapped() {
    use crate::jit::policy::invoke::{decide_box_method, InvokeDecision};
    use crate::jit::r#extern::collections as c;

    // Ensure plugin builtins are not forced
    std::env::remove_var("NYASH_USE_PLUGIN_BUILTINS");

    // For ArrayBox.get, policy should map to hostcall symbol, not plugin invoke
    let decision = decide_box_method("ArrayBox", "get", 2, true);
    match decision {
        InvokeDecision::HostCall { symbol, reason, .. } => {
            assert_eq!(symbol, c::SYM_ARRAY_GET_H);
            assert_eq!(reason, "mapped_symbol");
        }
        other => panic!("expected HostCall(mapped_symbol), got: {:?}", other),
    }
}

#[test]
fn plugin_invoke_hygiene_string_len_is_hostcall() {
    use crate::jit::policy::invoke::{decide_box_method, InvokeDecision};
    use crate::jit::r#extern::collections as c;

    std::env::remove_var("NYASH_USE_PLUGIN_BUILTINS");
    let decision = decide_box_method("StringBox", "len", 1, true);
    match decision {
        InvokeDecision::HostCall { symbol, reason, .. } => {
            assert_eq!(symbol, c::SYM_STRING_LEN_H);
            assert_eq!(reason, "mapped_symbol");
        }
        other => panic!(
            "expected HostCall(mapped_symbol) for String.len, got: {:?}",
            other
        ),
    }
}
