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 |
index 3f55077ed213a1ac6aed75e6befb2def545d7c49..a4b49fc1c08129fb4f3f2a1ba0b12397769a9b87 100644 |
--- a/webrtc/modules/audio_device/ios/objc/RTCAudioSessionTest.mm |
+++ b/webrtc/modules/audio_device/ios/objc/RTCAudioSessionTest.mm |
@@ -9,11 +9,13 @@ |
*/ |
#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> |
@end |
@@ -185,6 +187,65 @@ |
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]; |
+} |
+ |
@end |
namespace webrtc { |
@@ -229,5 +290,9 @@ TEST_F(AudioSessionTest, AudioSessionActivation) { |
[test testAudioSessionActivation]; |
} |
+TEST_F(AudioSessionTest, ConfigureWebRTCSession) { |
+ RTCAudioSessionTest *test = [[RTCAudioSessionTest alloc] init]; |
+ [test testConfigureWebRTCSession]; |
+} |
} // namespace webrtc |