31 lines
1.4 KiB
Rust
31 lines
1.4 KiB
Rust
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
use molotov_core::audio::pipewire::PipeWireStreamController;
|
|
use molotov_core::audio::types::{AAudioDirection, AAudioStreamState};
|
|
|
|
#[test]
|
|
fn test_capture_stream_only_active_during_start() {
|
|
let mut controller = PipeWireStreamController::new(AAudioDirection::Input, 48000, 2);
|
|
|
|
// 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");
|
|
}
|