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
#![allow(non_camel_case_types)]
#![allow(non_upper_case_globals)]
#![allow(clippy::const_static_lifetime)]

include!(concat!(env!("OUT_DIR"), "/bindings.rs"));

#[cfg(test)]
mod tests {
    use super::*;
    use std::ffi::CStr;
    use std::os::raw::c_char;

    #[test]
    fn test_discid_put() {
        unsafe {
            let disc = discid_new();
            let first_track = 1;
            let offsets: [i32; 3] = [2000, 150, 1000];
            let last_track = (offsets.len() - 1) as i32;
            let success = discid_put(disc, first_track, last_track, offsets.as_ptr() as *mut i32);
            let error_msg_ptr = discid_get_error_msg(disc);
            assert!(success == 1, "discid_put: {}", from_str_ptr(error_msg_ptr));

            let id_str_ptr = discid_get_id(disc);
            assert_eq!("YPv1TJ03f7pu6fgwp1cpr3cVsf0-", from_str_ptr(id_str_ptr));
            discid_free(disc);
        }
    }

    #[test]
    fn test_discid_feature() {
        let features = discid_feature::DISCID_FEATURE_READ | discid_feature::DISCID_FEATURE_ISRC;
        assert_eq!(5, features);
    }

    #[test]
    fn test_has_feature() {
        unsafe {
            assert_eq!(1, discid_has_feature(discid_feature::DISCID_FEATURE_READ));
        }
    }

    fn from_str_ptr(str_ptr: *mut c_char) -> &'static str {
        let c_str: &CStr = unsafe { CStr::from_ptr(str_ptr) };
        c_str.to_str().unwrap()
    }
}