OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h" | 5 #include "chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 | 8 |
9 // Define dummy structs here to avoid linking in the ALSA lib. | 9 // Define dummy structs here to avoid linking in the ALSA lib. |
10 struct _snd_pcm_hw_params {}; | 10 struct _snd_pcm_hw_params {}; |
| 11 struct _snd_pcm_status {}; |
11 struct _snd_pcm {}; | 12 struct _snd_pcm {}; |
12 | 13 |
13 namespace chromecast { | 14 namespace chromecast { |
14 namespace media { | 15 namespace media { |
15 | 16 |
16 const size_t kBytesPerSample = sizeof(int32_t); | 17 const size_t kBytesPerSample = sizeof(int32_t); |
17 const int kNumChannels = 2; | 18 const int kNumChannels = 2; |
18 | 19 |
19 // This class keeps basic state to ensure that ALSA is being used correctly. | 20 // This class keeps basic state to ensure that ALSA is being used correctly. |
20 // Calls from MockAlsaWrapper are delegated to an instance of this class in | 21 // Calls from MockAlsaWrapper are delegated to an instance of this class in |
21 // cases where internal ALSA state change occurs, or where a valid value needs | 22 // cases where internal ALSA state change occurs, or where a valid value needs |
22 // to be returned to the caller. | 23 // to be returned to the caller. |
23 class MockAlsaWrapper::FakeAlsaWrapper : public AlsaWrapper { | 24 class MockAlsaWrapper::FakeAlsaWrapper : public AlsaWrapper { |
24 public: | 25 public: |
25 FakeAlsaWrapper() | 26 FakeAlsaWrapper() |
26 : state_(SND_PCM_STATE_RUNNING), | 27 : state_(SND_PCM_STATE_RUNNING), |
27 fake_handle_(nullptr), | 28 fake_handle_(nullptr), |
28 fake_pcm_hw_params_(nullptr) {} | 29 fake_pcm_hw_params_(nullptr), |
| 30 fake_pcm_status_(nullptr) {} |
29 | 31 |
30 ~FakeAlsaWrapper() override { | 32 ~FakeAlsaWrapper() override { |
31 delete fake_handle_; | 33 delete fake_handle_; |
32 delete fake_pcm_hw_params_; | 34 delete fake_pcm_hw_params_; |
| 35 delete fake_pcm_status_; |
33 } | 36 } |
34 | 37 |
35 // AlsaWrapper implementation: | 38 // AlsaWrapper implementation: |
36 int PcmPause(snd_pcm_t* handle, int pause) override { | 39 int PcmPause(snd_pcm_t* handle, int pause) override { |
37 CHECK_NE(pause, (state_ == SND_PCM_STATE_PAUSED)); | 40 CHECK_NE(pause, (state_ == SND_PCM_STATE_PAUSED)); |
38 if (pause) | 41 if (pause) |
39 state_ = SND_PCM_STATE_PAUSED; | 42 state_ = SND_PCM_STATE_PAUSED; |
40 else | 43 else |
41 state_ = SND_PCM_STATE_RUNNING; | 44 state_ = SND_PCM_STATE_RUNNING; |
42 return 0; | 45 return 0; |
(...skipping 22 matching lines...) Expand all Loading... |
65 return size; | 68 return size; |
66 } | 69 } |
67 | 70 |
68 int PcmHwParamsMalloc(snd_pcm_hw_params_t** ptr) override { | 71 int PcmHwParamsMalloc(snd_pcm_hw_params_t** ptr) override { |
69 fake_pcm_hw_params_ = new snd_pcm_hw_params_t(); | 72 fake_pcm_hw_params_ = new snd_pcm_hw_params_t(); |
70 CHECK(fake_pcm_hw_params_); | 73 CHECK(fake_pcm_hw_params_); |
71 *ptr = fake_pcm_hw_params_; | 74 *ptr = fake_pcm_hw_params_; |
72 return 0; | 75 return 0; |
73 } | 76 } |
74 | 77 |
| 78 int PcmStatusMalloc(snd_pcm_status_t** ptr) override { |
| 79 fake_pcm_status_ = new snd_pcm_status_t(); |
| 80 CHECK(fake_pcm_status_); |
| 81 *ptr = fake_pcm_status_; |
| 82 return 0; |
| 83 } |
| 84 |
| 85 snd_pcm_state_t PcmStatusGetState(const snd_pcm_status_t* obj) override { |
| 86 return state_; |
| 87 } |
| 88 |
75 ssize_t PcmFormatSize(snd_pcm_format_t format, size_t samples) override { | 89 ssize_t PcmFormatSize(snd_pcm_format_t format, size_t samples) override { |
76 return kBytesPerSample * samples; | 90 return kBytesPerSample * samples; |
77 }; | 91 }; |
78 | 92 |
79 snd_pcm_state_t state() { return state_; } | 93 snd_pcm_state_t state() { return state_; } |
80 std::vector<uint8_t>& data() { return data_; } | 94 std::vector<uint8_t>& data() { return data_; } |
81 | 95 |
82 private: | 96 private: |
83 snd_pcm_state_t state_; | 97 snd_pcm_state_t state_; |
84 snd_pcm_t* fake_handle_; | 98 snd_pcm_t* fake_handle_; |
85 snd_pcm_hw_params_t* fake_pcm_hw_params_; | 99 snd_pcm_hw_params_t* fake_pcm_hw_params_; |
| 100 snd_pcm_status_t* fake_pcm_status_; |
86 std::vector<uint8_t> data_; | 101 std::vector<uint8_t> data_; |
87 | 102 |
88 DISALLOW_COPY_AND_ASSIGN(FakeAlsaWrapper); | 103 DISALLOW_COPY_AND_ASSIGN(FakeAlsaWrapper); |
89 }; | 104 }; |
90 | 105 |
91 using ::testing::_; | 106 using ::testing::_; |
92 using ::testing::Invoke; | 107 using ::testing::Invoke; |
93 | 108 |
94 MockAlsaWrapper::MockAlsaWrapper() : fake_(new FakeAlsaWrapper()) { | 109 MockAlsaWrapper::MockAlsaWrapper() : fake_(new FakeAlsaWrapper()) { |
95 // Delgate calls that need to be faked. | 110 // Delgate calls that need to be faked. |
96 ON_CALL(*this, PcmOpen(_, _, _, _)) | 111 ON_CALL(*this, PcmOpen(_, _, _, _)) |
97 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmOpen)); | 112 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmOpen)); |
98 ON_CALL(*this, PcmWritei(_, _, _)) | 113 ON_CALL(*this, PcmWritei(_, _, _)) |
99 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmWritei)); | 114 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmWritei)); |
100 ON_CALL(*this, PcmState(_)) | 115 ON_CALL(*this, PcmState(_)) |
101 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmState)); | 116 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmState)); |
102 ON_CALL(*this, PcmFormatSize(_, _)).WillByDefault( | 117 ON_CALL(*this, PcmFormatSize(_, _)).WillByDefault( |
103 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmFormatSize)); | 118 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmFormatSize)); |
104 ON_CALL(*this, PcmPause(_, _)) | 119 ON_CALL(*this, PcmPause(_, _)) |
105 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmPause)); | 120 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmPause)); |
106 ON_CALL(*this, PcmHwParamsCanPause(_)).WillByDefault(testing::Return(true)); | 121 ON_CALL(*this, PcmHwParamsCanPause(_)).WillByDefault(testing::Return(true)); |
107 ON_CALL(*this, PcmHwParamsMalloc(_)).WillByDefault( | 122 ON_CALL(*this, PcmHwParamsMalloc(_)).WillByDefault( |
108 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmHwParamsMalloc)); | 123 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmHwParamsMalloc)); |
| 124 ON_CALL(*this, PcmStatusMalloc(_)) |
| 125 .WillByDefault( |
| 126 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmStatusMalloc)); |
| 127 ON_CALL(*this, PcmStatusGetState(_)) |
| 128 .WillByDefault( |
| 129 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmStatusGetState)); |
109 } | 130 } |
110 | 131 |
111 MockAlsaWrapper::~MockAlsaWrapper() { | 132 MockAlsaWrapper::~MockAlsaWrapper() { |
112 } | 133 } |
113 | 134 |
114 snd_pcm_state_t MockAlsaWrapper::state() { | 135 snd_pcm_state_t MockAlsaWrapper::state() { |
115 return fake_->state(); | 136 return fake_->state(); |
116 } | 137 } |
117 | 138 |
118 const std::vector<uint8_t>& MockAlsaWrapper::data() { | 139 const std::vector<uint8_t>& MockAlsaWrapper::data() { |
119 return fake_->data(); | 140 return fake_->data(); |
120 } | 141 } |
121 | 142 |
122 } // namespace media | 143 } // namespace media |
123 } // namespace chromecast | 144 } // namespace chromecast |
OLD | NEW |