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 |