31 lines
1.4 KiB
Rust
31 lines
1.4 KiB
Rust
use serde_json::json;
|
|
use soundcraft_engine::{Engine, model::Session};
|
|
use soundcraft_time::{FrameRate, SampleRate};
|
|
|
|
fn feet_frames(engine: &mut Engine, at: i64) -> serde_json::Value {
|
|
engine.execute("session.format_time", &json!({"at": at, "format": "feet_frames"})).unwrap()["text"].clone()
|
|
}
|
|
|
|
#[test]
|
|
fn current_feet_frames_sets_the_reading_at_the_insertion_point() {
|
|
let mut session = Session::new("Feet frames", SampleRate::HZ_48000);
|
|
session.frame_rate = FrameRate::Fps30;
|
|
let mut engine = Engine::new(session);
|
|
engine.execute("edit.select", &json!({"start": 48_000})).unwrap();
|
|
assert_eq!(feet_frames(&mut engine, 48_000), "1+14");
|
|
|
|
let response = engine.execute("setup.current_feet_frames", &json!({"feet_frames": "12+08"})).unwrap();
|
|
assert_eq!(response, json!({"feet_frames_start": 170}));
|
|
|
|
assert_eq!(feet_frames(&mut engine, 48_000), "12+08");
|
|
// 30 frames later, at 16 frames per foot.
|
|
assert_eq!(feet_frames(&mut engine, 96_000), "14+06");
|
|
assert_eq!(engine.session().edit.selection.start, 48_000);
|
|
let samples = engine.execute("session.format_time", &json!({"at": 48_000, "format": "samples"})).unwrap();
|
|
assert_eq!(samples["text"], "48000");
|
|
|
|
// Typed positions go through the same reference.
|
|
engine.execute("edit.select", &json!({"start": "feet_frames:14+06"})).unwrap();
|
|
assert_eq!(engine.session().edit.selection.start, 96_000);
|
|
}
|