gpui-form-derive 0.7.0

Macro crate for gpui-form
Documentation
use super::support::*;

#[test]
fn test_mcp_attribute_requires_mcp_feature() {
    let tokens = quote! {
        #[derive(GpuiForm)]
        #[gpui_form(mcp)]
        struct TestForm {
            #[gpui_form(hidden)]
            value: String,
        }
    };

    let derive_input: DeriveInput = syn::parse2(tokens).unwrap();
    let expanded = expansion::expand_gpui_form(
        derive_input,
        structs::GpuiFormOptions {
            generate_shape: true,
            generate_mcp: false,
        },
    );

    let compact = compact_tokens(&expanded.to_string());

    assert!(
        compact.contains("requiresthe`gpui-form/mcp`feature"),
        "mcp attribute should require the mcp feature: {compact}"
    );
}

#[test]
fn test_mcp_attribute_rejects_no_inventory() {
    let tokens = quote! {
        #[derive(GpuiForm)]
        #[gpui_form(no_inventory, mcp)]
        struct TestForm {
            #[gpui_form(hidden)]
            value: String,
        }
    };

    let derive_input: DeriveInput = syn::parse2(tokens).unwrap();
    let expanded = expansion::expand_gpui_form(
        derive_input,
        structs::GpuiFormOptions {
            generate_shape: true,
            generate_mcp: true,
        },
    );

    let compact = compact_tokens(&expanded.to_string());

    assert!(
        compact.contains("cannotbecombinedwith") && compact.contains("gpui_form(no_inventory)"),
        "mcp attribute should reject no_inventory: {compact}"
    );
}

#[test]
fn test_mcp_attribute_rejects_generic_forms() {
    let tokens = quote! {
        #[derive(GpuiForm)]
        #[gpui_form(mcp)]
        struct TestForm<T> {
            #[gpui_form(hidden)]
            value: T,
        }
    };

    let derive_input: DeriveInput = syn::parse2(tokens).unwrap();
    let expanded = expansion::expand_gpui_form(
        derive_input,
        structs::GpuiFormOptions {
            generate_shape: true,
            generate_mcp: true,
        },
    );

    let compact = compact_tokens(&expanded.to_string());

    assert!(
        compact.contains("doesnotsupportgenericforms"),
        "mcp attribute should reject generic forms: {compact}"
    );
}