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

Unified Diff: extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc

Issue 515573003: app_shell: Do simple audio initialization. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wrap line Created 6 years, 4 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
Index: extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc
diff --git a/extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc b/extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..034dacc501d93d27a4f776134651b4a04d154700
--- /dev/null
+++ b/extensions/shell/browser/shell_audio_controller_chromeos_unittest.cc
@@ -0,0 +1,134 @@
+// Copyright 2014 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 "extensions/shell/browser/shell_audio_controller_chromeos.h"
+
+#include "base/macros.h"
+#include "chromeos/audio/audio_device.h"
+#include "chromeos/audio/cras_audio_handler.h"
+#include "chromeos/dbus/audio_node.h"
+#include "chromeos/dbus/cras_audio_client_stub_impl.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using chromeos::AudioDevice;
+using chromeos::AudioNode;
+using chromeos::AudioNodeList;
+
+namespace extensions {
+
+class ShellAudioControllerTest : public testing::Test {
+ public:
+ ShellAudioControllerTest() : next_node_id_(1) {
+ // This also initializes DBusThreadManager.
+ scoped_ptr<chromeos::DBusThreadManagerSetter> dbus_setter =
+ chromeos::DBusThreadManager::GetSetterForTesting();
+
+ audio_client_ = new chromeos::CrasAudioClientStubImpl();
+ audio_client_->SetAudioNodesForTesting(AudioNodeList());
+ dbus_setter->SetCrasAudioClient(
+ make_scoped_ptr(audio_client_).PassAs<chromeos::CrasAudioClient>());
+
+ chromeos::CrasAudioHandler::Initialize(
+ new ShellAudioController::PrefHandler());
+ audio_handler_ = chromeos::CrasAudioHandler::Get();
+
+ controller_.reset(new ShellAudioController());
+ }
+
+ virtual ~ShellAudioControllerTest() {
+ controller_.reset();
+ chromeos::CrasAudioHandler::Shutdown();
+ chromeos::DBusThreadManager::Shutdown();
+ }
+
+ protected:
+ // Fills a AudioNode for use by tests.
+ AudioNode CreateNode(chromeos::AudioDeviceType type) {
+ AudioNode node;
+ node.is_input =
+ type == chromeos::AUDIO_TYPE_MIC ||
+ type == chromeos::AUDIO_TYPE_INTERNAL_MIC ||
+ type == chromeos::AUDIO_TYPE_KEYBOARD_MIC;
+ node.id = next_node_id_++;
+ node.type = AudioDevice::GetTypeString(type);
+ return node;
+ }
+
+ // Changes the active state of the node with |id| in |nodes|.
+ void SetNodeActive(AudioNodeList* nodes, uint64 id, bool active) {
+ for (AudioNodeList::iterator it = nodes->begin();
+ it != nodes->end(); ++it) {
+ if (it->id == id) {
+ it->active = active;
+ return;
+ }
+ }
+ ASSERT_TRUE(false) << "Didn't find ID " << id;
+ }
+
+ chromeos::CrasAudioClientStubImpl* audio_client_; // Not owned.
+ chromeos::CrasAudioHandler* audio_handler_; // Not owned.
+ scoped_ptr<ShellAudioController> controller_;
+
+ // Next audio node ID to be returned by CreateNode().
+ uint64 next_node_id_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ShellAudioControllerTest);
+};
+
+// Tests that higher-priority devices are activated as soon as they're
+// connected.
+TEST_F(ShellAudioControllerTest, SelectBestDevices) {
+ AudioNode internal_speaker =
+ CreateNode(chromeos::AUDIO_TYPE_INTERNAL_SPEAKER);
+ AudioNode internal_mic = CreateNode(chromeos::AUDIO_TYPE_INTERNAL_MIC);
+ AudioNode headphone = CreateNode(chromeos::AUDIO_TYPE_HEADPHONE);
+ AudioNode external_mic = CreateNode(chromeos::AUDIO_TYPE_MIC);
+
+ // AudioDevice gives the headphone jack a higher priority than the internal
+ // speaker and an external mic a higher priority than the internal mic, so we
+ // should start out favoring headphones and the external mic.
+ AudioNodeList all_nodes;
+ all_nodes.push_back(internal_speaker);
+ all_nodes.push_back(internal_mic);
+ all_nodes.push_back(headphone);
+ all_nodes.push_back(external_mic);
+ audio_client_->SetAudioNodesAndNotifyObserversForTesting(all_nodes);
+ EXPECT_EQ(headphone.id, audio_handler_->GetActiveOutputNode());
+ EXPECT_EQ(external_mic.id, audio_handler_->GetActiveInputNode());
+
+ // Unplug the headphones and mic and check that we switch to the internal
+ // devices.
+ AudioNodeList internal_nodes;
+ internal_nodes.push_back(internal_speaker);
+ internal_nodes.push_back(internal_mic);
+ audio_client_->SetAudioNodesAndNotifyObserversForTesting(internal_nodes);
+ EXPECT_EQ(internal_speaker.id, audio_handler_->GetActiveOutputNode());
+ EXPECT_EQ(internal_mic.id, audio_handler_->GetActiveInputNode());
+
+ // Switch back to the external devices. Mark the previously-activated internal
+ // devices as being active so CrasAudioHandler doesn't complain.
+ SetNodeActive(&all_nodes, internal_speaker.id, true);
+ SetNodeActive(&all_nodes, internal_mic.id, true);
+ audio_client_->SetAudioNodesAndNotifyObserversForTesting(all_nodes);
+ EXPECT_EQ(headphone.id, audio_handler_->GetActiveOutputNode());
+ EXPECT_EQ(external_mic.id, audio_handler_->GetActiveInputNode());
+}
+
+// Tests that active audio devices are unmuted and set to 100% volume.
+TEST_F(ShellAudioControllerTest, MaxVolume) {
+ AudioNodeList nodes;
+ nodes.push_back(CreateNode(chromeos::AUDIO_TYPE_INTERNAL_SPEAKER));
+ nodes.push_back(CreateNode(chromeos::AUDIO_TYPE_INTERNAL_MIC));
+ audio_client_->SetAudioNodesAndNotifyObserversForTesting(nodes);
+
+ EXPECT_FALSE(audio_handler_->IsOutputMuted());
+ EXPECT_FALSE(audio_handler_->IsInputMuted());
+ EXPECT_EQ(100, audio_handler_->GetOutputVolumePercent());
+ EXPECT_EQ(100, audio_handler_->GetInputGainPercent());
+}
+
+} // namespace extensions
« no previous file with comments | « extensions/shell/browser/shell_audio_controller_chromeos.cc ('k') | extensions/shell/browser/shell_browser_main_parts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698