@@ -241,6 +241,36 @@ void setRecorderState(RecorderState state)
241241 {
242242 return filePath_;
243243 }
244+
245+ bool fileOutputEnabledIntent () const
246+ {
247+ return fileOutputEnabled_.load (std::memory_order_acquire);
248+ }
249+
250+ bool fileOutputConfigured () const
251+ {
252+ return fileOutputConfigured_.load (std::memory_order_acquire);
253+ }
254+
255+ bool callbackOutputEnabledIntent () const
256+ {
257+ return callbackOutputEnabled_.load (std::memory_order_acquire);
258+ }
259+
260+ bool callbackOutputConfigured () const
261+ {
262+ return callbackOutputConfigured_.load (std::memory_order_acquire);
263+ }
264+
265+ bool connectionEnabledIntent () const
266+ {
267+ return isConnected_.load (std::memory_order_acquire);
268+ }
269+
270+ bool connectionConfigured () const
271+ {
272+ return connectedConfigured_.load (std::memory_order_acquire);
273+ }
244274};
245275
246276@interface IOSAudioRecorderTests : XCTestCase {
@@ -433,6 +463,43 @@ - (void)testStartPreparesMonoCallbackAgainstResolvedMultichannelInputFormat
433463 XCTAssertTrue (self.nativeRecorder .lastInputArmed );
434464}
435465
466+ - (void )testEnableFileOutputWhileIdleTracksIntentWithoutLiveWriter
467+ {
468+ auto enableResult = _recorder->enableFileOutput ([self validFileProperties ]);
469+
470+ XCTAssertTrue (enableResult.is_ok ());
471+ XCTAssertTrue (_recorder->fileOutputEnabledIntent ());
472+ XCTAssertFalse (_recorder->fileOutputConfigured ());
473+ XCTAssertFalse (_recorder->usesFileOutput ());
474+ XCTAssertEqual (_recorder->getCurrentDuration (), 0.0 );
475+
476+ _recorder->clearOnErrorCallback ();
477+ }
478+
479+ - (void )testSetOnAudioReadyWhileIdleTracksIntentWithoutLiveCallback
480+ {
481+ auto callbackResult = _recorder->setOnAudioReadyCallback (48000 , 256 , 1 , 99 );
482+
483+ XCTAssertTrue (callbackResult.is_ok ());
484+ XCTAssertTrue (_recorder->callbackOutputEnabledIntent ());
485+ XCTAssertFalse (_recorder->callbackOutputConfigured ());
486+ XCTAssertFalse (_recorder->usesCallback ());
487+ }
488+
489+ - (void )testConnectWhileIdleTracksIntentWithoutLiveConnection
490+ {
491+ auto context =
492+ std::make_shared<OfflineAudioContext>(2 , 512 , 44100 .0f , nullptr , RuntimeRegistry{});
493+ context->initialize ();
494+ auto adapter = context->createRecorderAdapter ();
495+
496+ _recorder->connect (adapter);
497+
498+ XCTAssertTrue (_recorder->connectionEnabledIntent ());
499+ XCTAssertFalse (_recorder->connectionConfigured ());
500+ XCTAssertFalse (_recorder->isConnected ());
501+ }
502+
436503- (void )testStartDoesNotAttemptToManageSessionWhenOwnershipIsExternal
437504{
438505 self.sessionManager .shouldManageSession = NO ;
@@ -491,6 +558,38 @@ - (void)testStopSucceedsAfterStartAndResetsState
491558 XCTAssertEqual (std::get<2 >(stopResult.unwrap ()), 0 );
492559}
493560
561+ - (void )testStopClearsConfiguredStateButPreservesConfiguredIntent
562+ {
563+ self.audioEngine .state = AudioEngineStateRunning;
564+ auto context =
565+ std::make_shared<OfflineAudioContext>(2 , 512 , 44100 .0f , nullptr , RuntimeRegistry{});
566+ context->initialize ();
567+ auto adapter = context->createRecorderAdapter ();
568+
569+ XCTAssertTrue (_recorder->enableFileOutput ([self validFileProperties ]).is_ok ());
570+ XCTAssertTrue (_recorder->setOnAudioReadyCallback (48000 , 256 , 1 , 99 ).is_ok ());
571+ _recorder->connect (adapter);
572+
573+ auto startResult = _recorder->start (" " );
574+ XCTAssertTrue (startResult.is_ok ());
575+ XCTAssertTrue (_recorder->fileOutputConfigured ());
576+ XCTAssertTrue (_recorder->callbackOutputConfigured ());
577+ XCTAssertTrue (_recorder->connectionConfigured ());
578+
579+ auto stopResult = _recorder->stop ();
580+
581+ XCTAssertTrue (stopResult.is_ok ());
582+ XCTAssertTrue (_recorder->fileOutputEnabledIntent ());
583+ XCTAssertFalse (_recorder->fileOutputConfigured ());
584+ XCTAssertFalse (_recorder->usesFileOutput ());
585+ XCTAssertTrue (_recorder->callbackOutputEnabledIntent ());
586+ XCTAssertFalse (_recorder->callbackOutputConfigured ());
587+ XCTAssertFalse (_recorder->usesCallback ());
588+ XCTAssertTrue (_recorder->connectionEnabledIntent ());
589+ XCTAssertFalse (_recorder->connectionConfigured ());
590+ XCTAssertFalse (_recorder->isConnected ());
591+ }
592+
494593- (void )testFileOutputSmokeTest
495594{
496595 self.audioEngine .state = AudioEngineStateRunning;
0 commit comments