Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Side by Side Diff: webrtc/modules/audio_coding/neteq/neteq_impl_unittest.cc

Issue 1921243002: NetEq: Dependency injection through one struct instead of many params (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 // This function is called when inserting a packet list into the mock packet 47 // This function is called when inserting a packet list into the mock packet
48 // buffer. The purpose is to delete all inserted packets properly, to avoid 48 // buffer. The purpose is to delete all inserted packets properly, to avoid
49 // memory leaks in the test. 49 // memory leaks in the test.
50 int DeletePacketsAndReturnOk(PacketList* packet_list) { 50 int DeletePacketsAndReturnOk(PacketList* packet_list) {
51 PacketBuffer::DeleteAllPackets(packet_list); 51 PacketBuffer::DeleteAllPackets(packet_list);
52 return PacketBuffer::kOK; 52 return PacketBuffer::kOK;
53 } 53 }
54 54
55 class NetEqImplTest : public ::testing::Test { 55 class NetEqImplTest : public ::testing::Test {
56 protected: 56 protected:
57 NetEqImplTest() 57 NetEqImplTest() : config_() { config_.sample_rate_hz = 8000; }
kwiberg-webrtc 2016/04/26 13:00:04 "config_()" is unnecessary; a call to the default
hlundin-webrtc 2016/04/26 13:20:38 Done.
58 : neteq_(NULL),
59 config_(),
60 tick_timer_(new TickTimer),
61 mock_buffer_level_filter_(NULL),
62 buffer_level_filter_(NULL),
63 use_mock_buffer_level_filter_(true),
64 mock_decoder_database_(NULL),
65 decoder_database_(NULL),
66 use_mock_decoder_database_(true),
67 mock_delay_peak_detector_(NULL),
68 delay_peak_detector_(NULL),
69 use_mock_delay_peak_detector_(true),
70 mock_delay_manager_(NULL),
71 delay_manager_(NULL),
72 use_mock_delay_manager_(true),
73 mock_dtmf_buffer_(NULL),
74 dtmf_buffer_(NULL),
75 use_mock_dtmf_buffer_(true),
76 mock_dtmf_tone_generator_(NULL),
77 dtmf_tone_generator_(NULL),
78 use_mock_dtmf_tone_generator_(true),
79 mock_packet_buffer_(NULL),
80 packet_buffer_(NULL),
81 use_mock_packet_buffer_(true),
82 mock_payload_splitter_(NULL),
83 payload_splitter_(NULL),
84 use_mock_payload_splitter_(true),
85 timestamp_scaler_(NULL) {
86 config_.sample_rate_hz = 8000;
87 }
88 58
89 void CreateInstance() { 59 void CreateInstance() {
60 NetEqImpl::Dependencies deps(config_);
61
62 // Get a local pointer to NetEq's TickTimer object.
63 tick_timer_ = deps.tick_timer.get();
64
90 if (use_mock_buffer_level_filter_) { 65 if (use_mock_buffer_level_filter_) {
91 mock_buffer_level_filter_ = new MockBufferLevelFilter; 66 std::unique_ptr<MockBufferLevelFilter> mock(new MockBufferLevelFilter);
92 buffer_level_filter_ = mock_buffer_level_filter_; 67 mock_buffer_level_filter_ = mock.get();
93 } else { 68 deps.buffer_level_filter = std::move(mock);
94 buffer_level_filter_ = new BufferLevelFilter;
95 } 69 }
70 buffer_level_filter_ = deps.buffer_level_filter.get();
71
96 if (use_mock_decoder_database_) { 72 if (use_mock_decoder_database_) {
97 mock_decoder_database_ = new MockDecoderDatabase; 73 std::unique_ptr<MockDecoderDatabase> mock(new MockDecoderDatabase);
74 mock_decoder_database_ = mock.get();
98 EXPECT_CALL(*mock_decoder_database_, GetActiveCngDecoder()) 75 EXPECT_CALL(*mock_decoder_database_, GetActiveCngDecoder())
99 .WillOnce(ReturnNull()); 76 .WillOnce(ReturnNull());
100 decoder_database_ = mock_decoder_database_; 77 deps.decoder_database = std::move(mock);
101 } else {
102 decoder_database_ = new DecoderDatabase;
103 } 78 }
79 decoder_database_ = deps.decoder_database.get();
80
104 if (use_mock_delay_peak_detector_) { 81 if (use_mock_delay_peak_detector_) {
105 mock_delay_peak_detector_ = new MockDelayPeakDetector; 82 std::unique_ptr<MockDelayPeakDetector> mock(new MockDelayPeakDetector);
83 mock_delay_peak_detector_ = mock.get();
106 EXPECT_CALL(*mock_delay_peak_detector_, Reset()).Times(1); 84 EXPECT_CALL(*mock_delay_peak_detector_, Reset()).Times(1);
107 delay_peak_detector_ = mock_delay_peak_detector_; 85 deps.delay_peak_detector = std::move(mock);
108 } else {
109 delay_peak_detector_ = new DelayPeakDetector;
110 } 86 }
87 delay_peak_detector_ = deps.delay_peak_detector.get();
88
111 if (use_mock_delay_manager_) { 89 if (use_mock_delay_manager_) {
112 mock_delay_manager_ = new MockDelayManager(config_.max_packets_in_buffer, 90 std::unique_ptr<MockDelayManager> mock(new MockDelayManager(
113 delay_peak_detector_); 91 config_.max_packets_in_buffer, delay_peak_detector_));
92 mock_delay_manager_ = mock.get();
114 EXPECT_CALL(*mock_delay_manager_, set_streaming_mode(false)).Times(1); 93 EXPECT_CALL(*mock_delay_manager_, set_streaming_mode(false)).Times(1);
115 delay_manager_ = mock_delay_manager_; 94 deps.delay_manager = std::move(mock);
116 } else {
117 delay_manager_ =
118 new DelayManager(config_.max_packets_in_buffer, delay_peak_detector_);
119 } 95 }
96 delay_manager_ = deps.delay_manager.get();
97
120 if (use_mock_dtmf_buffer_) { 98 if (use_mock_dtmf_buffer_) {
121 mock_dtmf_buffer_ = new MockDtmfBuffer(config_.sample_rate_hz); 99 std::unique_ptr<MockDtmfBuffer> mock(
122 dtmf_buffer_ = mock_dtmf_buffer_; 100 new MockDtmfBuffer(config_.sample_rate_hz));
123 } else { 101 mock_dtmf_buffer_ = mock.get();
124 dtmf_buffer_ = new DtmfBuffer(config_.sample_rate_hz); 102 deps.dtmf_buffer = std::move(mock);
125 } 103 }
104 dtmf_buffer_ = deps.dtmf_buffer.get();
105
126 if (use_mock_dtmf_tone_generator_) { 106 if (use_mock_dtmf_tone_generator_) {
127 mock_dtmf_tone_generator_ = new MockDtmfToneGenerator; 107 std::unique_ptr<MockDtmfToneGenerator> mock(new MockDtmfToneGenerator);
128 dtmf_tone_generator_ = mock_dtmf_tone_generator_; 108 mock_dtmf_tone_generator_ = mock.get();
129 } else { 109 deps.dtmf_tone_generator = std::move(mock);
130 dtmf_tone_generator_ = new DtmfToneGenerator;
131 } 110 }
111 dtmf_tone_generator_ = deps.dtmf_tone_generator.get();
112
132 if (use_mock_packet_buffer_) { 113 if (use_mock_packet_buffer_) {
133 mock_packet_buffer_ = new MockPacketBuffer(config_.max_packets_in_buffer); 114 std::unique_ptr<MockPacketBuffer> mock(
134 packet_buffer_ = mock_packet_buffer_; 115 new MockPacketBuffer(config_.max_packets_in_buffer));
135 } else { 116 mock_packet_buffer_ = mock.get();
136 packet_buffer_ = new PacketBuffer(config_.max_packets_in_buffer); 117 deps.packet_buffer = std::move(mock);
137 } 118 }
119 packet_buffer_ = deps.packet_buffer.get();
120
138 if (use_mock_payload_splitter_) { 121 if (use_mock_payload_splitter_) {
139 mock_payload_splitter_ = new MockPayloadSplitter; 122 std::unique_ptr<MockPayloadSplitter> mock(new MockPayloadSplitter);
140 payload_splitter_ = mock_payload_splitter_; 123 mock_payload_splitter_ = mock.get();
141 } else { 124 deps.payload_splitter = std::move(mock);
142 payload_splitter_ = new PayloadSplitter;
143 } 125 }
144 timestamp_scaler_ = new TimestampScaler(*decoder_database_); 126 payload_splitter_ = deps.payload_splitter.get();
145 AccelerateFactory* accelerate_factory = new AccelerateFactory;
146 ExpandFactory* expand_factory = new ExpandFactory;
147 PreemptiveExpandFactory* preemptive_expand_factory =
148 new PreemptiveExpandFactory;
149 127
150 neteq_ = new NetEqImpl( 128 deps.timestamp_scaler = std::unique_ptr<TimestampScaler>(
151 config_, std::unique_ptr<TickTimer>(tick_timer_), buffer_level_filter_, 129 new TimestampScaler(*deps.decoder_database.get()));
152 decoder_database_, delay_manager_, delay_peak_detector_, dtmf_buffer_, 130
153 dtmf_tone_generator_, packet_buffer_, payload_splitter_, 131 neteq_.reset(new NetEqImpl(config_, std::move(deps)));
154 timestamp_scaler_, accelerate_factory, expand_factory,
155 preemptive_expand_factory);
156 ASSERT_TRUE(neteq_ != NULL); 132 ASSERT_TRUE(neteq_ != NULL);
157 } 133 }
158 134
159 void UseNoMocks() { 135 void UseNoMocks() {
160 ASSERT_TRUE(neteq_ == NULL) << "Must call UseNoMocks before CreateInstance"; 136 ASSERT_TRUE(neteq_ == NULL) << "Must call UseNoMocks before CreateInstance";
161 use_mock_buffer_level_filter_ = false; 137 use_mock_buffer_level_filter_ = false;
162 use_mock_decoder_database_ = false; 138 use_mock_decoder_database_ = false;
163 use_mock_delay_peak_detector_ = false; 139 use_mock_delay_peak_detector_ = false;
164 use_mock_delay_manager_ = false; 140 use_mock_delay_manager_ = false;
165 use_mock_dtmf_buffer_ = false; 141 use_mock_dtmf_buffer_ = false;
(...skipping 17 matching lines...) Expand all
183 } 159 }
184 if (use_mock_dtmf_buffer_) { 160 if (use_mock_dtmf_buffer_) {
185 EXPECT_CALL(*mock_dtmf_buffer_, Die()).Times(1); 161 EXPECT_CALL(*mock_dtmf_buffer_, Die()).Times(1);
186 } 162 }
187 if (use_mock_dtmf_tone_generator_) { 163 if (use_mock_dtmf_tone_generator_) {
188 EXPECT_CALL(*mock_dtmf_tone_generator_, Die()).Times(1); 164 EXPECT_CALL(*mock_dtmf_tone_generator_, Die()).Times(1);
189 } 165 }
190 if (use_mock_packet_buffer_) { 166 if (use_mock_packet_buffer_) {
191 EXPECT_CALL(*mock_packet_buffer_, Die()).Times(1); 167 EXPECT_CALL(*mock_packet_buffer_, Die()).Times(1);
192 } 168 }
193 delete neteq_;
194 } 169 }
195 170
196 NetEqImpl* neteq_; 171 std::unique_ptr<NetEqImpl> neteq_;
197 NetEq::Config config_; 172 NetEq::Config config_;
198 TickTimer* tick_timer_; 173 TickTimer* tick_timer_ = nullptr;
199 MockBufferLevelFilter* mock_buffer_level_filter_; 174 MockBufferLevelFilter* mock_buffer_level_filter_ = nullptr;
200 BufferLevelFilter* buffer_level_filter_; 175 BufferLevelFilter* buffer_level_filter_ = nullptr;
201 bool use_mock_buffer_level_filter_; 176 bool use_mock_buffer_level_filter_ = true;
202 MockDecoderDatabase* mock_decoder_database_; 177 MockDecoderDatabase* mock_decoder_database_ = nullptr;
203 DecoderDatabase* decoder_database_; 178 DecoderDatabase* decoder_database_ = nullptr;
204 bool use_mock_decoder_database_; 179 bool use_mock_decoder_database_ = true;
205 MockDelayPeakDetector* mock_delay_peak_detector_; 180 MockDelayPeakDetector* mock_delay_peak_detector_ = nullptr;
206 DelayPeakDetector* delay_peak_detector_; 181 DelayPeakDetector* delay_peak_detector_ = nullptr;
207 bool use_mock_delay_peak_detector_; 182 bool use_mock_delay_peak_detector_ = true;
208 MockDelayManager* mock_delay_manager_; 183 MockDelayManager* mock_delay_manager_ = nullptr;
209 DelayManager* delay_manager_; 184 DelayManager* delay_manager_ = nullptr;
210 bool use_mock_delay_manager_; 185 bool use_mock_delay_manager_ = true;
211 MockDtmfBuffer* mock_dtmf_buffer_; 186 MockDtmfBuffer* mock_dtmf_buffer_ = nullptr;
212 DtmfBuffer* dtmf_buffer_; 187 DtmfBuffer* dtmf_buffer_ = nullptr;
213 bool use_mock_dtmf_buffer_; 188 bool use_mock_dtmf_buffer_ = true;
214 MockDtmfToneGenerator* mock_dtmf_tone_generator_; 189 MockDtmfToneGenerator* mock_dtmf_tone_generator_ = nullptr;
215 DtmfToneGenerator* dtmf_tone_generator_; 190 DtmfToneGenerator* dtmf_tone_generator_ = nullptr;
216 bool use_mock_dtmf_tone_generator_; 191 bool use_mock_dtmf_tone_generator_ = true;
217 MockPacketBuffer* mock_packet_buffer_; 192 MockPacketBuffer* mock_packet_buffer_ = nullptr;
218 PacketBuffer* packet_buffer_; 193 PacketBuffer* packet_buffer_ = nullptr;
219 bool use_mock_packet_buffer_; 194 bool use_mock_packet_buffer_ = true;
220 MockPayloadSplitter* mock_payload_splitter_; 195 MockPayloadSplitter* mock_payload_splitter_ = nullptr;
221 PayloadSplitter* payload_splitter_; 196 PayloadSplitter* payload_splitter_ = nullptr;
222 bool use_mock_payload_splitter_; 197 bool use_mock_payload_splitter_ = true;
223 TimestampScaler* timestamp_scaler_;
224 }; 198 };
225 199
226 200
227 // This tests the interface class NetEq. 201 // This tests the interface class NetEq.
228 // TODO(hlundin): Move to separate file? 202 // TODO(hlundin): Move to separate file?
229 TEST(NetEq, CreateAndDestroy) { 203 TEST(NetEq, CreateAndDestroy) {
230 NetEq::Config config; 204 NetEq::Config config;
231 NetEq* neteq = NetEq::Create(config); 205 NetEq* neteq = NetEq::Create(config);
232 delete neteq; 206 delete neteq;
233 } 207 }
(...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after
1197 UseNoMocks(); 1171 UseNoMocks();
1198 CreateInstance(); 1172 CreateInstance();
1199 ASSERT_TRUE(tick_timer_); 1173 ASSERT_TRUE(tick_timer_);
1200 EXPECT_EQ(0u, tick_timer_->ticks()); 1174 EXPECT_EQ(0u, tick_timer_->ticks());
1201 AudioFrame output; 1175 AudioFrame output;
1202 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output)); 1176 EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output));
1203 EXPECT_EQ(1u, tick_timer_->ticks()); 1177 EXPECT_EQ(1u, tick_timer_->ticks());
1204 } 1178 }
1205 1179
1206 }// namespace webrtc 1180 }// namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698