// 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"); }