| 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 |