Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 37 additions & 24 deletions apps/fabric-example/ios/FabricExampleTests/AudioEngineTests.mm
Original file line number Diff line number Diff line change
Expand Up @@ -263,8 +263,6 @@ - (void)setUp {
self.audioEngine = [[TestableAudioEngine alloc] init];
AVAudioFormat *inputFormat = [self testInputFormat];
self.audioEngine.defaultCreatedEngineInputFormat = inputFormat;
self.audioEngine.currentFakeAudioEngine.fakeInputNode.outputFormat =
inputFormat;
self.sessionManager = [[FakeAudioSessionManager alloc] init];
self.audioEngine.sessionManager = self.sessionManager;
}
Expand Down Expand Up @@ -332,6 +330,11 @@ - (NSString *)attachSourceNodeToAudioEngine {
channelCount:2];
}

- (FakeAudioEngine *)createFakeAudioEngine {
[self.audioEngine createAudioEngineIfNeeded];
return self.audioEngine.currentFakeAudioEngine;
}

- (void)testCleanupDestroysInternalEngineAndResetsStateAndDeactivatesSession {
[self attachSourceNodeToAudioEngine];
self.audioEngine.graphNeedsRebuild = YES;
Expand All @@ -350,7 +353,7 @@ - (void)testCleanupDestroysInternalEngineAndResetsStateAndDeactivatesSession {
}

- (void)testGetStateAndIsEngineRunningReflectUnderlyingEngine {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];

XCTAssertEqual([self.audioEngine getState], AudioEngineStateIdle);
XCTAssertFalse([self.audioEngine isEngineRunning]);
Expand All @@ -365,12 +368,22 @@ - (void)testGetStateAndIsEngineRunningReflectUnderlyingEngine {
XCTAssertFalse([self.audioEngine isEngineRunning]);
}

- (void)testAudioEngineIsNotCreatedUntilFirstNodeAttach {
XCTAssertNil(self.audioEngine.audioEngine);
XCTAssertEqual(self.audioEngine.createdFakeEngines.count, 0UL);

[self attachSourceNodeToAudioEngine];

XCTAssertNotNil(self.audioEngine.audioEngine);
XCTAssertEqual(self.audioEngine.createdFakeEngines.count, 1UL);
}

- (void)testAttachSourceNodeStoresAndConnectsSource {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
NSString *sourceNodeId = [self.audioEngine
attachSourceNodeWithRenderBlock:[self testSourceRenderBlock]
sampleRate:44100
channelCount:2];
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
AVAudioSourceNode *sourceNode = self.audioEngine.sourceNodes[sourceNodeId];
AVAudioFormat *format = self.audioEngine.sourceFormats[sourceNodeId];

Expand All @@ -393,7 +406,7 @@ - (void)testAttachSourceNodeStoresAndConnectsSource {
}

- (void)testDetachSourceNodeWithUnknownIdDoesNothing {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];

[self.audioEngine detachSourceNodeWithId:@"missing-source"];

Expand Down Expand Up @@ -434,12 +447,12 @@ - (void)testDetachSourceNodeKeepsGraphNeedsRebuildWhenInputRemains {
}

- (void)testAttachInputNodeStoresAndConnectsInput {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
[self.audioEngine
attachInputNodeWithReceiverBlock:[self testInputReceiverBlock]
voiceProcessingEnabled:NO
onInputConfigurationChange:nil];

FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
AVAudioSinkNode *inputNode = self.audioEngine.inputNode;
XCTAssertNotNil(inputNode);
XCTAssertEqual(fakeEngine.attachNodeCallCount, 1);
Expand All @@ -454,14 +467,14 @@ - (void)testAttachInputNodeStoresAndConnectsInput {
}

- (void)testAttachInputNodeDefersConnectionUntilLiveInputFormatIsAvailable {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
fakeEngine.fakeInputNode.outputFormat = nil;
self.audioEngine.defaultCreatedEngineInputFormat = nil;

[self.audioEngine
attachInputNodeWithReceiverBlock:[self testInputReceiverBlock]
voiceProcessingEnabled:NO
onInputConfigurationChange:nil];

FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
XCTAssertNil(self.audioEngine.inputNode);
XCTAssertEqual(fakeEngine.attachNodeCallCount, 0);
XCTAssertEqual(fakeEngine.connectCallCount, 0);
Expand All @@ -478,7 +491,7 @@ - (void)testAttachInputNodeDefersConnectionUntilLiveInputFormatIsAvailable {
}

- (void)testDetachInputNodeWithoutInputDoesNothing {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];

[self.audioEngine detachInputNode];

Expand Down Expand Up @@ -512,13 +525,13 @@ - (void)testDetachInputNodeClearsGraphOnlyWhenNoSourcesRemain {
}

- (void)testDetachInputNodePreservesSessionDeactivationInvalidation {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
fakeEngine.fakeRunning = YES;
self.audioEngine.state = AudioEngineStateRunning;
[self.audioEngine
attachInputNodeWithReceiverBlock:[self testInputReceiverBlock]
voiceProcessingEnabled:NO
onInputConfigurationChange:nil];
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
fakeEngine.fakeRunning = YES;
self.audioEngine.state = AudioEngineStateRunning;

[self.audioEngine onSessionDeactivated];
[self.audioEngine detachInputNode];
Expand All @@ -542,7 +555,7 @@ - (void)testOnInterruptionBeginOnlyTransitionsFromRunning {
}

- (void)testOnSessionDeactivatedNoOpsFromIdle {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];

[self.audioEngine onSessionDeactivated];

Expand All @@ -551,7 +564,7 @@ - (void)testOnSessionDeactivatedNoOpsFromIdle {
}

- (void)testOnSessionDeactivatedPausesRunningEngine {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];
fakeEngine.fakeRunning = YES;
self.audioEngine.state = AudioEngineStateRunning;

Expand All @@ -563,10 +576,10 @@ - (void)testOnSessionDeactivatedPausesRunningEngine {
}

- (void)testOnSessionDeactivatedMarksGraphForRebuildWhenNodesAreAttached {
[self attachSourceNodeToAudioEngine];
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
fakeEngine.fakeRunning = YES;
self.audioEngine.state = AudioEngineStateRunning;
[self attachSourceNodeToAudioEngine];

[self.audioEngine onSessionDeactivated];

Expand All @@ -578,7 +591,7 @@ - (void)testOnSessionDeactivatedMarksGraphForRebuildWhenNodesAreAttached {

- (void)
testOnSessionDeactivatedTransitionsToPausedWithoutPauseWhenEngineStopped {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];
fakeEngine.fakeRunning = NO;
self.audioEngine.state = AudioEngineStateRunning;

Expand All @@ -591,10 +604,10 @@ - (void)testOnSessionDeactivatedMarksGraphForRebuildWhenNodesAreAttached {

- (void)
testOnSessionDeactivatedMarksStoppedGraphForRebuildWhenNodesAreAttached {
[self attachSourceNodeToAudioEngine];
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
fakeEngine.fakeRunning = NO;
self.audioEngine.state = AudioEngineStateRunning;
[self attachSourceNodeToAudioEngine];

[self.audioEngine onSessionDeactivated];

Expand All @@ -605,7 +618,7 @@ - (void)testOnSessionDeactivatedMarksGraphForRebuildWhenNodesAreAttached {
}

- (void)testOnInterruptionEndNoOpsUnlessInterrupted {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];

[self.audioEngine onInterruptionEnd:true];

Expand Down Expand Up @@ -668,7 +681,7 @@ - (void)testStartIfNecessaryReturnsFalseWhenGraphEmpty {
}

- (void)testStartIfNecessaryReturnsTrueWhenAlreadyRunning {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];
fakeEngine.fakeRunning = YES;
self.audioEngine.state = AudioEngineStateRunning;

Expand Down Expand Up @@ -822,7 +835,7 @@ - (void)testStartIfNecessaryReturnsFalseWhenEngineStartFails {
}

- (void)testPauseIfNecessaryNoOpsWhenAlreadyPaused {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];
self.audioEngine.state = AudioEngineStatePaused;

[self.audioEngine pauseIfNecessary];
Expand All @@ -832,7 +845,7 @@ - (void)testPauseIfNecessaryNoOpsWhenAlreadyPaused {
}

- (void)testPauseIfNecessaryPausesActiveEngine {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];
self.audioEngine.state = AudioEngineStateRunning;

[self.audioEngine pauseIfNecessary];
Expand All @@ -842,7 +855,7 @@ - (void)testPauseIfNecessaryPausesActiveEngine {
}

- (void)testStopIfNecessaryNoOpsFromIdle {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];

[self.audioEngine stopIfNecessary];

Expand Down Expand Up @@ -879,7 +892,7 @@ - (void)testStopIfPossibleNoOpsWhenGraphStillExists {
}

- (void)testStopIfPossibleKeepsIdleGraphlessEngineAlive {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];

[self.audioEngine stopIfPossible];

Expand All @@ -890,7 +903,7 @@ - (void)testStopIfPossibleKeepsIdleGraphlessEngineAlive {
}

- (void)testStopIfPossibleStopsNonIdleGraphlessEngineWithoutDestroyingIt {
FakeAudioEngine *fakeEngine = self.audioEngine.currentFakeAudioEngine;
FakeAudioEngine *fakeEngine = [self createFakeAudioEngine];
fakeEngine.fakeRunning = YES;
self.audioEngine.state = AudioEngineStateRunning;

Expand Down