| 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..ae3d8cf772d0286b7659461db97187129ee97588 100644
|
| --- a/media/audio/linux/alsa_output_unittest.cc
|
| +++ b/media/audio/linux/alsa_output_unittest.cc
|
| @@ -78,13 +78,24 @@ 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_METHOD0(GetMaxAudioOutputStreamsAllowed, int());
|
| + MOCK_METHOD1(MakeAudioLinearOutputStream, AudioOutputStream*(
|
| + const AudioParameters& params));
|
| + MOCK_METHOD1(MakeAudioLowLatencyOutputStream, AudioOutputStream*(
|
| + const AudioParameters& params));
|
| + MOCK_METHOD2(MakeAudioLinearOutputStream, AudioInputStream*(
|
| + const AudioParameters& params, const std::string& device_id));
|
| + MOCK_METHOD2(MakeAudioLowLatencyInputStream, AudioInputStream*(
|
| + const AudioParameters& params, const std::string& device_id));
|
| +
|
| + // We need to override this function because we want to skip the checking
|
| + // the number of active streams.
|
| + 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 +108,11 @@ class AlsaPcmOutputStreamTest : public testing::Test {
|
| protected:
|
| AlsaPcmOutputStreamTest() {
|
| mock_manager_.reset(new StrictMock<MockAudioManagerLinux>());
|
| - test_stream_.reset(CreateStream(kTestChannelLayout));
|
| + test_stream_ = CreateStream(kTestChannelLayout);
|
| }
|
|
|
| virtual ~AlsaPcmOutputStreamTest() {
|
| - test_stream_.reset(NULL);
|
| + test_stream_ = NULL;
|
| }
|
|
|
| AlsaPcmOutputStream* CreateStream(ChannelLayout layout) {
|
| @@ -165,7 +176,7 @@ class AlsaPcmOutputStreamTest : public testing::Test {
|
| StrictMock<MockAlsaWrapper> mock_alsa_wrapper_;
|
| scoped_ptr<StrictMock<MockAudioManagerLinux> > mock_manager_;
|
| MessageLoop message_loop_;
|
| - scoped_ptr<AlsaPcmOutputStream> test_stream_;
|
| + AlsaPcmOutputStream* test_stream_;
|
| scoped_refptr<media::DataBuffer> packet_;
|
|
|
| private:
|
| @@ -206,31 +217,31 @@ TEST_F(AlsaPcmOutputStreamTest, ConstructedState) {
|
| EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state());
|
|
|
| // Should support mono.
|
| - test_stream_.reset(CreateStream(CHANNEL_LAYOUT_MONO));
|
| + test_stream_ = CreateStream(CHANNEL_LAYOUT_MONO);
|
| EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state());
|
|
|
| // Should support multi-channel.
|
| - test_stream_.reset(CreateStream(CHANNEL_LAYOUT_SURROUND));
|
| + test_stream_ = CreateStream(CHANNEL_LAYOUT_SURROUND);
|
| EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state());
|
|
|
| // 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()));
|
| + test_stream_ = new AlsaPcmOutputStream(kTestDeviceName,
|
| + bad_bps_params,
|
| + &mock_alsa_wrapper_,
|
| + mock_manager_.get());
|
| EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state());
|
|
|
| // 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()));
|
| + test_stream_ = new AlsaPcmOutputStream(kTestDeviceName,
|
| + bad_format_params,
|
| + &mock_alsa_wrapper_,
|
| + mock_manager_.get());
|
| EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state());
|
| }
|
|
|
| @@ -255,15 +266,13 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
|
| SetArgumentPointee<2>(kTestFramesPerPacket / 2),
|
| Return(0)));
|
|
|
| - test_stream_.reset(CreateStream(kTestChannelLayout,
|
| - kPacketFramesInMinLatency));
|
| + 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();
|
|
|
| Mock::VerifyAndClear(&mock_alsa_wrapper_);
|
| @@ -284,8 +293,7 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
|
| SetArgumentPointee<2>(kTestFramesPerPacket / 2),
|
| Return(0)));
|
|
|
| - test_stream_.reset(CreateStream(kTestChannelLayout,
|
| - kOverMinLatencyPacketSize));
|
| + test_stream_ = CreateStream(kTestChannelLayout, kOverMinLatencyPacketSize);
|
| ASSERT_TRUE(test_stream_->Open());
|
|
|
| // Now close it and test that everything was released.
|
| @@ -293,7 +301,6 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
|
| .WillOnce(Return(0));
|
| EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
|
| .WillOnce(Return(kTestDeviceName));
|
| - EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get()));
|
| test_stream_->Close();
|
|
|
| Mock::VerifyAndClear(&mock_alsa_wrapper_);
|
| @@ -341,12 +348,7 @@ TEST_F(AlsaPcmOutputStreamTest, OpenClose) {
|
| .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_F(AlsaPcmOutputStreamTest, PcmOpenFailed) {
|
| @@ -364,7 +366,6 @@ TEST_F(AlsaPcmOutputStreamTest, PcmOpenFailed) {
|
| 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();
|
| }
|
|
|
| @@ -392,7 +393,6 @@ TEST_F(AlsaPcmOutputStreamTest, PcmSetParamsFailed) {
|
| 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();
|
| }
|
|
|
| @@ -428,7 +428,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));
|
| @@ -447,7 +447,6 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) {
|
| 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))
|
| @@ -539,7 +538,7 @@ 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;
|
| @@ -564,7 +563,7 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Negative) {
|
| EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_))
|
| .WillRepeatedly(Return(0)); // Buffer is full.
|
| EXPECT_CALL(mock_callback,
|
| - OnMoreData(test_stream_.get(), _, _, _))
|
| + OnMoreData(test_stream_, _, _, _))
|
| .WillOnce(Return(10));
|
|
|
| bool source_exhausted;
|
| @@ -587,7 +586,7 @@ 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));
|
| @@ -670,7 +669,7 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_DeviceSelect) {
|
| EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("NAME")))
|
| .WillRepeatedly(Invoke(EchoHint));
|
|
|
| - test_stream_.reset(CreateStream(kExpectedLayouts[i]));
|
| + test_stream_ = CreateStream(kExpectedLayouts[i]);
|
| EXPECT_TRUE(test_stream_->AutoSelectDevice(i));
|
| EXPECT_EQ(kExpectedDownmix[i], test_stream_->should_downmix_);
|
|
|
| @@ -720,7 +719,7 @@ 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));
|
| + test_stream_ = CreateStream(CHANNEL_LAYOUT_5POINT0);
|
| EXPECT_FALSE(test_stream_->AutoSelectDevice(5));
|
| }
|
|
|
| @@ -738,7 +737,7 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) {
|
| EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno))
|
| .WillOnce(Return(kDummyMessage));
|
|
|
| - test_stream_.reset(CreateStream(CHANNEL_LAYOUT_5POINT0));
|
| + test_stream_ = CreateStream(CHANNEL_LAYOUT_5POINT0);
|
| EXPECT_TRUE(test_stream_->AutoSelectDevice(5));
|
| EXPECT_TRUE(test_stream_->should_downmix_);
|
| }
|
|
|