Files
soundcraft/crates/ui-egui/tests/midi_quantize.rs

39 lines
1.5 KiB
Rust

//! The MIDI Editor's Quantize button snaps to the grid the editor shows.
use egui::vec2;
use egui_kittest::{Harness, kittest::Queryable};
use serde_json::json;
use soundcraft_ui_egui::{Services, SoundApp};
fn quantize_on(grid: &str) -> i64 {
let mut app = SoundApp::new(soundcraft_engine::Engine::default(), None, Services::default());
app.run("track.new", json!({"name": "Grid Check", "kind": "midi"})).unwrap();
let clip = app.run("midi.new_clip", json!({"track": "Grid Check", "start": 0, "end": 96_000})).unwrap()["clip"].clone();
app.run("midi.note_add", json!({"clip": clip, "pitch": 60, "start_ticks": 300, "length_ticks": 240})).unwrap();
app.run("edit.select", json!({"clips": [clip]})).unwrap();
app.run("view.grid", json!({"value": grid})).unwrap();
app.ui.show_midi_editor = true;
let mut h = Harness::builder().with_size(vec2(1600.0, 1000.0)).build_ui_state(
|ui, app: &mut SoundApp| {
app.logic(&ui.ctx().clone());
app.ui(ui);
},
app,
);
h.run_steps(5);
h.get_by_label("Quantize").click();
h.run_steps(3);
let notes = h.state_mut().run("midi.notes", json!({"clip": clip})).unwrap();
assert_eq!(notes["notes"][0]["length"], 240, "{notes}");
notes["notes"][0]["start"].as_i64().unwrap()
}
#[test]
fn quantize_follows_a_quarter_note_grid() {
assert_eq!(quantize_on("1/4"), 0);
}
#[test]
fn quantize_follows_a_sixteenth_note_grid() {
assert_eq!(quantize_on("1/16"), 240);
}