From fb8eb1501b7f4b8eaefcb26131230ba42083c153 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Fri, 14 Feb 2025 00:07:53 -0500 Subject: Add SVD Loader Plugin --- plugins/svd/tests/mapper.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 plugins/svd/tests/mapper.rs (limited to 'plugins/svd/tests/mapper.rs') diff --git a/plugins/svd/tests/mapper.rs b/plugins/svd/tests/mapper.rs new file mode 100644 index 00000000..10f95c40 --- /dev/null +++ b/plugins/svd/tests/mapper.rs @@ -0,0 +1,57 @@ +use binaryninja::binary_view::BinaryViewExt; +use binaryninja::binary_view::{BinaryView, BinaryViewBase}; +use binaryninja::file_metadata::FileMetadata; +use binaryninja::headless::Session; +use std::path::PathBuf; +use svd_ninja::mapper::DeviceMapper; +use svd_ninja::settings::LoadSettings; + +// These are the target files present in OUT_DIR +// Add the files to fixtures +static TARGET_FILES: [&str; 2] = ["ARM_Sample.svd", "esp32c2.svd"]; + +#[test] +fn insta_snapshots() { + let _session = Session::new().expect("Failed to initialize session"); + let out_dir = env!("OUT_DIR").parse::().unwrap(); + for file_name in TARGET_FILES { + let path = out_dir.join(file_name); + let svd_str = std::fs::read_to_string(&path).expect("Failed to read svd file"); + let device = svd_parser::parse(&svd_str).expect("Failed to parse svd file"); + let view = BinaryView::from_data(&FileMetadata::new(), &[]).expect("Failed to create view"); + let address_size = view.address_size(); + DeviceMapper::new(LoadSettings::default(), address_size, device).map_to_view(&view); + + let types = view + .types() + .to_vec() + .iter() + .map(|ty| ty.ty.to_string()) + .collect::>(); + let types_snapshot_name = format!("{}_types", file_name); + insta::assert_debug_snapshot!(types_snapshot_name, types); + + // TODO: This does not work yet because memory map is not turned on for raw view? + // let value: Value = serde_json::from_str(&view.memory_map().description()).unwrap(); + // let map = view.memory_map().description(); + // let memory_snapshot_name = format!("{}_memory_map", file_name); + // insta::assert_debug_snapshot!(memory_snapshot_name, value); + } +} + +#[test] +fn test_bitfield_unions() { + let _session = Session::new().expect("Failed to initialize session"); + let out_dir = env!("OUT_DIR").parse::().unwrap(); + let path = out_dir.join("ARM_Sample.svd"); + let svd_str = std::fs::read_to_string(&path).expect("Failed to read svd file"); + let device = svd_parser::parse(&svd_str).expect("Failed to parse svd file"); + let view = BinaryView::from_data(&FileMetadata::new(), &[]).expect("Failed to create view"); + let address_size = view.address_size(); + let mapper = DeviceMapper::new(LoadSettings::default(), address_size, device.clone()); + + let peripheral = device.get_peripheral("TIMER0").unwrap(); + let register = peripheral.get_register("SR").unwrap(); + let register_ty = mapper.register_type(®ister); + insta::assert_debug_snapshot!("bitfield_union_types", register_ty); +} -- cgit v1.3.1