TestPositionState.cpp (3068B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #include "MediaSession.h" 6 #include "gtest/gtest.h" 7 8 using namespace mozilla; 9 using namespace mozilla::dom; 10 11 struct CurrentPlaybackPositionFixture { 12 double mDuration = 0.0; 13 double mPlaybackRate = 0.0; 14 double mLastReportedTime = 0.0; 15 16 TimeDuration mDelta; 17 double mExpectedPosition = -1; 18 }; 19 20 class CurrentPlaybackPositionTest 21 : public testing::TestWithParam<CurrentPlaybackPositionFixture> {}; 22 23 MOZ_RUNINIT static const std::initializer_list<CurrentPlaybackPositionFixture> 24 kFixtures = { 25 // position must be positive 26 { 27 10.0, 28 1.0, 29 0.0, 30 TimeDuration::FromSeconds(-1.0), 31 0.0, 32 }, 33 // no time elapsed 34 { 35 10.0, 36 1.0, 37 0.0, 38 TimeDuration::FromSeconds(0.0), 39 0.0, 40 }, 41 { 42 10.0, 43 1.0, 44 0.0, 45 TimeDuration::FromSeconds(3.0), 46 3.0, 47 }, 48 { 49 10.0, 50 1.0, 51 0.0, 52 TimeDuration::FromSeconds(10.0), 53 10.0, 54 }, 55 // position is clamped to the duration 56 { 57 10.0, 58 1.0, 59 0.0, 60 TimeDuration::FromSeconds(20.0), 61 10.0, 62 }, 63 { 64 10.0, 65 1.0, 66 5.0, 67 TimeDuration::FromSeconds(-1.0), 68 4.0, 69 }, 70 { 71 10.0, 72 1.0, 73 5.0, 74 TimeDuration::FromSeconds(-6.0), 75 0.0, 76 }, 77 { 78 10.0, 79 1.0, 80 5.0, 81 TimeDuration::FromSeconds(6.0), 82 10.0, 83 }, 84 // expected: 5s + 2 * 2s 85 { 86 10.0, 87 2.0, 88 5.0, 89 TimeDuration::FromSeconds(2.0), 90 9.0, 91 }, 92 // expected: 5s + 0.5 * 2s 93 { 94 10.0, 95 0.5, 96 5.0, 97 TimeDuration::FromSeconds(2.0), 98 6.0, 99 }, 100 { 101 5.0, 102 4.0, 103 10.0, 104 TimeDuration::FromSeconds(20.0), 105 5.0, 106 }, 107 // empty media (0s) 108 { 109 0.0, 110 4.0, 111 5.0, 112 TimeDuration::FromSeconds(20.0), 113 0.0, 114 }, 115 }; 116 117 TEST_P(CurrentPlaybackPositionTest, Run) { 118 const auto& fixture = GetParam(); 119 PositionState state(fixture.mDuration, fixture.mPlaybackRate, 120 fixture.mLastReportedTime, TimeStamp::Now()); 121 122 ASSERT_DOUBLE_EQ(state.CurrentPlaybackPosition(state.mPositionUpdatedTime + 123 fixture.mDelta), 124 fixture.mExpectedPosition); 125 } 126 127 INSTANTIATE_TEST_SUITE_P(PositionState, CurrentPlaybackPositionTest, 128 testing::ValuesIn(kFixtures));