1566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg/*
2566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg *
4566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg *  Use of this source code is governed by a BSD-style license
5566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg *  that can be found in the LICENSE file in the root of the source
6566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg *  tree. An additional intellectual property rights grant can be found
7566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg *  in the file PATENTS.  All contributing project authors may
8566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg *  be found in the AUTHORS file in the root of the source tree.
9566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg */
10566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
11566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg#include "testing/gtest/include/gtest/gtest.h"
12566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
13566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg#include "webrtc/audio/audio_state.h"
14566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg#include "webrtc/base/scoped_ptr.h"
15566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg#include "webrtc/test/mock_voice_engine.h"
16566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
17566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenbergnamespace webrtc {
18566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenbergnamespace test {
19566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenbergnamespace {
20566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
21566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenbergstruct ConfigHelper {
22566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  ConfigHelper() {
23566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg    EXPECT_CALL(voice_engine_,
24566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg        RegisterVoiceEngineObserver(testing::_)).WillOnce(testing::Return(0));
25566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg    EXPECT_CALL(voice_engine_,
26566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg        DeRegisterVoiceEngineObserver()).WillOnce(testing::Return(0));
27566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg    config_.voice_engine = &voice_engine_;
28566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  }
29566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  AudioState::Config& config() { return config_; }
30566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  MockVoiceEngine& voice_engine() { return voice_engine_; }
31566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
32566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg private:
333a94154035fa16e4efd91125311f076b547c38b9solenberg  testing::StrictMock<MockVoiceEngine> voice_engine_;
34566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  AudioState::Config config_;
35566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg};
36566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg}  // namespace
37566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
38566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenbergTEST(AudioStateTest, Create) {
39566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  ConfigHelper helper;
40566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  rtc::scoped_refptr<AudioState> audio_state =
41566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg      AudioState::Create(helper.config());
42566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  EXPECT_TRUE(audio_state.get());
43566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg}
44566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
45566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenbergTEST(AudioStateTest, ConstructDestruct) {
46566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  ConfigHelper helper;
47566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  rtc::scoped_ptr<internal::AudioState> audio_state(
48566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg      new internal::AudioState(helper.config()));
49566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg}
50566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
51566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenbergTEST(AudioStateTest, GetVoiceEngine) {
52566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  ConfigHelper helper;
53566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  rtc::scoped_ptr<internal::AudioState> audio_state(
54566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg      new internal::AudioState(helper.config()));
55566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  EXPECT_EQ(audio_state->voice_engine(), &helper.voice_engine());
56566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg}
57566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
58566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenbergTEST(AudioStateTest, TypingNoiseDetected) {
59566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  ConfigHelper helper;
60566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  rtc::scoped_ptr<internal::AudioState> audio_state(
61566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg      new internal::AudioState(helper.config()));
62566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  VoiceEngineObserver* voe_observer =
63566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg      static_cast<VoiceEngineObserver*>(audio_state.get());
64566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  EXPECT_FALSE(audio_state->typing_noise_detected());
65566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
66566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  voe_observer->CallbackOnError(-1, VE_NOT_INITED);
67566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  EXPECT_FALSE(audio_state->typing_noise_detected());
68566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
69566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING);
70566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  EXPECT_TRUE(audio_state->typing_noise_detected());
71566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  voe_observer->CallbackOnError(-1, VE_NOT_INITED);
72566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  EXPECT_TRUE(audio_state->typing_noise_detected());
73566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg
74566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING);
75566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  EXPECT_FALSE(audio_state->typing_noise_detected());
76566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  voe_observer->CallbackOnError(-1, VE_NOT_INITED);
77566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  EXPECT_FALSE(audio_state->typing_noise_detected());
78566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg}
79566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg}  // namespace test
80566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg}  // namespace webrtc
81