mirror of
https://github.com/storytold/soundcraft.git
synced 2026-10-24 10:36:46 -06:00
Found while testing crates/engine/src/cmd/mix.rs:237 (pan); same pattern at mix.rs:76 (mix.trim) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
43 lines
1.7 KiB
Rust
43 lines
1.7 KiB
Rust
use serde_json::json;
|
|
use soundcraft_engine::{Engine, EngineError};
|
|
|
|
fn engine_with_kick() -> Engine {
|
|
let mut e = Engine::default();
|
|
e.execute("track.new", &json!({"name": "Kick", "format": "stereo"})).unwrap();
|
|
e
|
|
}
|
|
|
|
fn kick_pan(e: &Engine) -> Vec<f32> {
|
|
e.session().tracks.iter().find(|t| t.name == "Kick").unwrap().mixer.pan.to_vec()
|
|
}
|
|
|
|
fn kick_trim(e: &Engine) -> f32 {
|
|
e.session().tracks.iter().find(|t| t.name == "Kick").unwrap().mixer.trim_db
|
|
}
|
|
|
|
#[test]
|
|
fn mix_pan_rejects_a_missing_or_non_numeric_pan_and_keeps_the_pan() {
|
|
let mut e = engine_with_kick();
|
|
e.execute("mix.pan", &json!({"tracks": ["Kick"], "pan": -1.0})).unwrap();
|
|
assert_eq!(kick_pan(&e)[0], -1.0);
|
|
|
|
for params in [json!({"tracks": ["Kick"]}), json!({"tracks": ["Kick"], "pan": "left"}), json!({"tracks": ["Kick"], "pan": null})] {
|
|
let r = e.execute("mix.pan", ¶ms);
|
|
assert!(matches!(r, Err(EngineError::BadParams(..))), "{params}: expected BadParams, got {r:?}");
|
|
assert_eq!(kick_pan(&e)[0], -1.0, "{params}: the pan must be untouched");
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn mix_trim_rejects_a_missing_or_non_numeric_db_and_keeps_the_trim() {
|
|
let mut e = engine_with_kick();
|
|
e.execute("mix.trim", &json!({"tracks": ["Kick"], "db": -6.0})).unwrap();
|
|
assert_eq!(kick_trim(&e), -6.0);
|
|
|
|
for params in [json!({"tracks": ["Kick"]}), json!({"tracks": ["Kick"], "db": "loud"}), json!({"tracks": ["Kick"], "db": null})] {
|
|
let r = e.execute("mix.trim", ¶ms);
|
|
assert!(matches!(r, Err(EngineError::BadParams(..))), "{params}: expected BadParams, got {r:?}");
|
|
assert_eq!(kick_trim(&e), -6.0, "{params}: the trim must be untouched");
|
|
}
|
|
}
|