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 "base/compiler_specific.h" | |
6 #include "base/logging.h" | 5 #include "base/logging.h" |
7 #include "base/test/simple_test_tick_clock.h" | 6 #include "base/test/simple_test_tick_clock.h" |
8 #include "base/time/clock.h" | |
9 #include "media/base/clock.h" | 7 #include "media/base/clock.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
11 | |
12 using ::testing::InSequence; | |
13 using ::testing::Return; | |
14 using ::testing::StrictMock; | |
15 | |
16 namespace base { | |
17 | |
18 // Provide a stream output operator so we can use EXPECT_EQ(...) with TimeDelta. | |
19 // | |
20 // TODO(scherkus): move this into the testing package. | |
21 static std::ostream& operator<<(std::ostream& stream, const TimeDelta& time) { | |
22 return (stream << time.ToInternalValue()); | |
23 } | |
24 | |
25 } // namespace | |
26 | 9 |
27 namespace media { | 10 namespace media { |
28 | 11 |
29 static const int kDurationInSeconds = 120; | |
30 | |
31 class ClockTest : public ::testing::Test { | 12 class ClockTest : public ::testing::Test { |
32 public: | 13 public: |
33 ClockTest() : clock_(&test_tick_clock_) { | 14 ClockTest() : clock_(&test_tick_clock_) {} |
34 SetDuration(); | |
35 } | |
36 | 15 |
37 protected: | 16 protected: |
38 void SetDuration() { | |
39 const base::TimeDelta kDuration = | |
40 base::TimeDelta::FromSeconds(kDurationInSeconds); | |
41 clock_.SetDuration(kDuration); | |
42 EXPECT_EQ(kDuration, clock_.Duration()); | |
43 } | |
44 | |
45 void AdvanceSystemTime(base::TimeDelta delta) { | 17 void AdvanceSystemTime(base::TimeDelta delta) { |
46 test_tick_clock_.Advance(delta); | 18 test_tick_clock_.Advance(delta); |
47 } | 19 } |
48 | 20 |
49 base::SimpleTestTickClock test_tick_clock_; | 21 base::SimpleTestTickClock test_tick_clock_; |
50 Clock clock_; | 22 Clock clock_; |
51 base::TimeDelta time_elapsed_; | 23 base::TimeDelta time_elapsed_; |
52 }; | 24 }; |
53 | 25 |
54 TEST_F(ClockTest, Created) { | 26 TEST_F(ClockTest, Created) { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 // Play again for 4 more seconds. | 119 // Play again for 4 more seconds. |
148 EXPECT_EQ(kExpectedFirstPause, clock_.Play()); | 120 EXPECT_EQ(kExpectedFirstPause, clock_.Play()); |
149 AdvanceSystemTime(kPlayDuration); | 121 AdvanceSystemTime(kPlayDuration); |
150 EXPECT_EQ(kExpectedSecondPause, clock_.Pause()); | 122 EXPECT_EQ(kExpectedSecondPause, clock_.Pause()); |
151 EXPECT_EQ(kExpectedSecondPause, clock_.Elapsed()); | 123 EXPECT_EQ(kExpectedSecondPause, clock_.Elapsed()); |
152 } | 124 } |
153 | 125 |
154 TEST_F(ClockTest, SetTime_Paused) { | 126 TEST_F(ClockTest, SetTime_Paused) { |
155 const base::TimeDelta kFirstTime = base::TimeDelta::FromSeconds(4); | 127 const base::TimeDelta kFirstTime = base::TimeDelta::FromSeconds(4); |
156 const base::TimeDelta kSecondTime = base::TimeDelta::FromSeconds(16); | 128 const base::TimeDelta kSecondTime = base::TimeDelta::FromSeconds(16); |
| 129 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); |
157 | 130 |
158 clock_.SetTime(kFirstTime, clock_.Duration()); | 131 clock_.SetTime(kFirstTime, kArbitraryMaxTime); |
159 EXPECT_EQ(kFirstTime, clock_.Elapsed()); | 132 EXPECT_EQ(kFirstTime, clock_.Elapsed()); |
160 clock_.SetTime(kSecondTime, clock_.Duration()); | 133 clock_.SetTime(kSecondTime, kArbitraryMaxTime); |
161 EXPECT_EQ(kSecondTime, clock_.Elapsed()); | 134 EXPECT_EQ(kSecondTime, clock_.Elapsed()); |
162 } | 135 } |
163 | 136 |
164 TEST_F(ClockTest, SetTime_Playing) { | 137 TEST_F(ClockTest, SetTime_Playing) { |
165 // We'll play for 4 seconds, then set the time to 12, then play for 4 more | 138 // We'll play for 4 seconds, then set the time to 12, then play for 4 more |
166 // seconds. | 139 // seconds. |
167 const base::TimeDelta kZero; | 140 const base::TimeDelta kZero; |
168 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); | 141 const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4); |
169 const base::TimeDelta kUpdatedTime = base::TimeDelta::FromSeconds(12); | 142 const base::TimeDelta kUpdatedTime = base::TimeDelta::FromSeconds(12); |
| 143 const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100); |
170 const base::TimeDelta kExpected = kUpdatedTime + kPlayDuration; | 144 const base::TimeDelta kExpected = kUpdatedTime + kPlayDuration; |
171 | 145 |
172 EXPECT_EQ(kZero, clock_.Play()); | 146 EXPECT_EQ(kZero, clock_.Play()); |
173 AdvanceSystemTime(kPlayDuration); | 147 AdvanceSystemTime(kPlayDuration); |
174 | 148 |
175 clock_.SetTime(kUpdatedTime, clock_.Duration()); | 149 clock_.SetTime(kUpdatedTime, kArbitraryMaxTime); |
176 AdvanceSystemTime(kPlayDuration); | 150 AdvanceSystemTime(kPlayDuration); |
177 EXPECT_EQ(kExpected, clock_.Elapsed()); | 151 EXPECT_EQ(kExpected, clock_.Elapsed()); |
178 } | 152 } |
179 | 153 |
180 TEST_F(ClockTest, CapAtMediaDuration_Paused) { | |
181 const base::TimeDelta kDuration = | |
182 base::TimeDelta::FromSeconds(kDurationInSeconds); | |
183 const base::TimeDelta kTimeOverDuration = | |
184 base::TimeDelta::FromSeconds(kDurationInSeconds + 4); | |
185 | |
186 // Elapsed time should always be capped at the duration of the media. | |
187 clock_.SetTime(kTimeOverDuration, kTimeOverDuration); | |
188 EXPECT_EQ(kDuration, clock_.Elapsed()); | |
189 } | |
190 | |
191 TEST_F(ClockTest, CapAtMediaDuration_Playing) { | |
192 const base::TimeDelta kZero; | |
193 const base::TimeDelta kDuration = | |
194 base::TimeDelta::FromSeconds(kDurationInSeconds); | |
195 const base::TimeDelta kTimeOverDuration = | |
196 base::TimeDelta::FromSeconds(kDurationInSeconds + 4); | |
197 | |
198 // Play for twice as long as the duration of the media. | |
199 EXPECT_EQ(kZero, clock_.Play()); | |
200 AdvanceSystemTime(2 * kDuration); | |
201 EXPECT_EQ(kDuration, clock_.Elapsed()); | |
202 | |
203 // Manually set the time past the duration. | |
204 clock_.SetTime(kTimeOverDuration, kTimeOverDuration); | |
205 EXPECT_EQ(kDuration, clock_.Elapsed()); | |
206 } | |
207 | |
208 TEST_F(ClockTest, SetMaxTime) { | 154 TEST_F(ClockTest, SetMaxTime) { |
209 const base::TimeDelta kZero; | 155 const base::TimeDelta kZero; |
210 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); | 156 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); |
211 const base::TimeDelta kMaxTime = base::TimeDelta::FromSeconds(6); | 157 const base::TimeDelta kMaxTime = base::TimeDelta::FromSeconds(6); |
212 | 158 |
213 EXPECT_EQ(kZero, clock_.Play()); | 159 EXPECT_EQ(kZero, clock_.Play()); |
214 clock_.SetMaxTime(kMaxTime); | 160 clock_.SetMaxTime(kMaxTime); |
215 AdvanceSystemTime(kTimeInterval); | 161 AdvanceSystemTime(kTimeInterval); |
216 EXPECT_EQ(kTimeInterval, clock_.Elapsed()); | 162 EXPECT_EQ(kTimeInterval, clock_.Elapsed()); |
217 | 163 |
218 AdvanceSystemTime(kTimeInterval); | 164 AdvanceSystemTime(kTimeInterval); |
219 EXPECT_EQ(kMaxTime, clock_.Elapsed()); | 165 EXPECT_EQ(kMaxTime, clock_.Elapsed()); |
220 | 166 |
221 AdvanceSystemTime(kTimeInterval); | 167 AdvanceSystemTime(kTimeInterval); |
222 EXPECT_EQ(kMaxTime, clock_.Elapsed()); | 168 EXPECT_EQ(kMaxTime, clock_.Elapsed()); |
223 } | 169 } |
224 | 170 |
225 TEST_F(ClockTest, SetMaxTime_MultipleTimes) { | 171 TEST_F(ClockTest, SetMaxTime_MultipleTimes) { |
226 const base::TimeDelta kZero; | 172 const base::TimeDelta kZero; |
227 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); | 173 const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4); |
| 174 const base::TimeDelta kMaxTime0 = base::TimeDelta::FromSeconds(120); |
228 const base::TimeDelta kMaxTime1 = base::TimeDelta::FromSeconds(6); | 175 const base::TimeDelta kMaxTime1 = base::TimeDelta::FromSeconds(6); |
229 const base::TimeDelta kMaxTime2 = base::TimeDelta::FromSeconds(12); | 176 const base::TimeDelta kMaxTime2 = base::TimeDelta::FromSeconds(12); |
230 | 177 |
231 EXPECT_EQ(kZero, clock_.Play()); | 178 EXPECT_EQ(kZero, clock_.Play()); |
232 clock_.SetMaxTime(clock_.Duration()); | 179 clock_.SetMaxTime(kMaxTime0); |
233 AdvanceSystemTime(kTimeInterval); | 180 AdvanceSystemTime(kTimeInterval); |
234 EXPECT_EQ(kTimeInterval, clock_.Elapsed()); | 181 EXPECT_EQ(kTimeInterval, clock_.Elapsed()); |
235 | 182 |
236 clock_.SetMaxTime(kMaxTime1); | 183 clock_.SetMaxTime(kMaxTime1); |
237 AdvanceSystemTime(kTimeInterval); | 184 AdvanceSystemTime(kTimeInterval); |
238 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 185 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); |
239 | 186 |
240 AdvanceSystemTime(kTimeInterval); | 187 AdvanceSystemTime(kTimeInterval); |
241 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 188 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); |
242 | 189 |
243 clock_.SetMaxTime(kMaxTime2); | 190 clock_.SetMaxTime(kMaxTime2); |
244 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); | 191 EXPECT_EQ(kMaxTime1, clock_.Elapsed()); |
245 | 192 |
246 AdvanceSystemTime(kTimeInterval); | 193 AdvanceSystemTime(kTimeInterval); |
247 EXPECT_EQ(kMaxTime1 + kTimeInterval, clock_.Elapsed()); | 194 EXPECT_EQ(kMaxTime1 + kTimeInterval, clock_.Elapsed()); |
248 | 195 |
249 AdvanceSystemTime(kTimeInterval); | 196 AdvanceSystemTime(kTimeInterval); |
250 EXPECT_EQ(kMaxTime2, clock_.Elapsed()); | 197 EXPECT_EQ(kMaxTime2, clock_.Elapsed()); |
251 } | 198 } |
252 | 199 |
253 } // namespace media | 200 } // namespace media |
OLD | NEW |