| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 <string> |
| 6 |
| 5 #include "media/audio/linux/audio_manager_linux.h" | 7 #include "media/audio/linux/audio_manager_linux.h" |
| 6 #include "media/audio/linux/cras_output.h" | 8 #include "media/audio/linux/cras_output.h" |
| 7 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 11 |
| 10 using testing::_; | 12 using testing::_; |
| 11 using testing::DoAll; | 13 using testing::DoAll; |
| 12 using testing::Return; | 14 using testing::Return; |
| 13 using testing::SetArgumentPointee; | 15 using testing::SetArgumentPointee; |
| 14 using testing::StrictMock; | 16 using testing::StrictMock; |
| 15 | 17 |
| 16 namespace media { | 18 namespace media { |
| 17 | 19 |
| 18 class MockAudioSourceCallback : public AudioOutputStream::AudioSourceCallback { | 20 class MockAudioSourceCallback : public AudioOutputStream::AudioSourceCallback { |
| 19 public: | 21 public: |
| 20 MOCK_METHOD4(OnMoreData, uint32(AudioOutputStream* stream, | 22 MOCK_METHOD3(OnMoreData, uint32(uint8* dest, uint32 max_size, |
| 21 uint8* dest, uint32 max_size, | |
| 22 AudioBuffersState buffers_state)); | 23 AudioBuffersState buffers_state)); |
| 23 MOCK_METHOD2(OnError, void(AudioOutputStream* stream, int code)); | 24 MOCK_METHOD2(OnError, void(AudioOutputStream* stream, int code)); |
| 24 }; | 25 }; |
| 25 | 26 |
| 26 class MockAudioManagerLinux : public AudioManagerLinux { | 27 class MockAudioManagerLinux : public AudioManagerLinux { |
| 27 public: | 28 public: |
| 28 MOCK_METHOD0(Init, void()); | 29 MOCK_METHOD0(Init, void()); |
| 29 MOCK_METHOD0(HasAudioOutputDevices, bool()); | 30 MOCK_METHOD0(HasAudioOutputDevices, bool()); |
| 30 MOCK_METHOD0(HasAudioInputDevices, bool()); | 31 MOCK_METHOD0(HasAudioInputDevices, bool()); |
| 31 MOCK_METHOD0(MuteAll, void()); | 32 MOCK_METHOD0(MuteAll, void()); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 CrasOutputStreamTest::kTestBytesPerFrame; | 114 CrasOutputStreamTest::kTestBytesPerFrame; |
| 114 struct cras_audio_format* const CrasOutputStreamTest::kFakeAudioFormat = | 115 struct cras_audio_format* const CrasOutputStreamTest::kFakeAudioFormat = |
| 115 reinterpret_cast<struct cras_audio_format*>(1); | 116 reinterpret_cast<struct cras_audio_format*>(1); |
| 116 struct cras_stream_params* const CrasOutputStreamTest::kFakeStreamParams = | 117 struct cras_stream_params* const CrasOutputStreamTest::kFakeStreamParams = |
| 117 reinterpret_cast<struct cras_stream_params*>(1); | 118 reinterpret_cast<struct cras_stream_params*>(1); |
| 118 struct cras_client* const CrasOutputStreamTest::kFakeClient = | 119 struct cras_client* const CrasOutputStreamTest::kFakeClient = |
| 119 reinterpret_cast<struct cras_client*>(1); | 120 reinterpret_cast<struct cras_client*>(1); |
| 120 | 121 |
| 121 TEST_F(CrasOutputStreamTest, ConstructedState) { | 122 TEST_F(CrasOutputStreamTest, ConstructedState) { |
| 122 // Should support mono. | 123 // Should support mono. |
| 123 CrasOutputStream *test_stream = CreateStream(CHANNEL_LAYOUT_MONO); | 124 CrasOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_MONO); |
| 124 EXPECT_EQ(CrasOutputStream::kCreated, test_stream->state()); | 125 EXPECT_EQ(CrasOutputStream::kCreated, test_stream->state()); |
| 125 test_stream->Close(); | 126 test_stream->Close(); |
| 126 | 127 |
| 127 // Should support stereo. | 128 // Should support stereo. |
| 128 test_stream = CreateStream(CHANNEL_LAYOUT_SURROUND); | 129 test_stream = CreateStream(CHANNEL_LAYOUT_SURROUND); |
| 129 EXPECT_EQ(CrasOutputStream::kCreated, test_stream->state()); | 130 EXPECT_EQ(CrasOutputStream::kCreated, test_stream->state()); |
| 130 test_stream->Close(); | 131 test_stream->Close(); |
| 131 | 132 |
| 132 // Bad bits per sample. | 133 // Bad bits per sample. |
| 133 AudioParameters bad_bps_params(kTestFormat, kTestChannelLayout, | 134 AudioParameters bad_bps_params(kTestFormat, kTestChannelLayout, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 147 | 148 |
| 148 // Bad sample rate. | 149 // Bad sample rate. |
| 149 AudioParameters bad_rate_params(kTestFormat, kTestChannelLayout, | 150 AudioParameters bad_rate_params(kTestFormat, kTestChannelLayout, |
| 150 0, kTestBitsPerSample, kTestFramesPerPacket); | 151 0, kTestBitsPerSample, kTestFramesPerPacket); |
| 151 test_stream = new CrasOutputStream(bad_rate_params, mock_manager_.get()); | 152 test_stream = new CrasOutputStream(bad_rate_params, mock_manager_.get()); |
| 152 EXPECT_EQ(CrasOutputStream::kInError, test_stream->state()); | 153 EXPECT_EQ(CrasOutputStream::kInError, test_stream->state()); |
| 153 test_stream->Close(); | 154 test_stream->Close(); |
| 154 } | 155 } |
| 155 | 156 |
| 156 TEST_F(CrasOutputStreamTest, OpenClose) { | 157 TEST_F(CrasOutputStreamTest, OpenClose) { |
| 157 CrasOutputStream *test_stream = CreateStream(CHANNEL_LAYOUT_MONO); | 158 CrasOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_MONO); |
| 158 // Open the stream. | 159 // Open the stream. |
| 159 ASSERT_TRUE(test_stream->Open()); | 160 ASSERT_TRUE(test_stream->Open()); |
| 160 EXPECT_EQ(CrasOutputStream::kIsOpened, test_stream->state()); | 161 EXPECT_EQ(CrasOutputStream::kIsOpened, test_stream->state()); |
| 161 | 162 |
| 162 // Close the stream. | 163 // Close the stream. |
| 163 test_stream->Close(); | 164 test_stream->Close(); |
| 164 } | 165 } |
| 165 | 166 |
| 166 TEST_F(CrasOutputStreamTest, StartFailBeforeOpen) { | 167 TEST_F(CrasOutputStreamTest, StartFailBeforeOpen) { |
| 167 CrasOutputStream *test_stream = CreateStream(CHANNEL_LAYOUT_MONO); | 168 CrasOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_MONO); |
| 168 MockAudioSourceCallback mock_callback; | 169 MockAudioSourceCallback mock_callback; |
| 169 | 170 |
| 170 test_stream->Start(&mock_callback); | 171 test_stream->Start(&mock_callback); |
| 171 EXPECT_EQ(CrasOutputStream::kInError, test_stream->state()); | 172 EXPECT_EQ(CrasOutputStream::kInError, test_stream->state()); |
| 172 } | 173 } |
| 173 | 174 |
| 174 TEST_F(CrasOutputStreamTest, StartStop) { | 175 TEST_F(CrasOutputStreamTest, StartStop) { |
| 175 CrasOutputStream *test_stream = CreateStream(CHANNEL_LAYOUT_MONO); | 176 CrasOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_MONO); |
| 176 MockAudioSourceCallback mock_callback; | 177 MockAudioSourceCallback mock_callback; |
| 177 | 178 |
| 178 // Open the stream. | 179 // Open the stream. |
| 179 ASSERT_TRUE(test_stream->Open()); | 180 ASSERT_TRUE(test_stream->Open()); |
| 180 EXPECT_EQ(CrasOutputStream::kIsOpened, test_stream->state()); | 181 EXPECT_EQ(CrasOutputStream::kIsOpened, test_stream->state()); |
| 181 | 182 |
| 182 // Start. | 183 // Start. |
| 183 test_stream->Start(&mock_callback); | 184 test_stream->Start(&mock_callback); |
| 184 EXPECT_EQ(CrasOutputStream::kIsPlaying, test_stream->state()); | 185 EXPECT_EQ(CrasOutputStream::kIsPlaying, test_stream->state()); |
| 185 | 186 |
| 186 // Stop. | 187 // Stop. |
| 187 test_stream->Stop(); | 188 test_stream->Stop(); |
| 188 EXPECT_EQ(CrasOutputStream::kIsStopped, test_stream->state()); | 189 EXPECT_EQ(CrasOutputStream::kIsStopped, test_stream->state()); |
| 189 | 190 |
| 190 // Close the stream. | 191 // Close the stream. |
| 191 test_stream->Close(); | 192 test_stream->Close(); |
| 192 } | 193 } |
| 193 | 194 |
| 194 TEST_F(CrasOutputStreamTest, RenderFrames) { | 195 TEST_F(CrasOutputStreamTest, RenderFrames) { |
| 195 CrasOutputStream *test_stream = CreateStream(CHANNEL_LAYOUT_MONO); | 196 CrasOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_MONO); |
| 196 MockAudioSourceCallback mock_callback; | 197 MockAudioSourceCallback mock_callback; |
| 197 const uint32 amount_rendered_return = 2048; | 198 const uint32 amount_rendered_return = 2048; |
| 198 | 199 |
| 199 // Open the stream. | 200 // Open the stream. |
| 200 ASSERT_TRUE(test_stream->Open()); | 201 ASSERT_TRUE(test_stream->Open()); |
| 201 EXPECT_EQ(CrasOutputStream::kIsOpened, test_stream->state()); | 202 EXPECT_EQ(CrasOutputStream::kIsOpened, test_stream->state()); |
| 202 | 203 |
| 203 // Render Callback. | 204 // Render Callback. |
| 204 EXPECT_CALL(mock_callback, OnMoreData(test_stream, _, | 205 EXPECT_CALL(mock_callback, OnMoreData(_, |
| 205 kTestFramesPerPacket * kTestBytesPerFrame, _)) | 206 kTestFramesPerPacket * kTestBytesPerFrame, _)) |
| 206 .WillRepeatedly(Return(amount_rendered_return)); | 207 .WillRepeatedly(Return(amount_rendered_return)); |
| 207 | 208 |
| 208 // Start. | 209 // Start. |
| 209 test_stream->Start(&mock_callback); | 210 test_stream->Start(&mock_callback); |
| 210 EXPECT_EQ(CrasOutputStream::kIsPlaying, test_stream->state()); | 211 EXPECT_EQ(CrasOutputStream::kIsPlaying, test_stream->state()); |
| 211 | 212 |
| 212 // Stop. | 213 // Stop. |
| 213 test_stream->Stop(); | 214 test_stream->Stop(); |
| 214 EXPECT_EQ(CrasOutputStream::kIsStopped, test_stream->state()); | 215 EXPECT_EQ(CrasOutputStream::kIsStopped, test_stream->state()); |
| 215 | 216 |
| 216 // Close the stream. | 217 // Close the stream. |
| 217 test_stream->Close(); | 218 test_stream->Close(); |
| 218 } | 219 } |
| 219 | 220 |
| 220 } // namespace media | 221 } // namespace media |
| OLD | NEW |