Index: webrtc/modules/audio_processing/aec3/block_processor_unittest.cc |
diff --git a/webrtc/modules/audio_processing/aec3/block_processor_unittest.cc b/webrtc/modules/audio_processing/aec3/block_processor_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6e22b41879322c29e7b15b3342f83da31d1efc59 |
--- /dev/null |
+++ b/webrtc/modules/audio_processing/aec3/block_processor_unittest.cc |
@@ -0,0 +1,143 @@ |
+/* |
+ * Copyright (c) 2016 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/modules/audio_processing/aec3/block_processor.h" |
+ |
+#include <memory> |
+#include <sstream> |
+#include <string> |
+#include <vector> |
+ |
+#include "webrtc/modules/audio_processing/aec3/aec3_constants.h" |
+#include "webrtc/test/gtest.h" |
+ |
+namespace webrtc { |
+namespace { |
+ |
+// Verifies that the basic BlockProcessor functionality works and that the API |
+// methods are callable. |
+void RunBasicSetupAndApiCallTest(int sample_rate_hz) { |
+ std::unique_ptr<BlockProcessor> block_processor( |
+ BlockProcessor::Create(sample_rate_hz)); |
+ std::vector<std::vector<float>> block(NumBandsForRate(sample_rate_hz), |
+ std::vector<float>(kBlockSize, 0.f)); |
+ |
+ EXPECT_FALSE(block_processor->BufferRender(&block)); |
+ block_processor->ProcessCapture(false, false, &block); |
+ block_processor->ReportEchoLeakage(false); |
+} |
+ |
+#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
+void RunRenderBlockSizeVerificationTest(int sample_rate_hz) { |
+ std::unique_ptr<BlockProcessor> block_processor( |
+ BlockProcessor::Create(sample_rate_hz)); |
+ std::vector<std::vector<float>> block( |
+ NumBandsForRate(sample_rate_hz), std::vector<float>(kBlockSize - 1, 0.f)); |
+ |
+ EXPECT_DEATH(block_processor->BufferRender(&block), ""); |
+} |
+ |
+void RunCaptureBlockSizeVerificationTest(int sample_rate_hz) { |
+ std::unique_ptr<BlockProcessor> block_processor( |
+ BlockProcessor::Create(sample_rate_hz)); |
+ std::vector<std::vector<float>> block( |
+ NumBandsForRate(sample_rate_hz), std::vector<float>(kBlockSize - 1, 0.f)); |
+ |
+ EXPECT_DEATH(block_processor->ProcessCapture(false, false, &block), ""); |
+} |
+ |
+void RunRenderNumBandsVerificationTest(int sample_rate_hz) { |
+ const size_t wrong_num_bands = NumBandsForRate(sample_rate_hz) < 3 |
+ ? NumBandsForRate(sample_rate_hz) + 1 |
+ : 1; |
+ std::unique_ptr<BlockProcessor> block_processor( |
+ BlockProcessor::Create(sample_rate_hz)); |
+ std::vector<std::vector<float>> block(wrong_num_bands, |
+ std::vector<float>(kBlockSize, 0.f)); |
+ |
+ EXPECT_DEATH(block_processor->BufferRender(&block), ""); |
+} |
+ |
+void RunCaptureNumBandsVerificationTest(int sample_rate_hz) { |
+ const size_t wrong_num_bands = NumBandsForRate(sample_rate_hz) < 3 |
+ ? NumBandsForRate(sample_rate_hz) + 1 |
+ : 1; |
+ std::unique_ptr<BlockProcessor> block_processor( |
+ BlockProcessor::Create(sample_rate_hz)); |
+ std::vector<std::vector<float>> block(wrong_num_bands, |
+ std::vector<float>(kBlockSize, 0.f)); |
+ |
+ EXPECT_DEATH(block_processor->ProcessCapture(false, false, &block), ""); |
+} |
+#endif |
+ |
+std::string ProduceDebugText(int sample_rate_hz) { |
+ std::ostringstream ss; |
+ ss << "Sample rate: " << sample_rate_hz; |
+ return ss.str(); |
+} |
+ |
+} // namespace |
+ |
+TEST(BlockProcessor, BasicSetupAndApiCalls) { |
+ for (auto rate : {8000, 16000, 32000, 48000}) { |
+ SCOPED_TRACE(ProduceDebugText(rate)); |
+ RunBasicSetupAndApiCallTest(rate); |
+ } |
+} |
+ |
+#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
+// TODO(peah): Enable all DEATH tests below, or add suppressions, once clarity |
+// has been reached on why they fail on the trybots. |
+TEST(BlockProcessor, DISABLED_VerifyRenderBlockSizeCheck) { |
+ for (auto rate : {8000, 16000, 32000, 48000}) { |
+ SCOPED_TRACE(ProduceDebugText(rate)); |
+ RunRenderBlockSizeVerificationTest(rate); |
+ } |
+} |
+ |
+TEST(BlockProcessor, DISABLED_VerifyCaptureBlockSizeCheck) { |
+ for (auto rate : {8000, 16000, 32000, 48000}) { |
+ SCOPED_TRACE(ProduceDebugText(rate)); |
+ RunCaptureBlockSizeVerificationTest(rate); |
+ } |
+} |
+ |
+TEST(BlockProcessor, DISABLED_VerifyRenderNumBandsCheck) { |
+ for (auto rate : {8000, 16000, 32000, 48000}) { |
+ SCOPED_TRACE(ProduceDebugText(rate)); |
+ RunRenderNumBandsVerificationTest(rate); |
+ } |
+} |
+ |
+TEST(BlockProcessor, DISABLED_VerifyCaptureNumBandsCheck) { |
+ for (auto rate : {8000, 16000, 32000, 48000}) { |
+ SCOPED_TRACE(ProduceDebugText(rate)); |
+ RunCaptureNumBandsVerificationTest(rate); |
+ } |
+} |
+ |
+// Verifiers that the verification for null ProcessCapture input works. |
+TEST(BlockProcessor, DISABLED_NullProcessCaptureParameter) { |
+ EXPECT_DEATH(std::unique_ptr<BlockProcessor>(BlockProcessor::Create(8000)) |
+ ->ProcessCapture(false, false, nullptr), |
+ ""); |
+} |
+ |
+// Verifiers that the verification for null BufferRender input works. |
+TEST(BlockProcessor, DISABLED_NullBufferRenderParameter) { |
+ EXPECT_DEATH(std::unique_ptr<BlockProcessor>(BlockProcessor::Create(8000)) |
+ ->BufferRender(nullptr), |
+ ""); |
+} |
+ |
+#endif |
+ |
+} // namespace webrtc |