| /* | 
 |  *  Copyright 2013 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. | 
 |  */ | 
 |  | 
 | #include "webrtc/api/localaudiosource.h" | 
 |  | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "webrtc/api/test/fakeconstraints.h" | 
 | #include "webrtc/base/gunit.h" | 
 | #include "webrtc/media/base/fakemediaengine.h" | 
 | #include "webrtc/media/base/fakevideorenderer.h" | 
 |  | 
 | using webrtc::LocalAudioSource; | 
 | using webrtc::MediaConstraintsInterface; | 
 | using webrtc::MediaSourceInterface; | 
 | using webrtc::PeerConnectionFactoryInterface; | 
 |  | 
 | TEST(LocalAudioSourceTest, SetValidOptions) { | 
 |   webrtc::FakeConstraints constraints; | 
 |   constraints.AddMandatory( | 
 |       MediaConstraintsInterface::kGoogEchoCancellation, false); | 
 |   constraints.AddOptional( | 
 |       MediaConstraintsInterface::kExtendedFilterEchoCancellation, true); | 
 |   constraints.AddOptional(MediaConstraintsInterface::kDAEchoCancellation, true); | 
 |   constraints.AddOptional(MediaConstraintsInterface::kAutoGainControl, true); | 
 |   constraints.AddOptional( | 
 |       MediaConstraintsInterface::kExperimentalAutoGainControl, true); | 
 |   constraints.AddMandatory(MediaConstraintsInterface::kNoiseSuppression, false); | 
 |   constraints.AddOptional(MediaConstraintsInterface::kHighpassFilter, true); | 
 |  | 
 |   rtc::scoped_refptr<LocalAudioSource> source = | 
 |       LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), | 
 |                                &constraints); | 
 |  | 
 |   EXPECT_EQ(rtc::Optional<bool>(false), source->options().echo_cancellation); | 
 |   EXPECT_EQ(rtc::Optional<bool>(true), source->options().extended_filter_aec); | 
 |   EXPECT_EQ(rtc::Optional<bool>(true), source->options().delay_agnostic_aec); | 
 |   EXPECT_EQ(rtc::Optional<bool>(true), source->options().auto_gain_control); | 
 |   EXPECT_EQ(rtc::Optional<bool>(true), source->options().experimental_agc); | 
 |   EXPECT_EQ(rtc::Optional<bool>(false), source->options().noise_suppression); | 
 |   EXPECT_EQ(rtc::Optional<bool>(true), source->options().highpass_filter); | 
 | } | 
 |  | 
 | TEST(LocalAudioSourceTest, OptionNotSet) { | 
 |   webrtc::FakeConstraints constraints; | 
 |   rtc::scoped_refptr<LocalAudioSource> source = | 
 |       LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), | 
 |                                &constraints); | 
 |   EXPECT_EQ(rtc::Optional<bool>(), source->options().highpass_filter); | 
 | } | 
 |  | 
 | TEST(LocalAudioSourceTest, MandatoryOverridesOptional) { | 
 |   webrtc::FakeConstraints constraints; | 
 |   constraints.AddMandatory( | 
 |       MediaConstraintsInterface::kGoogEchoCancellation, false); | 
 |   constraints.AddOptional( | 
 |       MediaConstraintsInterface::kGoogEchoCancellation, true); | 
 |  | 
 |   rtc::scoped_refptr<LocalAudioSource> source = | 
 |       LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), | 
 |                                &constraints); | 
 |  | 
 |   EXPECT_EQ(rtc::Optional<bool>(false), source->options().echo_cancellation); | 
 | } | 
 |  | 
 | TEST(LocalAudioSourceTest, InvalidOptional) { | 
 |   webrtc::FakeConstraints constraints; | 
 |   constraints.AddOptional(MediaConstraintsInterface::kHighpassFilter, false); | 
 |   constraints.AddOptional("invalidKey", false); | 
 |  | 
 |   rtc::scoped_refptr<LocalAudioSource> source = | 
 |       LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), | 
 |                                &constraints); | 
 |  | 
 |   EXPECT_EQ(MediaSourceInterface::kLive, source->state()); | 
 |   EXPECT_EQ(rtc::Optional<bool>(false), source->options().highpass_filter); | 
 | } | 
 |  | 
 | TEST(LocalAudioSourceTest, InvalidMandatory) { | 
 |   webrtc::FakeConstraints constraints; | 
 |   constraints.AddMandatory(MediaConstraintsInterface::kHighpassFilter, false); | 
 |   constraints.AddMandatory("invalidKey", false); | 
 |  | 
 |   rtc::scoped_refptr<LocalAudioSource> source = | 
 |       LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), | 
 |                                &constraints); | 
 |  | 
 |   EXPECT_EQ(MediaSourceInterface::kLive, source->state()); | 
 |   EXPECT_EQ(rtc::Optional<bool>(false), source->options().highpass_filter); | 
 | } | 
 |  | 
 | TEST(LocalAudioSourceTest, InitWithAudioOptions) { | 
 |   cricket::AudioOptions audio_options; | 
 |   audio_options.highpass_filter = rtc::Optional<bool>(true); | 
 |   rtc::scoped_refptr<LocalAudioSource> source = LocalAudioSource::Create( | 
 |       PeerConnectionFactoryInterface::Options(), &audio_options); | 
 |   EXPECT_EQ(rtc::Optional<bool>(true), source->options().highpass_filter); | 
 | } | 
 |  | 
 | TEST(LocalAudioSourceTest, InitWithNoOptions) { | 
 |   rtc::scoped_refptr<LocalAudioSource> source = | 
 |       LocalAudioSource::Create(PeerConnectionFactoryInterface::Options(), | 
 |                                (cricket::AudioOptions*)nullptr); | 
 |   EXPECT_EQ(rtc::Optional<bool>(), source->options().highpass_filter); | 
 | } |