Dirty fix the test for creating and destroying a blank aggregate device
This commit is contained in:
Родитель
07a26204d8
Коммит
c93c72d122
|
@ -88,6 +88,20 @@ fn test_aggregate_get_sub_devices_for_blank_aggregate_devices() {
|
|||
#[test]
|
||||
#[ignore]
|
||||
fn test_aggregate_create_blank_aggregate_device() {
|
||||
let changes = Arc::new(Mutex::new(0u32));
|
||||
let also_changes = Arc::clone(&changes);
|
||||
let changes_mtx_ptr = also_changes.as_ref() as *const Mutex<u32>;
|
||||
|
||||
assert_eq!(
|
||||
audio_object_add_property_listener(
|
||||
kAudioObjectSystemObject,
|
||||
&DEVICES_PROPERTY_ADDRESS,
|
||||
devices_changed_callback,
|
||||
changes_mtx_ptr as *mut c_void
|
||||
),
|
||||
NO_ERR
|
||||
);
|
||||
|
||||
// TODO: Test this when there is no available devices.
|
||||
let mut plugin_id = kAudioObjectUnknown;
|
||||
let mut aggregate_device_id = kAudioObjectUnknown;
|
||||
|
@ -97,6 +111,15 @@ fn test_aggregate_create_blank_aggregate_device() {
|
|||
assert_ne!(plugin_id, kAudioObjectUnknown);
|
||||
assert_ne!(aggregate_device_id, kAudioObjectUnknown);
|
||||
|
||||
// Waiting for device is added.
|
||||
loop {
|
||||
let guard = changes.lock().unwrap();
|
||||
if *guard != 0 {
|
||||
assert_eq!(*guard, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let all_devices = get_all_devices();
|
||||
assert!(!all_devices.is_empty());
|
||||
assert!(all_devices.contains(&aggregate_device_id));
|
||||
|
@ -116,6 +139,24 @@ fn test_aggregate_create_blank_aggregate_device() {
|
|||
|
||||
assert!(audiounit_destroy_aggregate_device(plugin_id, &mut aggregate_device_id).is_ok());
|
||||
|
||||
loop {
|
||||
let guard = changes.lock().unwrap();
|
||||
if *guard != 1 {
|
||||
assert_eq!(*guard, 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
audio_object_remove_property_listener(
|
||||
kAudioObjectSystemObject,
|
||||
&DEVICES_PROPERTY_ADDRESS,
|
||||
devices_changed_callback,
|
||||
changes_mtx_ptr as *mut c_void
|
||||
),
|
||||
NO_ERR
|
||||
);
|
||||
|
||||
fn get_all_devices() -> Vec<AudioObjectID> {
|
||||
let mut size: usize = 0;
|
||||
let mut ret = audio_object_get_property_data_size(
|
||||
|
@ -140,6 +181,32 @@ fn test_aggregate_create_blank_aggregate_device() {
|
|||
devices.sort();
|
||||
devices
|
||||
}
|
||||
|
||||
extern "C" fn devices_changed_callback(
|
||||
id: AudioObjectID,
|
||||
number_of_addresses: u32,
|
||||
addresses: *const AudioObjectPropertyAddress,
|
||||
data: *mut c_void,
|
||||
) -> OSStatus {
|
||||
println!("device: {}, data @ {:p}", id, data);
|
||||
let addrs = unsafe { std::slice::from_raw_parts(addresses, number_of_addresses as usize) };
|
||||
for (i, addr) in addrs.iter().enumerate() {
|
||||
println!(
|
||||
"address {}\n\tselector {}\n\tscope {}\n\telement {}",
|
||||
i, addr.mSelector, addr.mScope, addr.mElement
|
||||
);
|
||||
}
|
||||
|
||||
assert_eq!(id, kAudioObjectSystemObject);
|
||||
|
||||
let count = unsafe { &*(data as *const Mutex<u32>) };
|
||||
{
|
||||
let mut guard = count.lock().unwrap();
|
||||
*guard += 1;
|
||||
}
|
||||
|
||||
NO_ERR
|
||||
}
|
||||
}
|
||||
|
||||
// set_aggregate_sub_device_list
|
||||
|
|
Загрузка…
Ссылка в новой задаче