wdext 0.1.0

A DbgEng wrapper framework
// SPDX-FileCopyrightText: 2026 takubokudori
// SPDX-License-Identifier: MIT OR Apache-2.0
#[cfg(test)]
pub mod tests {
    use crate::tests::util::local_debug2;
    use wdext::{data::SymbolTypeId, *};
    use windows::Win32::{
        Foundation::S_OK,
        System::Diagnostics::Debug::Extensions::{
            DEBUG_EXT_PVTYPE_IS_POINTER, DEBUG_EXT_PVTYPE_IS_VALUE,
        },
    };
    use windy_macros::wstr;

    mod util;

    #[test]
    fn test_debug_extension_provide_value() {
        debug_extension_provide_value!(provide_value_impl);

        fn provide_value_impl(
            _client: &WdClient,
            _flags: u32,
            name: String,
        ) -> WdResult<ProvidedValue> {
            if name == "$$value" {
                Ok(ProvidedValue::Value { value: 0x1234 })
            } else {
                Ok(ProvidedValue::Pointer {
                    value: 0x4649,
                    type_id: SymbolTypeId::new(0x5963, 1),
                })
            }
        }

        let ctx = local_debug2();
        let client = ctx.client();

        unsafe {
            let name = wstr!("$$test");
            let mut value = 0;
            let mut type_mod_base = 0;
            let mut type_id = 0;
            let mut type_flags = 0;
            assert_eq!(
                DebugExtensionProvideValue(
                    client.0.as_ptr(),
                    0,
                    name.as_ptr(),
                    &mut value,
                    &mut type_mod_base,
                    &mut type_id,
                    &mut type_flags,
                ),
                S_OK,
            );

            assert_eq!(value, 0x4649);
            assert_eq!(type_mod_base, 0x5963);
            assert_eq!(type_id, 1);
            assert_eq!(type_flags, DEBUG_EXT_PVTYPE_IS_POINTER);

            let name = wstr!("$$value");

            assert_eq!(
                DebugExtensionProvideValue(
                    client.0.as_ptr(),
                    0,
                    name.as_ptr(),
                    &mut value,
                    &mut type_mod_base,
                    &mut type_id,
                    &mut type_flags,
                ),
                S_OK,
            );

            assert_eq!(value, 0x1234);
            assert_eq!(type_mod_base, 0x5963);
            assert_eq!(type_id, 1);
            assert_eq!(type_flags, DEBUG_EXT_PVTYPE_IS_VALUE);
        }
    }
}