| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "media/base/mock_callback.h" |
| 7 #include "media/base/mock_filters.h" | 8 #include "media/base/mock_filters.h" |
| 8 #include "media/base/mock_task.h" | 9 #include "media/base/mock_task.h" |
| 9 #include "media/filters/decoder_base.h" | 10 #include "media/filters/decoder_base.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 11 #include "testing/gmock/include/gmock/gmock.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 13 |
| 13 using ::testing::_; | 14 using ::testing::_; |
| 14 using ::testing::NotNull; | 15 using ::testing::NotNull; |
| 15 using ::testing::StrictMock; | 16 using ::testing::StrictMock; |
| 16 using ::testing::WithArg; | 17 using ::testing::WithArg; |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 // \ ReadCallback() -> client | 115 // \ ReadCallback() -> client |
| 115 // - DecodeCallback() -> DecoderBase | 116 // - DecodeCallback() -> DecoderBase |
| 116 // \ ReadCallback() -> client | 117 // \ ReadCallback() -> client |
| 117 TEST(DecoderBaseTest, FlowControl) { | 118 TEST(DecoderBaseTest, FlowControl) { |
| 118 MessageLoop message_loop; | 119 MessageLoop message_loop; |
| 119 scoped_refptr<MockDecoderImpl> decoder(new MockDecoderImpl()); | 120 scoped_refptr<MockDecoderImpl> decoder(new MockDecoderImpl()); |
| 120 MockDecoderCallback read_callback; | 121 MockDecoderCallback read_callback; |
| 121 decoder->set_consume_audio_samples_callback( | 122 decoder->set_consume_audio_samples_callback( |
| 122 NewCallback(&read_callback, &MockDecoderCallback::OnReadComplete)); | 123 NewCallback(&read_callback, &MockDecoderCallback::OnReadComplete)); |
| 123 scoped_refptr<MockDemuxerStream> demuxer_stream(new MockDemuxerStream()); | 124 scoped_refptr<MockDemuxerStream> demuxer_stream(new MockDemuxerStream()); |
| 124 StrictMock<MockFilterCallback> callback; | |
| 125 decoder->set_message_loop(&message_loop); | 125 decoder->set_message_loop(&message_loop); |
| 126 | 126 |
| 127 // Initailize. | 127 // Initailize. |
| 128 EXPECT_CALL(callback, OnFilterCallback()); | |
| 129 EXPECT_CALL(callback, OnCallbackDestroyed()); | |
| 130 EXPECT_CALL(*decoder, DoInitialize(NotNull(), NotNull(), NotNull())) | 128 EXPECT_CALL(*decoder, DoInitialize(NotNull(), NotNull(), NotNull())) |
| 131 .WillOnce(Initialize()); | 129 .WillOnce(Initialize()); |
| 132 decoder->Initialize(demuxer_stream.get(), callback.NewCallback()); | 130 decoder->Initialize(demuxer_stream.get(), NewExpectedCallback()); |
| 133 message_loop.RunAllPending(); | 131 message_loop.RunAllPending(); |
| 134 | 132 |
| 135 // Read. | 133 // Read. |
| 136 std::vector<scoped_refptr<Buffer> > decode_requests; | 134 std::vector<scoped_refptr<Buffer> > decode_requests; |
| 137 EXPECT_CALL(*demuxer_stream, Read(NotNull())) | 135 EXPECT_CALL(*demuxer_stream, Read(NotNull())) |
| 138 .Times(2) | 136 .Times(2) |
| 139 .WillRepeatedly(CompleteDemuxRequest()); | 137 .WillRepeatedly(CompleteDemuxRequest()); |
| 140 EXPECT_CALL(*decoder, DoDecode(NotNull())) | 138 EXPECT_CALL(*decoder, DoDecode(NotNull())) |
| 141 .Times(2) | 139 .Times(2) |
| 142 .WillRepeatedly(SaveDecodeRequest(&decode_requests)); | 140 .WillRepeatedly(SaveDecodeRequest(&decode_requests)); |
| 143 scoped_refptr<MockDecoderOutput> output; | 141 scoped_refptr<MockDecoderOutput> output; |
| 144 decoder->ProduceAudioSamples(output); | 142 decoder->ProduceAudioSamples(output); |
| 145 decoder->ProduceAudioSamples(output); | 143 decoder->ProduceAudioSamples(output); |
| 146 message_loop.RunAllPending(); | 144 message_loop.RunAllPending(); |
| 147 | 145 |
| 148 // Fulfill the decode request. | 146 // Fulfill the decode request. |
| 149 EXPECT_CALL(read_callback, OnReadComplete(_)).Times(2); | 147 EXPECT_CALL(read_callback, OnReadComplete(_)).Times(2); |
| 150 for (size_t i = 0; i < decode_requests.size(); ++i) { | 148 for (size_t i = 0; i < decode_requests.size(); ++i) { |
| 151 decoder->EnqueueResult(new MockDecoderOutput()); | 149 decoder->EnqueueResult(new MockDecoderOutput()); |
| 152 decoder->OnDecodeComplete(); | 150 decoder->OnDecodeComplete(); |
| 153 } | 151 } |
| 154 decode_requests.clear(); | 152 decode_requests.clear(); |
| 155 message_loop.RunAllPending(); | 153 message_loop.RunAllPending(); |
| 156 | 154 |
| 157 // Stop. | 155 // Stop. |
| 158 EXPECT_CALL(*decoder, DoStop(_)) | 156 EXPECT_CALL(*decoder, DoStop(_)) |
| 159 .WillOnce(WithArg<0>(InvokeRunnable())); | 157 .WillOnce(WithArg<0>(InvokeRunnable())); |
| 160 EXPECT_CALL(callback, OnFilterCallback()); | 158 decoder->Stop(NewExpectedCallback()); |
| 161 EXPECT_CALL(callback, OnCallbackDestroyed()); | |
| 162 decoder->Stop(callback.NewCallback()); | |
| 163 message_loop.RunAllPending(); | 159 message_loop.RunAllPending(); |
| 164 } | 160 } |
| 165 | 161 |
| 166 } // namespace media | 162 } // namespace media |
| OLD | NEW |