Index: webrtc/modules/audio_coding/main/acm2/codec_manager_unittest.cc |
diff --git a/webrtc/modules/audio_coding/main/acm2/codec_manager_unittest.cc b/webrtc/modules/audio_coding/main/acm2/codec_manager_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e930ca1ea5c25b6a079f9c6e49011e31ccc4d741 |
--- /dev/null |
+++ b/webrtc/modules/audio_coding/main/acm2/codec_manager_unittest.cc |
@@ -0,0 +1,66 @@ |
+/* |
+ * Copyright (c) 2015 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 "testing/gtest/include/gtest/gtest.h" |
+#include "webrtc/modules/audio_coding/codecs/mock/mock_audio_encoder.h" |
+#include "webrtc/modules/audio_coding/main/acm2/codec_manager.h" |
+ |
+namespace webrtc { |
+namespace acm2 { |
+ |
+using ::testing::Return; |
+ |
+namespace { |
+ |
+// Create a MockAudioEncoder with some reasonable default behavior. |
+rtc::scoped_ptr<MockAudioEncoder> CreateMockEncoder() { |
+ auto enc = rtc_make_scoped_ptr(new MockAudioEncoder); |
+ EXPECT_CALL(*enc, SampleRateHz()).WillRepeatedly(Return(8000)); |
+ EXPECT_CALL(*enc, NumChannels()).WillRepeatedly(Return(1)); |
+ EXPECT_CALL(*enc, Max10MsFramesInAPacket()).WillRepeatedly(Return(1)); |
+ EXPECT_CALL(*enc, Die()); |
+ return enc; |
+} |
+ |
+} // namespace |
+ |
+TEST(CodecManagerTest, ExternalEncoderFec) { |
+ auto enc0 = CreateMockEncoder(); |
+ auto enc1 = CreateMockEncoder(); |
+ { |
+ ::testing::InSequence s; |
+ EXPECT_CALL(*enc0, SetFec(false)).WillOnce(Return(true)); |
+ EXPECT_CALL(*enc0, Mark("A")); |
+ EXPECT_CALL(*enc0, SetFec(true)).WillOnce(Return(true)); |
+ EXPECT_CALL(*enc1, SetFec(true)).WillOnce(Return(true)); |
+ EXPECT_CALL(*enc1, SetFec(false)).WillOnce(Return(true)); |
+ EXPECT_CALL(*enc0, Mark("B")); |
+ EXPECT_CALL(*enc0, SetFec(false)).WillOnce(Return(true)); |
+ } |
+ |
+ CodecManager cm; |
+ EXPECT_FALSE(cm.codec_fec_enabled()); |
+ cm.RegisterEncoder(enc0.get()); |
+ EXPECT_FALSE(cm.codec_fec_enabled()); |
+ enc0->Mark("A"); |
+ EXPECT_EQ(0, cm.SetCodecFEC(true)); |
+ EXPECT_TRUE(cm.codec_fec_enabled()); |
+ cm.RegisterEncoder(enc1.get()); |
+ EXPECT_TRUE(cm.codec_fec_enabled()); |
+ |
+ EXPECT_EQ(0, cm.SetCodecFEC(false)); |
+ enc0->Mark("B"); |
+ EXPECT_FALSE(cm.codec_fec_enabled()); |
+ cm.RegisterEncoder(enc0.get()); |
+ EXPECT_FALSE(cm.codec_fec_enabled()); |
+} |
+ |
+} // namespace acm2 |
+} // namespace webrtc |