use tauri_plugin_audioplayer::{
AudioDevice, AudioDeviceList, BufferSizeRange, Error, LoadedAudio, PlaybackProgress,
StreamConfig, SupportedStreamConfig,
};
#[test]
fn serializes_device_data_with_the_frontend_field_names() {
let device = AudioDevice {
id: "output-42".into(),
name: "Studio output".into(),
selected_stream_config: Some(StreamConfig {
channels: 2,
sample_format: "F32".into(),
sample_rate: 48_000,
buffer_size: Some(BufferSizeRange {
min_frames: 128,
max_frames: 1_024,
}),
}),
supported_stream_configs: vec![SupportedStreamConfig {
channels: 2,
sample_format: "F32".into(),
min_sample_rate: 44_100,
max_sample_rate: 48_000,
buffer_size: None,
}],
error: None,
};
assert_eq!(
serde_json::to_value(device).unwrap(),
serde_json::json!({
"id": "output-42",
"name": "Studio output",
"selectedStreamConfig": {
"channels": 2,
"sampleFormat": "F32",
"sampleRate": 48000,
"bufferSize": { "minFrames": 128, "maxFrames": 1024 }
},
"supportedStreamConfigs": [{
"channels": 2,
"sampleFormat": "F32",
"minSampleRate": 44100,
"maxSampleRate": 48000,
"bufferSize": null
}],
"error": null
})
);
}
#[test]
fn serializes_optional_audio_fields_and_playback_progress() {
let device = AudioDevice {
id: "input-7".into(),
name: "Microphone".into(),
selected_stream_config: None,
supported_stream_configs: vec![],
error: Some("permission denied".into()),
};
let loaded = LoadedAudio {
channels: 1,
sample_rate: 44_100,
duration_seconds: 12.5,
};
let progress = PlaybackProgress {
position_seconds: 12.5,
duration_seconds: 12.5,
is_playing: false,
};
assert_eq!(
serde_json::to_value(device).unwrap()["selectedStreamConfig"],
serde_json::Value::Null
);
assert_eq!(
serde_json::to_value(loaded).unwrap()["durationSeconds"],
12.5
);
assert_eq!(serde_json::to_value(progress).unwrap()["isPlaying"], false);
}
#[test]
fn serializes_the_default_device_id_without_renaming_it() {
let list = AudioDeviceList {
devices: vec![],
default_id: "stable-default-output-id".into(),
};
assert_eq!(
serde_json::to_value(list).unwrap(),
serde_json::json!({
"devices": [],
"default_id": "stable-default-output-id"
})
);
}
#[test]
fn errors_preserve_and_serialize_their_message() {
let error = Error::message("selected output is unavailable");
assert_eq!(error.to_string(), "selected output is unavailable");
assert_eq!(
serde_json::to_string(&error).unwrap(),
"\"selected output is unavailable\""
);
}