summaryrefslogtreecommitdiff
path: root/rust/tests/string.rs
blob: 4f3339405949df56b35071c4ec377330f034b5ab (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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use binaryninja::string::{BnString, IntoCStr};
use std::ffi::{CStr, CString};

#[test]
fn test_bnstring() {
    // Test a basic ASCII string
    let str_0 = BnString::new("test");
    assert_eq!(str_0.to_string_lossy(), "test");
    assert_eq!(str_0.to_bytes_with_nul(), b"test\0");

    // Test non-UTF8 bytes
    let invalid_utf8 = CStr::from_bytes_with_nul(&[0x48, 0x65, 0x6C, 0x6C, 0x6F, 0xFF, 0x00])
        .expect("Failed to create string");
    let str_2 = BnString::new(invalid_utf8);
    assert_eq!(str_2.to_string_lossy(), "Hello�");
    assert_eq!(
        str_2.to_bytes_with_nul(),
        &[0x48, 0x65, 0x6C, 0x6C, 0x6F, 0xFF, 0x00]
    );

    // Test empty string
    let str_3 = BnString::new("");
    assert_eq!(str_3.to_string_lossy(), "");
    assert_eq!(str_3.to_bytes_with_nul(), b"\0");

    // Test string with Unicode
    let str_4 = BnString::new("Hello 世界");
    assert_eq!(str_4.to_string_lossy(), "Hello 世界");
    assert_eq!(
        str_4.to_bytes_with_nul(),
        b"Hello \xE4\xB8\x96\xE7\x95\x8C\0"
    );
}

#[test]
fn test_cstr() {
    let str_0 = BnString::new("test");
    let cstr_0: BnString = str_0.to_cstr();
    assert_eq!(cstr_0.to_str().unwrap(), "test");
    assert_eq!(cstr_0.to_bytes_with_nul(), b"test\0");

    let str_1 = String::from("test");
    let cstr_1: CString = str_1.to_cstr();
    assert_eq!(cstr_1.to_str().unwrap(), "test");
    assert_eq!(cstr_1.to_bytes_with_nul(), b"test\0");

    let str_2 = "test";
    let cstr_2: CString = str_2.to_cstr();
    assert_eq!(cstr_2.to_str().unwrap(), "test");
    assert_eq!(cstr_2.to_bytes_with_nul(), b"test\0");
}