| 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 |