summaryrefslogtreecommitdiff
path: root/rust/tests/type_archive.rs
blob: 3e13507ee641e9cc6f189e14561edb88c1d65512 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use binaryninja::headless::Session;
use binaryninja::platform::Platform;
use binaryninja::types::{Type, TypeArchive, TypeClass};

#[test]
fn test_create_archive() {
    let _session = Session::new().expect("Failed to initialize session");
    let placeholder_platform = Platform::by_name("x86_64").expect("Failed to get platform");

    let temp_dir = tempfile::tempdir().unwrap();
    let type_archive_path = temp_dir.path().with_file_name("type_archive_0");
    let type_archive = TypeArchive::create(&type_archive_path, &placeholder_platform).unwrap();
    type_archive.add_type(("test", Type::int(7, true)).into());
    println!("{:?}", type_archive);
    // TODO: It seems that type archives have to be closed.
    type_archive.close();

    // Now open the type archive to check.
    let type_archive = TypeArchive::open(&type_archive_path).expect("Opened type archive");
    let test_type = type_archive
        .get_type_by_name("test".into())
        .expect("Found test type");
    assert_eq!(test_type.width(), 7);
    assert_eq!(test_type.type_class(), TypeClass::IntegerTypeClass);

    let lookup_type_archive =
        TypeArchive::lookup_by_id(&type_archive.id()).expect("Failed to lookup type archive");
    assert_eq!(lookup_type_archive, type_archive);
}