1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
content / browser / media / flinging_renderer_unittest.cc [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/media/flinging_renderer.h"
#include "base/functional/callback_helpers.h"
#include "base/memory/ptr_util.h"
#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "base/version.h"
#include "media/base/media_controller.h"
#include "media/base/mock_filters.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::_;
using ::testing::StrictMock;
using ::testing::NiceMock;
namespace content {
class MockMediaController : public media::MediaController {
public:
MOCK_METHOD0(Play, void());
MOCK_METHOD0(Pause, void());
MOCK_METHOD1(SetMute, void(bool));
MOCK_METHOD1(SetVolume, void(float));
MOCK_METHOD1(Seek, void(base::TimeDelta));
};
class MockFlingingController : public media::FlingingController {
public:
explicit MockFlingingController(media::MediaController* media_controller)
: media_controller_(media_controller) {}
media::MediaController* GetMediaController() override {
return media_controller_;
}
MOCK_METHOD1(AddMediaStatusObserver, void(media::MediaStatusObserver*));
MOCK_METHOD1(RemoveMediaStatusObserver, void(media::MediaStatusObserver*));
MOCK_METHOD0(GetApproximateCurrentTime, base::TimeDelta());
private:
raw_ptr<media::MediaController> media_controller_;
};
class FlingingRendererTest : public testing::Test {
public:
FlingingRendererTest()
: media_controller_(new StrictMock<MockMediaController>()),
flinging_controller_(
new StrictMock<MockFlingingController>(media_controller_.get())) {
EXPECT_CALL(*flinging_controller_, AddMediaStatusObserver(_));
EXPECT_CALL(*flinging_controller_, RemoveMediaStatusObserver(_));
renderer_ = base::WrapUnique(new FlingingRenderer(
std::unique_ptr<media::FlingingController>(flinging_controller_),
mojo::NullRemote()));
renderer_->Initialize(nullptr, &renderer_client_, base::DoNothing());
}
protected:
NiceMock<media::MockRendererClient> renderer_client_;
std::unique_ptr<MockMediaController> media_controller_;
std::unique_ptr<FlingingRenderer> renderer_;
raw_ptr<StrictMock<MockFlingingController>> flinging_controller_;
};
TEST_F(FlingingRendererTest, StartPlayingFromTime) {
base::TimeDelta seek_time = base::Seconds(10);
EXPECT_CALL(*media_controller_, Seek(seek_time));
renderer_->StartPlayingFrom(seek_time);
}
TEST_F(FlingingRendererTest, StartPlayingFromBeginning) {
EXPECT_CALL(*media_controller_, Seek(base::TimeDelta()));
renderer_->StartPlayingFrom(base::TimeDelta());
}
TEST_F(FlingingRendererTest, SetPlaybackRate) {
double playback_rate = 1.0;
EXPECT_CALL(*media_controller_, Play());
renderer_->SetPlaybackRate(playback_rate);
}
TEST_F(FlingingRendererTest, SetPlaybackRateToZero) {
double playback_rate = 0.0;
EXPECT_CALL(*media_controller_, Pause());
renderer_->SetPlaybackRate(playback_rate);
}
// Setting the volume to a positive value should not change the mute state.
TEST_F(FlingingRendererTest, SetVolume) {
float volume = 0.5;
EXPECT_CALL(*media_controller_, SetVolume(volume));
EXPECT_CALL(*media_controller_, SetMute(_)).Times(0);
renderer_->SetVolume(volume);
}
// Setting the volume to 0 should not set the mute state.
TEST_F(FlingingRendererTest, SetVolumeToZero) {
float volume = 0;
EXPECT_CALL(*media_controller_, SetVolume(volume));
EXPECT_CALL(*media_controller_, SetMute(_)).Times(0);
renderer_->SetVolume(volume);
}
} // namespace content