test_audio_input_controller_factory.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MEDIA_AUDIO_TEST_AUDIO_INPUT_CONTROLLER_FACTORY_H_
6#define MEDIA_AUDIO_TEST_AUDIO_INPUT_CONTROLLER_FACTORY_H_
7
8#include "base/bind.h"
9#include "media/audio/audio_input_controller.h"
10
11namespace media {
12
13class UserInputMonitor;
14class TestAudioInputControllerFactory;
15
16// TestAudioInputController and TestAudioInputControllerFactory are used for
17// testing consumers of AudioInputController. TestAudioInputControllerFactory
18// is a AudioInputController::Factory that creates TestAudioInputControllers.
19//
20// TestAudioInputController::Record and Close are overriden to do nothing. It is
21// expected that you'll grab the EventHandler from the TestAudioInputController
22// and invoke the callback methods when appropriate. In this way it's easy to
23// mock a AudioInputController.
24//
25// Typical usage:
26//   // Create and register factory.
27//   TestAudioInputControllerFactory factory;
28//   AudioInputController::set_factory_for_testing(&factory);
29//
30//   // Do something that triggers creation of an AudioInputController.
31//   TestAudioInputController* controller = factory.last_controller();
32//   DCHECK(controller);
33//
34//   // Notify event handler with whatever data you want.
35//   controller->event_handler()->OnCreated(...);
36//
37//   // Do something that triggers AudioInputController::Record to be called.
38//   controller->event_handler()->OnData(...);
39//   controller->event_handler()->OnError(...);
40//
41//   // Make sure consumer of AudioInputController does the right thing.
42//   ...
43//   // Reset factory.
44//   AudioInputController::set_factory_for_testing(NULL);
45
46class TestAudioInputController : public AudioInputController {
47 public:
48  class Delegate {
49   public:
50    virtual void TestAudioControllerOpened(
51        TestAudioInputController* controller) = 0;
52    virtual void TestAudioControllerClosed(
53        TestAudioInputController* controller) = 0;
54  };
55
56  TestAudioInputController(TestAudioInputControllerFactory* factory,
57                           AudioManager* audio_manager,
58                           const AudioParameters& audio_parameters,
59                           EventHandler* event_handler,
60                           SyncWriter* sync_writer,
61                           UserInputMonitor* user_input_monitor);
62
63  // Returns the event handler installed on the AudioInputController.
64  EventHandler* event_handler() const { return event_handler_; }
65
66  // Notifies the TestAudioControllerOpened() event to the delegate (if any).
67  virtual void Record() OVERRIDE;
68
69  // Ensure that the closure is run on the audio-manager thread.
70  virtual void Close(const base::Closure& closed_task) OVERRIDE;
71
72  const AudioParameters& audio_parameters() const {
73    return audio_parameters_;
74  }
75
76 protected:
77  virtual ~TestAudioInputController();
78
79 private:
80  AudioParameters audio_parameters_;
81
82  // These are not owned by us and expected to be valid for this object's
83  // lifetime.
84  TestAudioInputControllerFactory* factory_;
85  EventHandler* event_handler_;
86
87  DISALLOW_COPY_AND_ASSIGN(TestAudioInputController);
88};
89
90typedef TestAudioInputController::Delegate TestAudioInputControllerDelegate;
91
92// Simple AudioInputController::Factory method that creates
93// TestAudioInputControllers.
94class TestAudioInputControllerFactory : public AudioInputController::Factory {
95 public:
96  TestAudioInputControllerFactory();
97  virtual ~TestAudioInputControllerFactory();
98
99  // AudioInputController::Factory methods.
100  virtual AudioInputController* Create(
101      AudioManager* audio_manager,
102      AudioInputController::EventHandler* event_handler,
103      AudioParameters params,
104      UserInputMonitor* user_input_monitor) OVERRIDE;
105
106  void set_delegate(TestAudioInputControllerDelegate* delegate) {
107    delegate_ = delegate;
108  }
109
110  TestAudioInputController* controller() const { return controller_; }
111
112 private:
113  friend class TestAudioInputController;
114
115  // Invoked by a TestAudioInputController when it gets destroyed.
116  void OnTestAudioInputControllerDestroyed(
117      TestAudioInputController* controller);
118
119  // The caller of Create owns this object.
120  TestAudioInputController* controller_;
121
122  // The delegate for tests for receiving audio controller events.
123  TestAudioInputControllerDelegate* delegate_;
124
125  DISALLOW_COPY_AND_ASSIGN(TestAudioInputControllerFactory);
126};
127
128}  // namespace media
129
130#endif  // MEDIA_AUDIO_TEST_AUDIO_INPUT_CONTROLLER_FACTORY_H_
131