mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00
Always build all iOS unittests, even on the simulator.
Also, make the iOS audio unittests not run on the simulator by default, and if someone wants to run the tests one can do by using the WEBRTC_IOS_RUN_AUDIO_TESTS environment variable. Bug: webrtc:7812 Change-Id: Ie9fc70872c6617516e2f2c21039489df309b85fb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/292621 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Daniel.L (Byoungchan) Lee <daniel.l@hpcnt.com> Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39306}
This commit is contained in:
parent
60795e8c7a
commit
2e631f5c38
3 changed files with 42 additions and 10 deletions
11
sdk/BUILD.gn
11
sdk/BUILD.gn
|
@ -1114,6 +1114,8 @@ if (is_ios || is_mac) {
|
|||
|
||||
sources = [
|
||||
"objc/unittests/ObjCVideoTrackSource_xctest.mm",
|
||||
"objc/unittests/RTCAudioDeviceModule_xctest.mm",
|
||||
"objc/unittests/RTCAudioDevice_xctest.mm",
|
||||
"objc/unittests/RTCAudioSessionTest.mm",
|
||||
"objc/unittests/RTCCVPixelBuffer_xctest.mm",
|
||||
"objc/unittests/RTCCallbackLogger_xctest.m",
|
||||
|
@ -1146,15 +1148,6 @@ if (is_ios || is_mac) {
|
|||
# workaround.
|
||||
defines = [ "GLES_SILENCE_DEPRECATION" ]
|
||||
|
||||
# TODO(peterhanspers): Reenable these tests on simulator.
|
||||
# See bugs.webrtc.org/7812
|
||||
if (target_environment != "simulator") {
|
||||
sources += [
|
||||
"objc/unittests/RTCAudioDeviceModule_xctest.mm",
|
||||
"objc/unittests/RTCAudioDevice_xctest.mm",
|
||||
]
|
||||
}
|
||||
|
||||
deps = [
|
||||
":audio_device",
|
||||
":audio_session_objc",
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(WEBRTC_IOS)
|
||||
#import "sdk/objc/native/api/audio_device_module.h"
|
||||
#endif
|
||||
|
@ -126,6 +128,7 @@ static const NSUInteger kFullDuplexTimeInSec = 10;
|
|||
static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
||||
|
||||
@interface RTCAudioDeviceModuleTests : XCTestCase {
|
||||
bool _testEnabled;
|
||||
rtc::scoped_refptr<webrtc::AudioDeviceModule> audioDeviceModule;
|
||||
MockAudioTransport mock;
|
||||
}
|
||||
|
@ -142,6 +145,17 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
|
||||
- (void)setUp {
|
||||
[super setUp];
|
||||
#if defined(WEBRTC_IOS) && TARGET_OS_SIMULATOR
|
||||
// TODO(peterhanspers): Reenable these tests on simulator.
|
||||
// See bugs.webrtc.org/7812
|
||||
_testEnabled = false;
|
||||
if (::getenv("WEBRTC_IOS_RUN_AUDIO_TESTS") != nullptr) {
|
||||
_testEnabled = true;
|
||||
}
|
||||
#else
|
||||
_testEnabled = true;
|
||||
#endif
|
||||
|
||||
audioDeviceModule = webrtc::CreateAudioDeviceModule();
|
||||
XCTAssertEqual(0, audioDeviceModule->Init());
|
||||
XCTAssertEqual(0, audioDeviceModule->GetPlayoutAudioParameters(&playoutParameters));
|
||||
|
@ -192,10 +206,12 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
#pragma mark - Tests
|
||||
|
||||
- (void)testConstructDestruct {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
// Using the test fixture to create and destruct the audio device module.
|
||||
}
|
||||
|
||||
- (void)testInitTerminate {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
// Initialization is part of the test fixture.
|
||||
XCTAssertTrue(audioDeviceModule->Initialized());
|
||||
XCTAssertEqual(0, audioDeviceModule->Terminate());
|
||||
|
@ -205,6 +221,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// Tests that playout can be initiated, started and stopped. No audio callback
|
||||
// is registered in this test.
|
||||
- (void)testStartStopPlayout {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
[self startPlayout];
|
||||
[self stopPlayout];
|
||||
[self startPlayout];
|
||||
|
@ -214,6 +231,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// Tests that recording can be initiated, started and stopped. No audio callback
|
||||
// is registered in this test.
|
||||
- (void)testStartStopRecording {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
[self startRecording];
|
||||
[self stopRecording];
|
||||
[self startRecording];
|
||||
|
@ -224,6 +242,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// StartPlayout() while being uninitialized since doing so will hit a
|
||||
// RTC_DCHECK.
|
||||
- (void)testStopPlayoutRequiresInitToRestart {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
XCTAssertEqual(0, audioDeviceModule->InitPlayout());
|
||||
XCTAssertEqual(0, audioDeviceModule->StartPlayout());
|
||||
XCTAssertEqual(0, audioDeviceModule->StopPlayout());
|
||||
|
@ -236,6 +255,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// explicitly verify correct audio session calls but instead focuses on
|
||||
// ensuring that audio starts for both ADMs.
|
||||
- (void)testStartPlayoutOnTwoInstances {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
// Create and initialize a second/extra ADM instance. The default ADM is
|
||||
// created by the test harness.
|
||||
rtc::scoped_refptr<webrtc::AudioDeviceModule> secondAudioDeviceModule =
|
||||
|
@ -319,7 +339,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// Start playout and verify that the native audio layer starts asking for real
|
||||
// audio samples to play out using the NeedMorePlayData callback.
|
||||
- (void)testStartPlayoutVerifyCallbacks {
|
||||
|
||||
XCTSkipIf(!_testEnabled);
|
||||
XCTestExpectation *playoutExpectation = [self expectationWithDescription:@"NeedMorePlayoutData"];
|
||||
__block int num_callbacks = 0;
|
||||
mock.expectNeedMorePlayData(^int32_t(const size_t nSamples,
|
||||
|
@ -352,6 +372,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// Start recording and verify that the native audio layer starts feeding real
|
||||
// audio samples via the RecordedDataIsAvailable callback.
|
||||
- (void)testStartRecordingVerifyCallbacks {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
XCTestExpectation *recordExpectation =
|
||||
[self expectationWithDescription:@"RecordedDataIsAvailable"];
|
||||
__block int num_callbacks = 0;
|
||||
|
@ -390,6 +411,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// Start playout and recording (full-duplex audio) and verify that audio is
|
||||
// active in both directions.
|
||||
- (void)testStartPlayoutAndRecordingVerifyCallbacks {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
XCTestExpectation *playoutExpectation = [self expectationWithDescription:@"NeedMorePlayoutData"];
|
||||
__block NSUInteger callbackCount = 0;
|
||||
|
||||
|
@ -453,6 +475,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// asks for data to play out. Real audio is played out in this test but it does
|
||||
// not contain any explicit verification that the audio quality is perfect.
|
||||
- (void)testRunPlayoutWithFileAsSource {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
XCTAssertEqual(1u, playoutParameters.channels());
|
||||
|
||||
// Using XCTestExpectation to count callbacks is very slow.
|
||||
|
@ -488,6 +511,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
}
|
||||
|
||||
- (void)testDevices {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
// Device enumeration is not supported. Verify fixed values only.
|
||||
XCTAssertEqual(1, audioDeviceModule->PlayoutDevices());
|
||||
XCTAssertEqual(1, audioDeviceModule->RecordingDevices());
|
||||
|
@ -507,6 +531,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50;
|
|||
// TODO(henrika): tune the final test parameters after running tests on several
|
||||
// different devices.
|
||||
- (void)testRunPlayoutAndRecordingInFullDuplex {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
XCTAssertEqual(recordParameters.channels(), playoutParameters.channels());
|
||||
XCTAssertEqual(recordParameters.sample_rate(), playoutParameters.sample_rate());
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "api/task_queue/default_task_queue_factory.h"
|
||||
|
||||
#import "sdk/objc/components/audio/RTCAudioSession+Private.h"
|
||||
|
@ -17,6 +19,7 @@
|
|||
#import "sdk/objc/native/src/audio/audio_device_ios.h"
|
||||
|
||||
@interface RTCAudioDeviceTests : XCTestCase {
|
||||
bool _testEnabled;
|
||||
rtc::scoped_refptr<webrtc::AudioDeviceModule> _audioDeviceModule;
|
||||
std::unique_ptr<webrtc::ios_adm::AudioDeviceIOS> _audio_device;
|
||||
}
|
||||
|
@ -31,6 +34,16 @@
|
|||
|
||||
- (void)setUp {
|
||||
[super setUp];
|
||||
#if defined(WEBRTC_IOS) && TARGET_OS_SIMULATOR
|
||||
// TODO(peterhanspers): Reenable these tests on simulator.
|
||||
// See bugs.webrtc.org/7812
|
||||
_testEnabled = false;
|
||||
if (::getenv("WEBRTC_IOS_RUN_AUDIO_TESTS") != nullptr) {
|
||||
_testEnabled = true;
|
||||
}
|
||||
#else
|
||||
_testEnabled = true;
|
||||
#endif
|
||||
|
||||
_audioDeviceModule = webrtc::CreateAudioDeviceModule();
|
||||
_audio_device.reset(new webrtc::ios_adm::AudioDeviceIOS(/*bypass_voice_processing=*/false));
|
||||
|
@ -78,6 +91,7 @@
|
|||
// AudioDeviceIOS's is_interrupted_ flag to RTC_OBJC_TYPE(RTCAudioSession)'s isInterrupted
|
||||
// flag in AudioDeviceIOS.InitPlayOrRecord.
|
||||
- (void)testInterruptedAudioSession {
|
||||
XCTSkipIf(!_testEnabled);
|
||||
XCTAssertTrue(self.audioSession.isActive);
|
||||
XCTAssertTrue([self.audioSession.category isEqual:AVAudioSessionCategoryPlayAndRecord] ||
|
||||
[self.audioSession.category isEqual:AVAudioSessionCategoryPlayback]);
|
||||
|
|
Loading…
Reference in a new issue