#[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);
}
}
}