summaryrefslogtreecommitdiffstats
path: root/dom/media/mediasession/test/gtest/TestPositionState.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/mediasession/test/gtest/TestPositionState.cpp')
-rw-r--r--dom/media/mediasession/test/gtest/TestPositionState.cpp127
1 files changed, 127 insertions, 0 deletions
diff --git a/dom/media/mediasession/test/gtest/TestPositionState.cpp b/dom/media/mediasession/test/gtest/TestPositionState.cpp
new file mode 100644
index 0000000000..5fa38d0294
--- /dev/null
+++ b/dom/media/mediasession/test/gtest/TestPositionState.cpp
@@ -0,0 +1,127 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "gtest/gtest.h"
+#include "MediaSession.h"
+
+using namespace mozilla;
+using namespace mozilla::dom;
+
+struct CurrentPlaybackPositionFixture {
+ double mDuration = 0.0;
+ double mPlaybackRate = 0.0;
+ double mLastReportedTime = 0.0;
+
+ TimeDuration mDelta;
+ double mExpectedPosition = -1;
+};
+
+class CurrentPlaybackPositionTest
+ : public testing::TestWithParam<CurrentPlaybackPositionFixture> {};
+
+static const std::initializer_list<CurrentPlaybackPositionFixture> kFixtures = {
+ // position must be positive
+ {
+ 10.0,
+ 1.0,
+ 0.0,
+ TimeDuration::FromSeconds(-1.0),
+ 0.0,
+ },
+ // no time elapsed
+ {
+ 10.0,
+ 1.0,
+ 0.0,
+ TimeDuration::FromSeconds(0.0),
+ 0.0,
+ },
+ {
+ 10.0,
+ 1.0,
+ 0.0,
+ TimeDuration::FromSeconds(3.0),
+ 3.0,
+ },
+ {
+ 10.0,
+ 1.0,
+ 0.0,
+ TimeDuration::FromSeconds(10.0),
+ 10.0,
+ },
+ // position is clamped to the duration
+ {
+ 10.0,
+ 1.0,
+ 0.0,
+ TimeDuration::FromSeconds(20.0),
+ 10.0,
+ },
+ {
+ 10.0,
+ 1.0,
+ 5.0,
+ TimeDuration::FromSeconds(-1.0),
+ 4.0,
+ },
+ {
+ 10.0,
+ 1.0,
+ 5.0,
+ TimeDuration::FromSeconds(-6.0),
+ 0.0,
+ },
+ {
+ 10.0,
+ 1.0,
+ 5.0,
+ TimeDuration::FromSeconds(6.0),
+ 10.0,
+ },
+ // expected: 5s + 2 * 2s
+ {
+ 10.0,
+ 2.0,
+ 5.0,
+ TimeDuration::FromSeconds(2.0),
+ 9.0,
+ },
+ // expected: 5s + 0.5 * 2s
+ {
+ 10.0,
+ 0.5,
+ 5.0,
+ TimeDuration::FromSeconds(2.0),
+ 6.0,
+ },
+ {
+ 5.0,
+ 4.0,
+ 10.0,
+ TimeDuration::FromSeconds(20.0),
+ 5.0,
+ },
+ // empty media (0s)
+ {
+ 0.0,
+ 4.0,
+ 5.0,
+ TimeDuration::FromSeconds(20.0),
+ 0.0,
+ },
+};
+
+TEST_P(CurrentPlaybackPositionTest, Run) {
+ const auto& fixture = GetParam();
+ PositionState state(fixture.mDuration, fixture.mPlaybackRate,
+ fixture.mLastReportedTime, TimeStamp::Now());
+
+ ASSERT_DOUBLE_EQ(state.CurrentPlaybackPosition(state.mPositionUpdatedTime +
+ fixture.mDelta),
+ fixture.mExpectedPosition);
+}
+
+INSTANTIATE_TEST_SUITE_P(PositionState, CurrentPlaybackPositionTest,
+ testing::ValuesIn(kFixtures));