37 lines
1.5 KiB
Rust
37 lines
1.5 KiB
Rust
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
use molotov_core::audio::pipewire::PipeWireStreamController;
|
|
use molotov_core::audio::types::{AAudioDirection, AAudioFormat, AAudioStreamState};
|
|
|
|
#[test]
|
|
fn test_capture_stream_only_active_during_start() {
|
|
let mut controller = PipeWireStreamController::new(
|
|
AAudioDirection::Input,
|
|
48000,
|
|
2,
|
|
AAudioFormat::PcmFloat,
|
|
2048,
|
|
);
|
|
|
|
// Initial state: open, but capture node NOT yet active
|
|
assert_eq!(controller.state(), AAudioStreamState::Open);
|
|
assert!(!controller.is_stream_active(), "Mic node must NOT be active before requestStart");
|
|
|
|
// requestStart: connects capture node
|
|
controller.request_start().unwrap();
|
|
assert_eq!(controller.state(), AAudioStreamState::Started);
|
|
assert!(controller.is_stream_active(), "Mic node MUST be active during recording");
|
|
|
|
// requestPause: DESTROYS capture node to prevent persistent desktop indicator
|
|
controller.request_pause().unwrap();
|
|
assert_eq!(controller.state(), AAudioStreamState::Paused);
|
|
assert!(!controller.is_stream_active(), "Mic node MUST be destroyed on pause");
|
|
|
|
// requestStart again: reconnects node
|
|
controller.request_start().unwrap();
|
|
assert!(controller.is_stream_active());
|
|
|
|
// requestStop: destroys node
|
|
controller.request_stop().unwrap();
|
|
assert_eq!(controller.state(), AAudioStreamState::Stopped);
|
|
assert!(!controller.is_stream_active(), "Mic node MUST be destroyed on stop");
|
|
}
|