diff options
Diffstat (limited to 'third_party/rust/midir/tests/virtual.rs')
-rw-r--r-- | third_party/rust/midir/tests/virtual.rs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/third_party/rust/midir/tests/virtual.rs b/third_party/rust/midir/tests/virtual.rs new file mode 100644 index 0000000000..5ac5754038 --- /dev/null +++ b/third_party/rust/midir/tests/virtual.rs @@ -0,0 +1,72 @@ +//! This file contains automated tests, but they require virtual ports and therefore can't work on Windows or Web MIDI ... +#![cfg(not(any(windows, target_arch = "wasm32")))] +extern crate midir; + +use std::thread::sleep; +use std::time::Duration; + +use midir::{MidiInput, MidiOutput, Ignore, MidiOutputPort}; +use midir::os::unix::{VirtualInput, VirtualOutput}; + +#[test] +fn end_to_end() { + let mut midi_in = MidiInput::new("My Test Input").unwrap(); + midi_in.ignore(Ignore::None); + let midi_out = MidiOutput::new("My Test Output").unwrap(); + + let previous_count = midi_out.port_count(); + + println!("Creating virtual input port ..."); + let conn_in = midi_in.create_virtual("midir-test", |stamp, message, _| { + println!("{}: {:?} (len = {})", stamp, message, message.len()); + }, ()).unwrap(); + + assert_eq!(midi_out.port_count(), previous_count + 1); + + let new_port: MidiOutputPort = midi_out.ports().into_iter().rev().next().unwrap(); + + println!("Connecting to port '{}' ...", midi_out.port_name(&new_port).unwrap()); + let mut conn_out = midi_out.connect(&new_port, "midir-test").unwrap(); + println!("Starting to send messages ..."); + conn_out.send(&[144, 60, 1]).unwrap(); + sleep(Duration::from_millis(200)); + conn_out.send(&[144, 60, 0]).unwrap(); + sleep(Duration::from_millis(50)); + conn_out.send(&[144, 60, 1]).unwrap(); + sleep(Duration::from_millis(200)); + conn_out.send(&[144, 60, 0]).unwrap(); + sleep(Duration::from_millis(50)); + println!("Closing output ..."); + let midi_out = conn_out.close(); + println!("Closing virtual input ..."); + let midi_in = conn_in.close().0; + assert_eq!(midi_out.port_count(), previous_count); + + let previous_count = midi_in.port_count(); + + // reuse midi_in and midi_out, but swap roles + println!("\nCreating virtual output port ..."); + let mut conn_out = midi_out.create_virtual("midir-test").unwrap(); + assert_eq!(midi_in.port_count(), previous_count + 1); + + let new_port = midi_in.ports().into_iter().rev().next().unwrap(); + + println!("Connecting to port '{}' ...", midi_in.port_name(&new_port).unwrap()); + let conn_in = midi_in.connect(&new_port, "midir-test", |stamp, message, _| { + println!("{}: {:?} (len = {})", stamp, message, message.len()); + }, ()).unwrap(); + println!("Starting to send messages ..."); + conn_out.send(&[144, 60, 1]).unwrap(); + sleep(Duration::from_millis(200)); + conn_out.send(&[144, 60, 0]).unwrap(); + sleep(Duration::from_millis(50)); + conn_out.send(&[144, 60, 1]).unwrap(); + sleep(Duration::from_millis(200)); + conn_out.send(&[144, 60, 0]).unwrap(); + sleep(Duration::from_millis(50)); + println!("Closing input ..."); + let midi_in = conn_in.close().0; + println!("Closing virtual output ..."); + conn_out.close(); + assert_eq!(midi_in.port_count(), previous_count); +} |