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

Unified Diff: media/audio/audio_input_device_unittest.cc

Issue 2611063003: Fix issue with audio input streams where an error would not be reported (Closed)
Patch Set: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/audio_input_device.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_input_device_unittest.cc
diff --git a/media/audio/audio_input_device_unittest.cc b/media/audio/audio_input_device_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..046d2eb888c533385ea1903e322838be96d43b48
--- /dev/null
+++ b/media/audio/audio_input_device_unittest.cc
@@ -0,0 +1,91 @@
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/memory/ptr_util.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "base/single_thread_task_runner.h"
+#include "media/audio/audio_input_device.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gmock_mutant.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::_;
+using testing::DoAll;
+
+namespace media {
+
+namespace {
+
+class MockAudioInputIPC : public AudioInputIPC {
+ public:
+ MockAudioInputIPC() {}
+ ~MockAudioInputIPC() override {}
+
+ MOCK_METHOD5(CreateStream,
+ void(AudioInputIPCDelegate* delegate,
+ int session_id,
+ const AudioParameters& params,
+ bool automatic_gain_control,
+ uint32_t total_segments));
+ MOCK_METHOD0(RecordStream, void());
+ MOCK_METHOD1(SetVolume, void(double volume));
+ MOCK_METHOD0(CloseStream, void());
+};
+
+class MockCaptureCallback : public AudioCapturerSource::CaptureCallback {
+ public:
+ MockCaptureCallback() {}
+ ~MockCaptureCallback() override {}
+
+ MOCK_METHOD4(Capture,
+ void(const AudioBus* audio_source,
+ int audio_delay_milliseconds,
+ double volume,
+ bool key_pressed));
+
+ MOCK_METHOD1(OnCaptureError, void(const std::string& message));
+};
+
+// Used to terminate a loop from a different thread than the loop belongs to.
+// |task_runner| should be a SingleThreadTaskRunner.
+ACTION_P(QuitLoop, task_runner) {
+ task_runner->PostTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
+}
+
+} // namespace.
+
+// Regular construction.
+TEST(AudioInputDeviceTest, Noop) {
+ base::MessageLoopForIO io_loop;
+ MockAudioInputIPC* input_ipc = new MockAudioInputIPC();
+ scoped_refptr<AudioInputDevice> device(
+ new AudioInputDevice(base::WrapUnique(input_ipc), io_loop.task_runner()));
+}
+
+ACTION_P2(ReportStateChange, device, state) {
+ static_cast<AudioInputIPCDelegate*>(device)->OnStateChanged(state);
+}
+
+// Verify that we get an OnCaptureError() callback if CreateStream fails.
+TEST(AudioInputDeviceTest, FailToCreateStream) {
+ AudioParameters params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+ CHANNEL_LAYOUT_STEREO, 48000, 16, 480);
+
+ base::MessageLoopForIO io_loop;
+ MockCaptureCallback callback;
+ MockAudioInputIPC* input_ipc = new MockAudioInputIPC();
+ scoped_refptr<AudioInputDevice> device(
+ new AudioInputDevice(base::WrapUnique(input_ipc), io_loop.task_runner()));
+ device->Initialize(params, &callback, 1);
+ device->Start();
+ EXPECT_CALL(*input_ipc, CreateStream(_, _, _, _, _))
+ .WillOnce(ReportStateChange(device.get(),
+ AUDIO_INPUT_IPC_DELEGATE_STATE_ERROR));
+ EXPECT_CALL(callback, OnCaptureError(_))
+ .WillOnce(QuitLoop(io_loop.task_runner()));
+ base::RunLoop().Run();
+}
+
+} // namespace media.
« no previous file with comments | « media/audio/audio_input_device.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698