Index: webrtc/test/fake_audio_device_unittest.cc |
diff --git a/webrtc/test/fake_audio_device_unittest.cc b/webrtc/test/fake_audio_device_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d4f8acc8ac9d1087642c270001350dfa7366ec2d |
--- /dev/null |
+++ b/webrtc/test/fake_audio_device_unittest.cc |
@@ -0,0 +1,131 @@ |
+/* |
+ * Copyright (c) 2017 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 <algorithm> |
+#include <array> |
+ |
+#include "webrtc/common_audio/wav_file.h" |
+#include "webrtc/common_audio/wav_header.h" |
+#include "webrtc/test/fake_audio_device.h" |
+#include "webrtc/test/gtest.h" |
+#include "webrtc/test/testsupport/fileutils.h" |
+ |
+namespace webrtc { |
+namespace test { |
+ |
+namespace { |
+void RunTest(const std::vector<int16_t>& input_samples, |
+ const std::vector<int16_t>& expected_samples, |
+ size_t samples_per_frame) { |
+ const ::testing::TestInfo* const test_info = |
+ ::testing::UnitTest::GetInstance()->current_test_info(); |
+ |
+ const std::string output_filename = test::OutputPath() + |
+ "BoundedWavFileWriterTest_" + test_info->name() + ".wav"; |
+ |
+ static const size_t kSamplesPerFrame = 8; |
+ static const int kSampleRate = kSamplesPerFrame * 100; |
+ EXPECT_EQ(FakeAudioDevice::SamplesPerFrame(kSampleRate), kSamplesPerFrame); |
+ |
+ { |
+ std::unique_ptr<FakeAudioDevice::Renderer> writer = |
+ FakeAudioDevice::CreateBoundedWavFileWriter(output_filename, 800); |
+ |
+ for (size_t i = 0; i < input_samples.size(); i += kSamplesPerFrame) { |
+ EXPECT_TRUE(writer->Render(rtc::ArrayView<const int16_t>( |
+ &input_samples[i], |
+ std::min(kSamplesPerFrame, input_samples.size() - i)))); |
+ } |
+ } |
+ |
+ { |
+ WavReader reader(output_filename); |
+ std::vector<int16_t> read_samples(expected_samples.size()); |
+ EXPECT_EQ(expected_samples.size(), |
+ reader.ReadSamples(read_samples.size(), read_samples.data())); |
+ EXPECT_EQ(expected_samples, read_samples); |
+ |
+ EXPECT_EQ(0u, reader.ReadSamples(read_samples.size(), read_samples.data())); |
+ } |
+ |
+ remove(output_filename.c_str()); |
+} |
+} // namespace |
+ |
+TEST(BoundedWavFileWriterTest, NoSilence) { |
+ static const std::vector<int16_t> kInputSamples = { |
+ 75, 1234, 243, -1231, -22222, 0, 3, 88, |
+ 1222, -1213, -13222, -7, -3525, 5787, -25247, 8 |
+ }; |
+ static const std::vector<int16_t> kExpectedSamples = kInputSamples; |
+ RunTest(kInputSamples, kExpectedSamples, 8); |
+} |
+ |
+TEST(BoundedWavFileWriterTest, SomeStartSilence) { |
+ static const std::vector<int16_t> kInputSamples = { |
+ 0, 0, 0, 0, 3, 0, 0, 0, |
+ 0, 3, -13222, -7, -3525, 5787, -25247, 8 |
+ }; |
+ static const std::vector<int16_t> kExpectedSamples(kInputSamples.begin() + 10, |
+ kInputSamples.end()); |
+ RunTest(kInputSamples, kExpectedSamples, 8); |
+} |
+ |
+TEST(BoundedWavFileWriterTest, NegativeStartSilence) { |
+ static const std::vector<int16_t> kInputSamples = { |
+ 0, -4, -6, 0, 3, 0, 0, 0, |
+ 0, 3, -13222, -7, -3525, 5787, -25247, 8 |
+ }; |
+ static const std::vector<int16_t> kExpectedSamples(kInputSamples.begin() + 2, |
+ kInputSamples.end()); |
+ RunTest(kInputSamples, kExpectedSamples, 8); |
+} |
+ |
+TEST(BoundedWavFileWriterTest, SomeEndSilence) { |
+ static const std::vector<int16_t> kInputSamples = { |
+ 75, 1234, 243, -1231, -22222, 0, 1, 0, |
+ 0, 0, 0, 0, 0, 0, 0, 0 |
+ }; |
+ static const std::vector<int16_t> kExpectedSamples(kInputSamples.begin(), |
+ kInputSamples.end() - 9); |
+ RunTest(kInputSamples, kExpectedSamples, 8); |
+} |
+ |
+TEST(BoundedWavFileWriterTest, DoubleEndSilence) { |
+ static const std::vector<int16_t> kInputSamples = { |
+ 75, 1234, 243, -1231, -22222, 0, 0, 0, |
+ 0, -1213, -13222, -7, -3525, 5787, 0, 0 |
+ }; |
+ static const std::vector<int16_t> kExpectedSamples(kInputSamples.begin(), |
+ kInputSamples.end() - 2); |
+ RunTest(kInputSamples, kExpectedSamples, 8); |
+} |
+ |
+TEST(BoundedWavFileWriterTest, DoubleSilence) { |
+ static const std::vector<int16_t> kInputSamples = { |
+ 0, -1213, -13222, -7, -3525, 5787, 0, 0 |
+ }; |
+ static const std::vector<int16_t> kExpectedSamples(kInputSamples.begin() + 1, |
+ kInputSamples.end() - 2); |
+ RunTest(kInputSamples, kExpectedSamples, 8); |
+} |
+ |
+TEST(BoundedWavFileWriterTest, EndSilenceCutoff) { |
+ static const std::vector<int16_t> kInputSamples = { |
+ 75, 1234, 243, -1231, -22222, 0, 1, 0, |
+ 0, 0, 0 |
+ }; |
+ static const std::vector<int16_t> kExpectedSamples(kInputSamples.begin(), |
+ kInputSamples.end() - 4); |
+ RunTest(kInputSamples, kExpectedSamples, 8); |
+} |
+ |
+} // namespace test |
+} // namespace webrtc |