diff --git a/Cargo.toml b/Cargo.toml index 5228202..ea91e4a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,3 +21,6 @@ features = [ "Win32_System_Diagnostics_ToolHelp", "Win32_System_Diagnostics_Debug", ] + +[lib] +doctest = false diff --git a/src/lib.rs b/src/lib.rs index 88ac8bf..327c10e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,5 +5,6 @@ mod error; /// types and methods to ease the r/w of a process's memory pub mod process; mod sys; +mod tests; pub use error::Error; diff --git a/src/tests.rs b/src/tests.rs new file mode 100644 index 0000000..6031d60 --- /dev/null +++ b/src/tests.rs @@ -0,0 +1,29 @@ +#![cfg(test)] + +use super::process::*; + +#[test] +fn resolve_pointer_chain_empty() { + let myself = Process::find(std::process::id()).unwrap(); + let result = myself.resolve_pointer_chain(&[]); + assert!(result.is_err()); +} + +#[test] +fn resolve_pointer_chain_single() { + let myself = Process::find(std::process::id()).unwrap(); + let result = myself.resolve_pointer_chain(&[myself.base_address]); + assert_eq!(result.unwrap(), myself.base_address); +} + +#[test] +fn resolve_pointer_chain_multiple() { + let myself = Process::find(std::process::id()).unwrap(); + let target_value = 1337; + let target_ptr = &target_value as *const i32 as usize; + let base_ptr = &target_ptr as *const usize as usize; + let address = myself.resolve_pointer_chain(&[base_ptr, 0x0, 0x0]).unwrap(); + assert_eq!(address, target_ptr); + let value = myself.read_mem::(address).unwrap(); + assert_eq!(value, target_value); +}