Index: media/audio/linux/alsa_output_unittest.cc |
diff --git a/media/audio/linux/alsa_output_unittest.cc b/media/audio/linux/alsa_output_unittest.cc |
index bcf2e3dd0486d811c3113edb98314a847a8ac067..86589961db391d8fd9b6bb19c5e0d22c2c95f6a4 100644 |
--- a/media/audio/linux/alsa_output_unittest.cc |
+++ b/media/audio/linux/alsa_output_unittest.cc |
@@ -78,13 +78,25 @@ class MockAudioManagerLinux : public AudioManagerLinux { |
MOCK_METHOD0(Init, void()); |
MOCK_METHOD0(HasAudioOutputDevices, bool()); |
MOCK_METHOD0(HasAudioInputDevices, bool()); |
- MOCK_METHOD1(MakeAudioOutputStream, AudioOutputStream*( |
- const AudioParameters& params)); |
- MOCK_METHOD2(MakeAudioInputStream, AudioInputStream*( |
- const AudioParameters& params, const std::string& device_id)); |
MOCK_METHOD0(MuteAll, void()); |
MOCK_METHOD0(UnMuteAll, void()); |
- MOCK_METHOD1(ReleaseOutputStream, void(AudioOutputStream* stream)); |
+ MOCK_METHOD1(MakeLinearOutputStream, AudioOutputStream*( |
+ const AudioParameters& params)); |
+ MOCK_METHOD1(MakeLowLatencyOutputStream, AudioOutputStream*( |
+ const AudioParameters& params)); |
+ MOCK_METHOD2(MakeLinearOutputStream, AudioInputStream*( |
+ const AudioParameters& params, const std::string& device_id)); |
+ MOCK_METHOD2(MakeLowLatencyInputStream, AudioInputStream*( |
+ const AudioParameters& params, const std::string& device_id)); |
+ |
+ // We need to override this function in order to skip the checking the number |
+ // of active output streams. It is because the number of active streams |
+ // is managed inside MakeAudioOutputStream, and we don't use |
+ // MakeAudioOutputStream to create the stream in the tests. |
+ virtual void ReleaseOutputStream(AudioOutputStream* stream) OVERRIDE { |
+ DCHECK(stream); |
+ delete stream; |
+ } |
// We don't mock this method since all tests will do the same thing |
// and use the current message loop. |
@@ -97,11 +109,9 @@ class AlsaPcmOutputStreamTest : public testing::Test { |
protected: |
AlsaPcmOutputStreamTest() { |
mock_manager_.reset(new StrictMock<MockAudioManagerLinux>()); |
- test_stream_.reset(CreateStream(kTestChannelLayout)); |
} |
virtual ~AlsaPcmOutputStreamTest() { |
- test_stream_.reset(NULL); |
} |
AlsaPcmOutputStream* CreateStream(ChannelLayout layout) { |
@@ -128,13 +138,14 @@ class AlsaPcmOutputStreamTest : public testing::Test { |
return strdup("Output"); |
} |
- // Helper function to initialize |test_stream_->buffer_|. Must be called |
+ // Helper function to initialize |test_stream->buffer_|. Must be called |
// in all tests that use buffer_ without opening the stream. |
- void InitBuffer() { |
+ void InitBuffer(AlsaPcmOutputStream* test_stream) { |
+ DCHECK(test_stream); |
packet_ = new media::DataBuffer(kTestPacketSize); |
packet_->SetDataSize(kTestPacketSize); |
- test_stream_->buffer_.reset(new media::SeekableBuffer(0, kTestPacketSize)); |
- test_stream_->buffer_->Append(packet_.get()); |
+ test_stream->buffer_.reset(new media::SeekableBuffer(0, kTestPacketSize)); |
+ test_stream->buffer_->Append(packet_.get()); |
} |
MockAudioManagerLinux& mock_manager() { |
@@ -165,7 +176,6 @@ class AlsaPcmOutputStreamTest : public testing::Test { |
StrictMock<MockAlsaWrapper> mock_alsa_wrapper_; |
scoped_ptr<StrictMock<MockAudioManagerLinux> > mock_manager_; |
MessageLoop message_loop_; |
- scoped_ptr<AlsaPcmOutputStream> test_stream_; |
scoped_refptr<media::DataBuffer> packet_; |
private: |
@@ -203,35 +213,41 @@ void* AlsaPcmOutputStreamTest::kFakeHints[] = { |
kSurround70, kSurround71, NULL }; |
TEST_F(AlsaPcmOutputStreamTest, ConstructedState) { |
- EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state()); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream->state()); |
+ test_stream->Close(); |
// Should support mono. |
- test_stream_.reset(CreateStream(CHANNEL_LAYOUT_MONO)); |
- EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state()); |
+ test_stream = CreateStream(CHANNEL_LAYOUT_MONO); |
+ EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream->state()); |
+ test_stream->Close(); |
// Should support multi-channel. |
- test_stream_.reset(CreateStream(CHANNEL_LAYOUT_SURROUND)); |
- EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state()); |
+ test_stream = CreateStream(CHANNEL_LAYOUT_SURROUND); |
+ EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream->state()); |
+ test_stream->Close(); |
// Bad bits per sample. |
AudioParameters bad_bps_params(kTestFormat, kTestChannelLayout, |
kTestSampleRate, kTestBitsPerSample - 1, |
kTestFramesPerPacket); |
- test_stream_.reset(new AlsaPcmOutputStream(kTestDeviceName, |
- bad_bps_params, |
- &mock_alsa_wrapper_, |
- mock_manager_.get())); |
- EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state()); |
+ test_stream = new AlsaPcmOutputStream(kTestDeviceName, |
+ bad_bps_params, |
+ &mock_alsa_wrapper_, |
+ mock_manager_.get()); |
+ EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream->state()); |
+ test_stream->Close(); |
// Bad format. |
AudioParameters bad_format_params( |
AudioParameters::AUDIO_LAST_FORMAT, kTestChannelLayout, kTestSampleRate, |
kTestBitsPerSample, kTestFramesPerPacket); |
- test_stream_.reset(new AlsaPcmOutputStream(kTestDeviceName, |
- bad_format_params, |
- &mock_alsa_wrapper_, |
- mock_manager_.get())); |
- EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state()); |
+ test_stream = new AlsaPcmOutputStream(kTestDeviceName, |
+ bad_format_params, |
+ &mock_alsa_wrapper_, |
+ mock_manager_.get()); |
+ EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream->state()); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) { |
@@ -255,16 +271,15 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) { |
SetArgumentPointee<2>(kTestFramesPerPacket / 2), |
Return(0))); |
- test_stream_.reset(CreateStream(kTestChannelLayout, |
- kPacketFramesInMinLatency)); |
- ASSERT_TRUE(test_stream_->Open()); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout, |
+ kPacketFramesInMinLatency); |
+ ASSERT_TRUE(test_stream->Open()); |
// Now close it and test that everything was released. |
EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)).WillOnce(Return(0)); |
EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle)) |
.WillOnce(Return(kTestDeviceName)); |
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get())); |
- test_stream_->Close(); |
+ test_stream->Close(); |
Mock::VerifyAndClear(&mock_alsa_wrapper_); |
Mock::VerifyAndClear(mock_manager_.get()); |
@@ -284,17 +299,16 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) { |
SetArgumentPointee<2>(kTestFramesPerPacket / 2), |
Return(0))); |
- test_stream_.reset(CreateStream(kTestChannelLayout, |
- kOverMinLatencyPacketSize)); |
- ASSERT_TRUE(test_stream_->Open()); |
+ test_stream = CreateStream(kTestChannelLayout, |
+ kOverMinLatencyPacketSize); |
+ ASSERT_TRUE(test_stream->Open()); |
// Now close it and test that everything was released. |
EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)) |
.WillOnce(Return(0)); |
EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle)) |
.WillOnce(Return(kTestDeviceName)); |
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get())); |
- test_stream_->Close(); |
+ test_stream->Close(); |
Mock::VerifyAndClear(&mock_alsa_wrapper_); |
Mock::VerifyAndClear(mock_manager_.get()); |
@@ -328,25 +342,21 @@ TEST_F(AlsaPcmOutputStreamTest, OpenClose) { |
Return(0))); |
// Open the stream. |
- ASSERT_TRUE(test_stream_->Open()); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ ASSERT_TRUE(test_stream->Open()); |
- EXPECT_EQ(AlsaPcmOutputStream::kIsOpened, test_stream_->state()); |
- EXPECT_EQ(kFakeHandle, test_stream_->playback_handle_); |
- EXPECT_EQ(kTestFramesPerPacket, test_stream_->frames_per_packet_); |
- EXPECT_TRUE(test_stream_->buffer_.get()); |
- EXPECT_FALSE(test_stream_->stop_stream_); |
+ EXPECT_EQ(AlsaPcmOutputStream::kIsOpened, test_stream->state()); |
+ EXPECT_EQ(kFakeHandle, test_stream->playback_handle_); |
+ EXPECT_EQ(kTestFramesPerPacket, test_stream->frames_per_packet_); |
+ EXPECT_TRUE(test_stream->buffer_.get()); |
+ EXPECT_FALSE(test_stream->stop_stream_); |
// Now close it and test that everything was released. |
EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)) |
.WillOnce(Return(0)); |
EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle)) |
.WillOnce(Return(kTestDeviceName)); |
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get())); |
- test_stream_->Close(); |
- |
- EXPECT_TRUE(test_stream_->playback_handle_ == NULL); |
- EXPECT_FALSE(test_stream_->buffer_.get()); |
- EXPECT_TRUE(test_stream_->stop_stream_); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, PcmOpenFailed) { |
@@ -355,17 +365,17 @@ TEST_F(AlsaPcmOutputStreamTest, PcmOpenFailed) { |
EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno)) |
.WillOnce(Return(kDummyMessage)); |
- ASSERT_FALSE(test_stream_->Open()); |
- ASSERT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state()); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ ASSERT_FALSE(test_stream->Open()); |
+ ASSERT_EQ(AlsaPcmOutputStream::kInError, test_stream->state()); |
// Ensure internal state is set for a no-op stream if PcmOpen() failes. |
- EXPECT_TRUE(test_stream_->stop_stream_); |
- EXPECT_TRUE(test_stream_->playback_handle_ == NULL); |
- EXPECT_FALSE(test_stream_->buffer_.get()); |
+ EXPECT_TRUE(test_stream->stop_stream_); |
+ EXPECT_TRUE(test_stream->playback_handle_ == NULL); |
+ EXPECT_FALSE(test_stream->buffer_.get()); |
// Close the stream since we opened it to make destruction happy. |
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get())); |
- test_stream_->Close(); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, PcmSetParamsFailed) { |
@@ -383,17 +393,17 @@ TEST_F(AlsaPcmOutputStreamTest, PcmSetParamsFailed) { |
// If open fails, the stream stays in kCreated because it has effectively had |
// no changes. |
- ASSERT_FALSE(test_stream_->Open()); |
- EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state()); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ ASSERT_FALSE(test_stream->Open()); |
+ EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream->state()); |
// Ensure internal state is set for a no-op stream if PcmSetParams() failes. |
- EXPECT_TRUE(test_stream_->stop_stream_); |
- EXPECT_TRUE(test_stream_->playback_handle_ == NULL); |
- EXPECT_FALSE(test_stream_->buffer_.get()); |
+ EXPECT_TRUE(test_stream->stop_stream_); |
+ EXPECT_TRUE(test_stream->playback_handle_ == NULL); |
+ EXPECT_FALSE(test_stream->buffer_.get()); |
// Close the stream since we opened it to make destruction happy. |
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get())); |
- test_stream_->Close(); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, StartStop) { |
@@ -411,7 +421,8 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) { |
Return(0))); |
// Open the stream. |
- ASSERT_TRUE(test_stream_->Open()); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ ASSERT_TRUE(test_stream->Open()); |
// Expect Device setup. |
EXPECT_CALL(mock_alsa_wrapper_, PcmDrop(kFakeHandle)) |
@@ -428,7 +439,7 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) { |
.Times(2) |
.WillRepeatedly(DoAll(SetArgumentPointee<1>(0), Return(0))); |
EXPECT_CALL(mock_callback, |
- OnMoreData(test_stream_.get(), _, kTestPacketSize, _)) |
+ OnMoreData(test_stream, _, kTestPacketSize, _)) |
.Times(2) |
.WillOnce(Return(kTestPacketSize)) |
.WillOnce(Return(0)); |
@@ -444,39 +455,41 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) { |
&MessageLoop::QuitNow), |
Return(0))); // Buffer is full. |
- test_stream_->Start(&mock_callback); |
+ test_stream->Start(&mock_callback); |
message_loop_.RunAllPending(); |
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get())); |
EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)) |
.WillOnce(Return(0)); |
EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle)) |
.WillOnce(Return(kTestDeviceName)); |
- test_stream_->Close(); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, WritePacket_FinishedPacket) { |
- InitBuffer(); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
// Nothing should happen. Don't set any expectations and Our strict mocks |
// should verify most of this. |
// Test empty buffer. |
- test_stream_->buffer_->Clear(); |
- test_stream_->WritePacket(); |
+ test_stream->buffer_->Clear(); |
+ test_stream->WritePacket(); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) { |
- InitBuffer(); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
// Write a little less than half the data. |
int written = packet_->GetDataSize() / kTestBytesPerFrame / 2 - 1; |
EXPECT_CALL(mock_alsa_wrapper_, PcmWritei(_, packet_->GetData(), _)) |
.WillOnce(Return(written)); |
- test_stream_->WritePacket(); |
+ test_stream->WritePacket(); |
- ASSERT_EQ(test_stream_->buffer_->forward_bytes(), |
+ ASSERT_EQ(test_stream->buffer_->forward_bytes(), |
packet_->GetDataSize() - written * kTestBytesPerFrame); |
// Write the rest. |
@@ -484,12 +497,14 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) { |
PcmWritei(_, packet_->GetData() + written * kTestBytesPerFrame, |
_)) |
.WillOnce(Return(packet_->GetDataSize() / kTestBytesPerFrame - written)); |
- test_stream_->WritePacket(); |
- EXPECT_EQ(0u, test_stream_->buffer_->forward_bytes()); |
+ test_stream->WritePacket(); |
+ EXPECT_EQ(0u, test_stream->buffer_->forward_bytes()); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) { |
- InitBuffer(); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
// Fail due to a recoverable error and see that PcmRecover code path |
// continues normally. |
@@ -498,9 +513,9 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) { |
EXPECT_CALL(mock_alsa_wrapper_, PcmRecover(_, _, _)) |
.WillOnce(Return(packet_->GetDataSize() / kTestBytesPerFrame / 2 - 1)); |
- test_stream_->WritePacket(); |
+ test_stream->WritePacket(); |
- ASSERT_EQ(test_stream_->buffer_->forward_bytes(), |
+ ASSERT_EQ(test_stream->buffer_->forward_bytes(), |
packet_->GetDataSize() / 2 + kTestBytesPerFrame); |
// Fail the next write, and see that stop_stream_ is set. |
@@ -510,24 +525,28 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) { |
.WillOnce(Return(kTestFailedErrno)); |
EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno)) |
.WillOnce(Return(kDummyMessage)); |
- test_stream_->WritePacket(); |
- EXPECT_EQ(test_stream_->buffer_->forward_bytes(), |
+ test_stream->WritePacket(); |
+ EXPECT_EQ(test_stream->buffer_->forward_bytes(), |
packet_->GetDataSize() / 2 + kTestBytesPerFrame); |
- EXPECT_TRUE(test_stream_->stop_stream_); |
+ EXPECT_TRUE(test_stream->stop_stream_); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, WritePacket_StopStream) { |
- InitBuffer(); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
// No expectations set on the strict mock because nothing should be called. |
- test_stream_->stop_stream_ = true; |
- test_stream_->WritePacket(); |
- EXPECT_EQ(0u, test_stream_->buffer_->forward_bytes()); |
+ test_stream->stop_stream_ = true; |
+ test_stream->WritePacket(); |
+ EXPECT_EQ(0u, test_stream->buffer_->forward_bytes()); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, BufferPacket) { |
- InitBuffer(); |
- test_stream_->buffer_->Clear(); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
+ test_stream->buffer_->Clear(); |
MockAudioSourceCallback mock_callback; |
EXPECT_CALL(mock_alsa_wrapper_, PcmState(_)) |
@@ -539,21 +558,23 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket) { |
// Return a partially filled packet. |
EXPECT_CALL(mock_callback, |
- OnMoreData(test_stream_.get(), _, _, _)) |
+ OnMoreData(test_stream, _, _, _)) |
.WillOnce(Return(10)); |
bool source_exhausted; |
- test_stream_->set_source_callback(&mock_callback); |
- test_stream_->packet_size_ = kTestPacketSize; |
- test_stream_->BufferPacket(&source_exhausted); |
+ test_stream->set_source_callback(&mock_callback); |
+ test_stream->packet_size_ = kTestPacketSize; |
+ test_stream->BufferPacket(&source_exhausted); |
- EXPECT_EQ(10u, test_stream_->buffer_->forward_bytes()); |
+ EXPECT_EQ(10u, test_stream->buffer_->forward_bytes()); |
EXPECT_FALSE(source_exhausted); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Negative) { |
- InitBuffer(); |
- test_stream_->buffer_->Clear(); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
+ test_stream->buffer_->Clear(); |
// Simulate where the underrun has occurred right after checking the delay. |
MockAudioSourceCallback mock_callback; |
@@ -563,22 +584,23 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Negative) { |
.WillOnce(DoAll(SetArgumentPointee<1>(-1), Return(0))); |
EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_)) |
.WillRepeatedly(Return(0)); // Buffer is full. |
- EXPECT_CALL(mock_callback, |
- OnMoreData(test_stream_.get(), _, _, _)) |
+ EXPECT_CALL(mock_callback, OnMoreData(test_stream, _, _, _)) |
.WillOnce(Return(10)); |
bool source_exhausted; |
- test_stream_->set_source_callback(&mock_callback); |
- test_stream_->packet_size_ = kTestPacketSize; |
- test_stream_->BufferPacket(&source_exhausted); |
+ test_stream->set_source_callback(&mock_callback); |
+ test_stream->packet_size_ = kTestPacketSize; |
+ test_stream->BufferPacket(&source_exhausted); |
- EXPECT_EQ(10u, test_stream_->buffer_->forward_bytes()); |
+ EXPECT_EQ(10u, test_stream->buffer_->forward_bytes()); |
EXPECT_FALSE(source_exhausted); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Underrun) { |
- InitBuffer(); |
- test_stream_->buffer_->Clear(); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
+ test_stream->buffer_->Clear(); |
// If ALSA has underrun then we should assume a delay of zero. |
MockAudioSourceCallback mock_callback; |
@@ -587,28 +609,31 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Underrun) { |
EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_)) |
.WillRepeatedly(Return(0)); // Buffer is full. |
EXPECT_CALL(mock_callback, |
- OnMoreData(test_stream_.get(), _, _, AllOf( |
+ OnMoreData(test_stream, _, _, AllOf( |
Field(&AudioBuffersState::pending_bytes, 0), |
Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
.WillOnce(Return(10)); |
bool source_exhausted; |
- test_stream_->set_source_callback(&mock_callback); |
- test_stream_->packet_size_ = kTestPacketSize; |
- test_stream_->BufferPacket(&source_exhausted); |
+ test_stream->set_source_callback(&mock_callback); |
+ test_stream->packet_size_ = kTestPacketSize; |
+ test_stream->BufferPacket(&source_exhausted); |
- EXPECT_EQ(10u, test_stream_->buffer_->forward_bytes()); |
+ EXPECT_EQ(10u, test_stream->buffer_->forward_bytes()); |
EXPECT_FALSE(source_exhausted); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_FullBuffer) { |
- InitBuffer(); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
// No expectations set on the strict mock because nothing should be called. |
bool source_exhausted; |
- test_stream_->packet_size_ = kTestPacketSize; |
- test_stream_->BufferPacket(&source_exhausted); |
- EXPECT_EQ(kTestPacketSize, test_stream_->buffer_->forward_bytes()); |
+ test_stream->packet_size_ = kTestPacketSize; |
+ test_stream->BufferPacket(&source_exhausted); |
+ EXPECT_EQ(kTestPacketSize, test_stream->buffer_->forward_bytes()); |
EXPECT_FALSE(source_exhausted); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_DeviceSelect) { |
@@ -670,12 +695,13 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_DeviceSelect) { |
EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("NAME"))) |
.WillRepeatedly(Invoke(EchoHint)); |
- test_stream_.reset(CreateStream(kExpectedLayouts[i])); |
- EXPECT_TRUE(test_stream_->AutoSelectDevice(i)); |
- EXPECT_EQ(kExpectedDownmix[i], test_stream_->should_downmix_); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kExpectedLayouts[i]); |
+ EXPECT_TRUE(test_stream->AutoSelectDevice(i)); |
+ EXPECT_EQ(kExpectedDownmix[i], test_stream->should_downmix_); |
Mock::VerifyAndClearExpectations(&mock_alsa_wrapper_); |
Mock::VerifyAndClearExpectations(mock_manager_.get()); |
+ test_stream->Close(); |
} |
} |
@@ -720,8 +746,9 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_FallbackDevices) { |
EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(fourth_try.c_str()), _, _)) |
.WillOnce(Return(kTestFailedErrno)); |
- test_stream_.reset(CreateStream(CHANNEL_LAYOUT_5POINT0)); |
- EXPECT_FALSE(test_stream_->AutoSelectDevice(5)); |
+ AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5POINT0); |
+ EXPECT_FALSE(test_stream->AutoSelectDevice(5)); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) { |
@@ -738,53 +765,62 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) { |
EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno)) |
.WillOnce(Return(kDummyMessage)); |
- test_stream_.reset(CreateStream(CHANNEL_LAYOUT_5POINT0)); |
- EXPECT_TRUE(test_stream_->AutoSelectDevice(5)); |
- EXPECT_TRUE(test_stream_->should_downmix_); |
+ AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5POINT0); |
+ EXPECT_TRUE(test_stream->AutoSelectDevice(5)); |
+ EXPECT_TRUE(test_stream->should_downmix_); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_StopStream) { |
- InitBuffer(); |
- test_stream_->stop_stream_ = true; |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ InitBuffer(test_stream); |
+ test_stream->stop_stream_ = true; |
bool source_exhausted; |
- test_stream_->BufferPacket(&source_exhausted); |
- EXPECT_EQ(0u, test_stream_->buffer_->forward_bytes()); |
+ test_stream->BufferPacket(&source_exhausted); |
+ EXPECT_EQ(0u, test_stream->buffer_->forward_bytes()); |
EXPECT_TRUE(source_exhausted); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, ScheduleNextWrite) { |
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsOpened); |
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsPlaying); |
- |
- InitBuffer(); |
- |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened); |
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); |
+DLOG(WARNING) << test_stream->state(); |
+ InitBuffer(test_stream); |
+ DLOG(WARNING) << test_stream->state(); |
EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_)) |
.WillOnce(Return(10)); |
- test_stream_->ScheduleNextWrite(false); |
- |
+ test_stream->ScheduleNextWrite(false); |
+ DLOG(WARNING) << test_stream->state(); |
// TODO(sergeyu): Figure out how to check that the task has been added to the |
// message loop. |
// Cleanup the message queue. Currently ~MessageQueue() doesn't free pending |
// tasks unless running on valgrind. The code below is needed to keep |
// heapcheck happy. |
- test_stream_->stop_stream_ = true; |
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsClosed); |
+ test_stream->stop_stream_ = true; |
+ DLOG(WARNING) << test_stream->state(); |
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsClosed); |
+ DLOG(WARNING) << test_stream->state(); |
+ test_stream->Close(); |
} |
TEST_F(AlsaPcmOutputStreamTest, ScheduleNextWrite_StopStream) { |
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsOpened); |
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsPlaying); |
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); |
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened); |
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); |
- InitBuffer(); |
+ InitBuffer(test_stream); |
- test_stream_->stop_stream_ = true; |
- test_stream_->ScheduleNextWrite(true); |
+ test_stream->stop_stream_ = true; |
+ test_stream->ScheduleNextWrite(true); |
// TODO(ajwong): Find a way to test whether or not another task has been |
// posted so we can verify that the Alsa code will indeed break the task |
// posting loop. |
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsClosed); |
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsClosed); |
+ test_stream->Close(); |
} |