use crate::file::File;
use crate::DataDirectoryType;
use goblin::pe::header::DOS_MAGIC;
pub fn verify_file(file: &File) {
assert_eq!(file.data()[0..2], [0x4D, 0x5A]);
let slice = file.data_slice(0, 2).unwrap();
assert_eq!(slice, [0x4D, 0x5A]);
assert_eq!(file.imagebase(), 0x180000000);
assert_eq!(file.va_to_offset(0x180001010).unwrap(), 0x1010);
assert_eq!(file.va_to_offset(0x180205090).unwrap(), 0x205090);
assert_eq!(file.rva_to_offset(0x1010).unwrap(), 0x1010);
assert_eq!(file.offset_to_rva(0x1010).unwrap(), 0x1010);
let header_dos = file.header_dos();
assert_eq!(header_dos.signature, DOS_MAGIC);
assert_eq!(header_dos.checksum, 0);
let header_optional = file.header_optional().as_ref().unwrap();
let clr_header = header_optional
.data_directories
.get_clr_runtime_header()
.unwrap();
assert_eq!(clr_header.size, 0x48);
assert_eq!(clr_header.virtual_address, 0x1420);
assert!(
file.sections()
.iter()
.any(|section| section.name.as_str() == ".text"),
"Text section missing!"
);
assert!(
file.directories()
.iter()
.any(|directory| directory.0 == DataDirectoryType::ClrRuntimeHeader),
"CLR runtime header directory missing!"
);
let (clr_rva, clr_size) = file.clr().expect("Should have CLR header");
assert_eq!(clr_rva, 0x1420);
assert_eq!(clr_size, 0x48);
}