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::*;
    use windows::{Win32::Foundation::S_FALSE, core::imp::S_OK};
    use windy::WStr;

    mod util;

    #[test]
    fn test_debug_extension_query_value_names() {
        debug_extension_query_value_names!(query_value_names_impl);

        fn query_value_names_impl(
            _client: &WdClient,
            _flags: u32,
        ) -> WdResult<Vec<String>> {
            Ok(vec![
                "name1".to_string(),
                "name2".to_string(),
                "name3".to_string(),
            ])
        }

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

        unsafe {
            let mut buffer = [0xffff; 18];
            let mut buffer_chars = 0;
            assert_eq!(
                DebugExtensionQueryValueNames(
                    client.0.as_ptr(),
                    0,
                    buffer.as_mut_ptr(),
                    buffer.len() as u32,
                    &mut buffer_chars
                ),
                S_FALSE
            );
            assert_eq!(buffer_chars, 19);

            let mut buffer = [0xffff; 20];
            let mut buffer_chars = 0;
            assert_eq!(
                DebugExtensionQueryValueNames(
                    client.0.as_ptr(),
                    0,
                    buffer.as_mut_ptr(),
                    buffer.len() as u32,
                    &mut buffer_chars
                ),
                S_OK
            );
            assert_eq!(WStr::from_raw(buffer.as_ptr()).to_string(), "name1");
            assert_eq!(
                WStr::from_raw(buffer.as_ptr().add(6)).to_string(),
                "name2"
            );
            assert_eq!(
                WStr::from_raw(buffer.as_ptr().add(12)).to_string(),
                "name3"
            );
            assert_eq!(WStr::from_raw(buffer.as_ptr().add(18)).to_string(), "");
        }
    }
}