| 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 ac065c7e3790acea8bc4487e422579504cecb9f3..603e450c758edf2bfca1910d03c81fed5b6b2ad6 100644
|
| --- a/webrtc/modules/audio_device/ios/objc/RTCAudioSessionTest.mm
|
| +++ b/webrtc/modules/audio_device/ios/objc/RTCAudioSessionTest.mm
|
| @@ -13,6 +13,39 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| #import "webrtc/modules/audio_device/ios/objc/RTCAudioSession.h"
|
| +#import "webrtc/modules/audio_device/ios/objc/RTCAudioSession+Private.h"
|
| +
|
| +@interface RTCAudioSessionTestDelegate : NSObject <RTCAudioSessionDelegate>
|
| +@end
|
| +
|
| +@implementation RTCAudioSessionTestDelegate
|
| +
|
| +- (void)audioSessionDidBeginInterruption:(RTCAudioSession *)session {
|
| +}
|
| +
|
| +- (void)audioSessionDidEndInterruption:(RTCAudioSession *)session
|
| + shouldResumeSession:(BOOL)shouldResumeSession {
|
| +}
|
| +
|
| +- (void)audioSessionDidChangeRoute:(RTCAudioSession *)session
|
| + reason:(AVAudioSessionRouteChangeReason)reason
|
| + previousRoute:(AVAudioSessionRouteDescription *)previousRoute {
|
| +}
|
| +
|
| +- (void)audioSessionMediaServicesWereLost:(RTCAudioSession *)session {
|
| +}
|
| +
|
| +- (void)audioSessionMediaServicesWereReset:(RTCAudioSession *)session {
|
| +}
|
| +
|
| +- (void)audioSessionShouldConfigure:(RTCAudioSession *)session {
|
| +}
|
| +
|
| +- (void)audioSessionShouldUnconfigure:(RTCAudioSession *)session {
|
| +}
|
| +
|
| +@end
|
| +
|
|
|
| @interface RTCAudioSessionTest : NSObject
|
|
|
| @@ -36,9 +69,111 @@
|
| 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]);
|
| +}
|
| +
|
| @end
|
|
|
| -TEST(RTCAudioSessionTest, LockForConfiguration) {
|
| +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];
|
| +}
|
| +
|
| +} // namespace webrtc
|
|
|