| Index: webrtc/modules/audio_device/ios/objc/RTCAudioSessionTest.mm
|
| diff --git a/webrtc/modules/audio_device/ios/objc/RTCAudioSessionTest.mm b/webrtc/modules/audio_device/ios/objc/RTCAudioSessionTest.mm
|
| deleted file mode 100644
|
| index c050e314c99ee681b8a070aa33e9a53a89e6c013..0000000000000000000000000000000000000000
|
| --- a/webrtc/modules/audio_device/ios/objc/RTCAudioSessionTest.mm
|
| +++ /dev/null
|
| @@ -1,337 +0,0 @@
|
| -/*
|
| - * Copyright 2016 The WebRTC project authors. All Rights Reserved.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license
|
| - * that can be found in the LICENSE file in the root of the source
|
| - * tree. An additional intellectual property rights grant can be found
|
| - * in the file PATENTS. All contributing project authors may
|
| - * be found in the AUTHORS file in the root of the source tree.
|
| - */
|
| -
|
| -#import <Foundation/Foundation.h>
|
| -#import <OCMock/OCMock.h>
|
| -
|
| -#include "webrtc/test/gtest.h"
|
| -
|
| -#import "webrtc/modules/audio_device/ios/objc/RTCAudioSession.h"
|
| -#import "webrtc/modules/audio_device/ios/objc/RTCAudioSession+Private.h"
|
| -#import "webrtc/modules/audio_device/ios/objc/RTCAudioSessionConfiguration.h"
|
| -
|
| -@interface RTCAudioSessionTestDelegate : NSObject <RTCAudioSessionDelegate>
|
| -
|
| -@property (nonatomic, readonly) float outputVolume;
|
| -
|
| -@end
|
| -
|
| -@implementation RTCAudioSessionTestDelegate
|
| -
|
| -@synthesize outputVolume = _outputVolume;
|
| -
|
| -- (instancetype)init {
|
| - if (self = [super init]) {
|
| - _outputVolume = -1;
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)audioSessionDidBeginInterruption:(RTCAudioSession *)session {
|
| -}
|
| -
|
| -- (void)audioSessionDidEndInterruption:(RTCAudioSession *)session
|
| - shouldResumeSession:(BOOL)shouldResumeSession {
|
| -}
|
| -
|
| -- (void)audioSessionDidChangeRoute:(RTCAudioSession *)session
|
| - reason:(AVAudioSessionRouteChangeReason)reason
|
| - previousRoute:(AVAudioSessionRouteDescription *)previousRoute {
|
| -}
|
| -
|
| -- (void)audioSessionMediaServerTerminated:(RTCAudioSession *)session {
|
| -}
|
| -
|
| -- (void)audioSessionMediaServerReset:(RTCAudioSession *)session {
|
| -}
|
| -
|
| -- (void)audioSessionShouldConfigure:(RTCAudioSession *)session {
|
| -}
|
| -
|
| -- (void)audioSessionShouldUnconfigure:(RTCAudioSession *)session {
|
| -}
|
| -
|
| -- (void)audioSession:(RTCAudioSession *)audioSession
|
| - didChangeOutputVolume:(float)outputVolume {
|
| - _outputVolume = outputVolume;
|
| -}
|
| -
|
| -@end
|
| -
|
| -// A delegate that adds itself to the audio session on init and removes itself
|
| -// in its dealloc.
|
| -@interface RTCTestRemoveOnDeallocDelegate : RTCAudioSessionTestDelegate
|
| -@end
|
| -
|
| -@implementation RTCTestRemoveOnDeallocDelegate
|
| -
|
| -- (instancetype)init {
|
| - if (self = [super init]) {
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| - [session addDelegate:self];
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)dealloc {
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| - [session removeDelegate:self];
|
| -}
|
| -
|
| -@end
|
| -
|
| -
|
| -@interface RTCAudioSessionTest : NSObject
|
| -
|
| -- (void)testLockForConfiguration;
|
| -
|
| -@end
|
| -
|
| -@implementation RTCAudioSessionTest
|
| -
|
| -- (void)testLockForConfiguration {
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| -
|
| - for (size_t i = 0; i < 2; i++) {
|
| - [session lockForConfiguration];
|
| - EXPECT_TRUE(session.isLocked);
|
| - }
|
| - for (size_t i = 0; i < 2; i++) {
|
| - EXPECT_TRUE(session.isLocked);
|
| - [session unlockForConfiguration];
|
| - }
|
| - EXPECT_FALSE(session.isLocked);
|
| -}
|
| -
|
| -- (void)testAddAndRemoveDelegates {
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| - NSMutableArray *delegates = [NSMutableArray array];
|
| - const size_t count = 5;
|
| - for (size_t i = 0; i < count; ++i) {
|
| - RTCAudioSessionTestDelegate *delegate =
|
| - [[RTCAudioSessionTestDelegate alloc] init];
|
| - [session addDelegate:delegate];
|
| - [delegates addObject:delegate];
|
| - EXPECT_EQ(i + 1, session.delegates.size());
|
| - }
|
| - [delegates enumerateObjectsUsingBlock:^(RTCAudioSessionTestDelegate *obj,
|
| - NSUInteger idx,
|
| - BOOL *stop) {
|
| - [session removeDelegate:obj];
|
| - }];
|
| - EXPECT_EQ(0u, session.delegates.size());
|
| -}
|
| -
|
| -- (void)testPushDelegate {
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| - NSMutableArray *delegates = [NSMutableArray array];
|
| - const size_t count = 2;
|
| - for (size_t i = 0; i < count; ++i) {
|
| - RTCAudioSessionTestDelegate *delegate =
|
| - [[RTCAudioSessionTestDelegate alloc] init];
|
| - [session addDelegate:delegate];
|
| - [delegates addObject:delegate];
|
| - }
|
| - // Test that it gets added to the front of the list.
|
| - RTCAudioSessionTestDelegate *pushedDelegate =
|
| - [[RTCAudioSessionTestDelegate alloc] init];
|
| - [session pushDelegate:pushedDelegate];
|
| - EXPECT_TRUE(pushedDelegate == session.delegates[0]);
|
| -
|
| - // Test that it stays at the front of the list.
|
| - for (size_t i = 0; i < count; ++i) {
|
| - RTCAudioSessionTestDelegate *delegate =
|
| - [[RTCAudioSessionTestDelegate alloc] init];
|
| - [session addDelegate:delegate];
|
| - [delegates addObject:delegate];
|
| - }
|
| - EXPECT_TRUE(pushedDelegate == session.delegates[0]);
|
| -
|
| - // Test that the next one goes to the front too.
|
| - pushedDelegate = [[RTCAudioSessionTestDelegate alloc] init];
|
| - [session pushDelegate:pushedDelegate];
|
| - EXPECT_TRUE(pushedDelegate == session.delegates[0]);
|
| -}
|
| -
|
| -// Tests that delegates added to the audio session properly zero out. This is
|
| -// checking an implementation detail (that vectors of __weak work as expected).
|
| -- (void)testZeroingWeakDelegate {
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| - @autoreleasepool {
|
| - // Add a delegate to the session. There should be one delegate at this
|
| - // point.
|
| - RTCAudioSessionTestDelegate *delegate =
|
| - [[RTCAudioSessionTestDelegate alloc] init];
|
| - [session addDelegate:delegate];
|
| - EXPECT_EQ(1u, session.delegates.size());
|
| - EXPECT_TRUE(session.delegates[0]);
|
| - }
|
| - // The previously created delegate should've de-alloced, leaving a nil ptr.
|
| - EXPECT_FALSE(session.delegates[0]);
|
| - RTCAudioSessionTestDelegate *delegate =
|
| - [[RTCAudioSessionTestDelegate alloc] init];
|
| - [session addDelegate:delegate];
|
| - // On adding a new delegate, nil ptrs should've been cleared.
|
| - EXPECT_EQ(1u, session.delegates.size());
|
| - EXPECT_TRUE(session.delegates[0]);
|
| -}
|
| -
|
| -// Tests that we don't crash when removing delegates in dealloc.
|
| -// Added as a regression test.
|
| -- (void)testRemoveDelegateOnDealloc {
|
| - @autoreleasepool {
|
| - RTCTestRemoveOnDeallocDelegate *delegate =
|
| - [[RTCTestRemoveOnDeallocDelegate alloc] init];
|
| - EXPECT_TRUE(delegate);
|
| - }
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| - EXPECT_EQ(0u, session.delegates.size());
|
| -}
|
| -
|
| -- (void)testAudioSessionActivation {
|
| - RTCAudioSession *audioSession = [RTCAudioSession sharedInstance];
|
| - EXPECT_EQ(0, audioSession.activationCount);
|
| - [audioSession audioSessionDidActivate:[AVAudioSession sharedInstance]];
|
| - EXPECT_EQ(1, audioSession.activationCount);
|
| - [audioSession audioSessionDidDeactivate:[AVAudioSession sharedInstance]];
|
| - EXPECT_EQ(0, audioSession.activationCount);
|
| -}
|
| -
|
| -// Hack - fixes OCMVerify link error
|
| -// Link error is: Undefined symbols for architecture i386:
|
| -// "OCMMakeLocation(objc_object*, char const*, int)", referenced from:
|
| -// -[RTCAudioSessionTest testConfigureWebRTCSession] in RTCAudioSessionTest.o
|
| -// ld: symbol(s) not found for architecture i386
|
| -// REASON: https://github.com/erikdoe/ocmock/issues/238
|
| -OCMLocation *OCMMakeLocation(id testCase, const char *fileCString, int line){
|
| - return [OCMLocation locationWithTestCase:testCase
|
| - file:[NSString stringWithUTF8String:fileCString]
|
| - line:line];
|
| -}
|
| -
|
| -- (void)testConfigureWebRTCSession {
|
| - NSError *error = nil;
|
| -
|
| - void (^setActiveBlock)(NSInvocation *invocation) = ^(NSInvocation *invocation) {
|
| - __autoreleasing NSError **retError;
|
| - [invocation getArgument:&retError atIndex:4];
|
| - *retError = [NSError errorWithDomain:@"AVAudioSession"
|
| - code:AVAudioSessionErrorInsufficientPriority
|
| - userInfo:nil];
|
| - BOOL failure = NO;
|
| - [invocation setReturnValue:&failure];
|
| - };
|
| -
|
| - id mockAVAudioSession = OCMPartialMock([AVAudioSession sharedInstance]);
|
| - OCMStub([[mockAVAudioSession ignoringNonObjectArgs]
|
| - setActive:YES withOptions:0 error:((NSError __autoreleasing **)[OCMArg anyPointer])]).
|
| - andDo(setActiveBlock);
|
| -
|
| - id mockAudioSession = OCMPartialMock([RTCAudioSession sharedInstance]);
|
| - OCMStub([mockAudioSession session]).andReturn(mockAVAudioSession);
|
| -
|
| - RTCAudioSession *audioSession = mockAudioSession;
|
| - EXPECT_EQ(0, audioSession.activationCount);
|
| - [audioSession lockForConfiguration];
|
| - EXPECT_TRUE([audioSession checkLock:nil]);
|
| - // configureWebRTCSession is forced to fail in the above mock interface,
|
| - // so activationCount should remain 0
|
| - OCMExpect([[mockAVAudioSession ignoringNonObjectArgs]
|
| - setActive:YES withOptions:0 error:((NSError __autoreleasing **)[OCMArg anyPointer])]).
|
| - andDo(setActiveBlock);
|
| - OCMExpect([mockAudioSession session]).andReturn(mockAVAudioSession);
|
| - EXPECT_FALSE([audioSession configureWebRTCSession:&error]);
|
| - EXPECT_EQ(0, audioSession.activationCount);
|
| -
|
| - id session = audioSession.session;
|
| - EXPECT_EQ(session, mockAVAudioSession);
|
| - EXPECT_EQ(NO, [mockAVAudioSession setActive:YES withOptions:0 error:&error]);
|
| - [audioSession unlockForConfiguration];
|
| -
|
| - OCMVerify([mockAudioSession session]);
|
| - OCMVerify([[mockAVAudioSession ignoringNonObjectArgs] setActive:YES withOptions:0 error:&error]);
|
| - OCMVerify([[mockAVAudioSession ignoringNonObjectArgs] setActive:NO withOptions:0 error:&error]);
|
| -
|
| - [mockAVAudioSession stopMocking];
|
| - [mockAudioSession stopMocking];
|
| -}
|
| -
|
| -- (void)testAudioVolumeDidNotify {
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| - RTCAudioSessionTestDelegate *delegate =
|
| - [[RTCAudioSessionTestDelegate alloc] init];
|
| - [session addDelegate:delegate];
|
| -
|
| - [session observeValueForKeyPath:@"outputVolume"
|
| - ofObject:[AVAudioSession sharedInstance]
|
| - change:
|
| - @{NSKeyValueChangeNewKey :
|
| - @([AVAudioSession sharedInstance].outputVolume) }
|
| - context:nil];
|
| -
|
| - EXPECT_NE(delegate.outputVolume, -1);
|
| - EXPECT_EQ([AVAudioSession sharedInstance].outputVolume, delegate.outputVolume);
|
| -}
|
| -
|
| -@end
|
| -
|
| -namespace webrtc {
|
| -
|
| -class AudioSessionTest : public ::testing::Test {
|
| - protected:
|
| - void TearDown() {
|
| - RTCAudioSession *session = [RTCAudioSession sharedInstance];
|
| - for (id<RTCAudioSessionDelegate> delegate : session.delegates) {
|
| - [session removeDelegate:delegate];
|
| - }
|
| - }
|
| -};
|
| -
|
| -TEST_F(AudioSessionTest, LockForConfiguration) {
|
| - RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init];
|
| - [test testLockForConfiguration];
|
| -}
|
| -
|
| -TEST_F(AudioSessionTest, AddAndRemoveDelegates) {
|
| - RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init];
|
| - [test testAddAndRemoveDelegates];
|
| -}
|
| -
|
| -TEST_F(AudioSessionTest, PushDelegate) {
|
| - RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init];
|
| - [test testPushDelegate];
|
| -}
|
| -
|
| -TEST_F(AudioSessionTest, ZeroingWeakDelegate) {
|
| - RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init];
|
| - [test testZeroingWeakDelegate];
|
| -}
|
| -
|
| -TEST_F(AudioSessionTest, RemoveDelegateOnDealloc) {
|
| - RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init];
|
| - [test testRemoveDelegateOnDealloc];
|
| -}
|
| -
|
| -TEST_F(AudioSessionTest, AudioSessionActivation) {
|
| - RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init];
|
| - [test testAudioSessionActivation];
|
| -}
|
| -
|
| -TEST_F(AudioSessionTest, ConfigureWebRTCSession) {
|
| - RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init];
|
| - [test testConfigureWebRTCSession];
|
| -}
|
| -
|
| -TEST_F(AudioSessionTest, AudioVolumeDidNotify) {
|
| - RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init];
|
| - [test testAudioVolumeDidNotify];
|
| -}
|
| -
|
| -} // namespace webrtc
|
|
|