HexoDSP/tests/matrix_observer.rs
2022-08-14 15:09:00 +02:00

46 lines
1.5 KiB
Rust

// Copyright (c) 2022 Weird Constructor <weirdconstructor@gmail.com>
// This file is a part of HexoDSP. Released under GPL-3.0-or-later.
// See README.md and COPYING for details.
mod common;
use common::*;
use std::sync::{Arc, Mutex};
struct MatrixTestRecorder {
records: Mutex<Vec<String>>,
}
impl MatrixObserver for MatrixTestRecorder {
fn update_prop(&self, _key: &str) {}
fn update_monitor(&self, _cell: &Cell) {}
fn update_param(&self, _param_id: &ParamId) {}
fn update_matrix(&self) {}
fn update_all(&self) {}
fn midi_event(&self, midi_ev: HxMidiEvent) {
self.records.lock().expect("recorder lock ok").push(format!("{:?}", midi_ev));
}
}
#[test]
fn check_matrix_observer() {
let (node_conf, mut node_exec) = new_node_engine();
let mut matrix = Matrix::new(node_conf, 3, 3);
let recorder = Arc::new(MatrixTestRecorder { records: Mutex::new(vec![]) });
matrix.set_observer(recorder.clone());
let mut chain = MatrixCellChain::new(CellDir::B);
chain.node_out("test", "sig").node_inp("out", "ch1").place(&mut matrix, 0, 0).unwrap();
matrix.sync().unwrap();
matrix.inject_midi_event(HxMidiEvent::NoteOn { channel: 1, note: 57, vel: 0.751 });
// matrix.set_param(trig_p, SAtom::param(0.0));
run_for_ms(&mut node_exec, 10.0);
matrix.handle_graph_events();
let rec =
recorder.records.lock().expect("lock recorder for pop").pop().expect("A record present");
assert_eq!(rec, "NoteOn { channel: 1, note: 57, vel: 0.751 }");
}