tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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