summaryrefslogtreecommitdiffstats
path: root/third_party/rust/midir/tests/virtual.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/midir/tests/virtual.rs')
-rw-r--r--third_party/rust/midir/tests/virtual.rs72
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);
+}