Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp

Issue 1514633006: Add HTMLVideoElementTest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/core.gypi ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "core/html/HTMLVideoElement.h"
7
8 #include "core/dom/Document.h"
9 #include "core/loader/EmptyClients.h"
10 #include "core/page/NetworkStateNotifier.h"
11 #include "core/testing/DummyPageHolder.h"
12 #include "platform/UserGestureIndicator.h"
13 #include "platform/testing/UnitTestHelpers.h"
14 #include "public/platform/WebMediaPlayer.h"
15 #include "public/platform/WebSize.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 namespace blink {
20
21 namespace {
22
23 class EmptyWebMediaPlayer : public WebMediaPlayer {
sandersd (OOO until July 31) 2015/12/17 19:05:56 It seems like this should be in a separate file, b
philipj_slow 2015/12/18 15:02:27 Not that I'm aware of, until now we haven't had an
mlamouri (slow - plz ping) 2016/01/05 15:00:07 What about doing something similar to: https://cod
24 public:
25 void load(LoadType, const WebURL&, CORSMode) override { };
26 void play() override { };
27 void pause() override { };
28 bool supportsSave() const override { return false; };
29 void seek(double seconds) override { };
30 void setRate(double) override { };
31 void setVolume(double) override { };
32 WebTimeRanges buffered() const override { return WebTimeRanges(); };
33 WebTimeRanges seekable() const override { return WebTimeRanges(); };
34 void setSinkId(const WebString& sinkId, const WebSecurityOrigin&, WebSetSink IdCallbacks*) override { };
35 bool hasVideo() const override { return false; };
36 bool hasAudio() const override { return false; };
37 WebSize naturalSize() const override { return WebSize(0, 0); };
38 bool paused() const override { return false; };
39 bool seeking() const override { return false; };
40 double duration() const override { return 0.0; };
41 double currentTime() const override { return 0.0; };
42 NetworkState networkState() const override { return NetworkStateEmpty; };
43 ReadyState readyState() const override { return ReadyStateHaveNothing; };
44 bool didLoadingProgress() override { return false; };
45 bool hasSingleSecurityOrigin() const override { return true; };
46 bool didPassCORSAccessCheck() const override { return true; };
47 double mediaTimeForTimeValue(double timeValue) const override { return timeV alue; };
48 unsigned decodedFrameCount() const override { return 0; };
49 unsigned droppedFrameCount() const override { return 0; };
50 unsigned audioDecodedByteCount() const override { return 0; };
51 unsigned videoDecodedByteCount() const override { return 0; };
52 void paint(WebCanvas*, const WebRect&, unsigned char alpha, SkXfermode::Mode ) override { };
53 };
54
55 class MockWebMediaPlayer : public EmptyWebMediaPlayer {
56 public:
57 MOCK_METHOD1(setBufferingStrategy, void(BufferingStrategy));
58 };
59
60 class StubFrameLoaderClient : public EmptyFrameLoaderClient {
61 public:
62 static PassOwnPtrWillBeRawPtr<StubFrameLoaderClient> create()
63 {
64 return adoptPtrWillBeNoop(new StubFrameLoaderClient);
65 }
66
67 PassOwnPtr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const Web URL&, WebMediaPlayerClient*) override
68 {
69 return adoptPtr(new MockWebMediaPlayer);
70 }
71 };
72
73 } // namespace
74
75 class HTMLVideoElementTest : public ::testing::Test {
sandersd (OOO until July 31) 2015/12/17 19:05:56 The test cases here are better on HTMLMediaElement
philipj_slow 2015/12/18 15:02:27 Just HTMLVideoElementTest seems fine, if unit test
76 protected:
77 HTMLVideoElementTest()
78 : m_dummyPageHolder(DummyPageHolder::create(IntSize(640, 360), nullptr, StubFrameLoaderClient::create()))
79 {
80 // TODO(sandersd): This should be done by a settings initializer.
81 networkStateNotifier().setWebConnection(WebConnectionTypeWifi, 54.0);
82 m_video = HTMLVideoElement::create(m_dummyPageHolder->document());
83 }
84
85 void setSrc(const AtomicString& url)
86 {
87 m_video->setSrc(url);
88 testing::runPendingTasks();
89 }
90
91 MockWebMediaPlayer* webMediaPlayer()
92 {
93 return static_cast<MockWebMediaPlayer*>(m_video->webMediaPlayer());
94 }
95
96 OwnPtr<DummyPageHolder> m_dummyPageHolder;
97 RefPtrWillBeMember<HTMLVideoElement> m_video;
sof 2016/01/05 18:51:48 RefPtrWillBePersistent<>
sandersd (OOO until July 31) 2016/01/08 00:02:11 Done.
98 };
99
100 TEST_F(HTMLVideoElementTest, setBufferingStrategy_NonUserPause)
101 {
102 setSrc("http://foo.bar/");
103 MockWebMediaPlayer* player = webMediaPlayer();
104 ASSERT_TRUE(player);
105
106 // On play, the strategy is set to normal.
107 EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy: :Normal));
108 m_video->play();
109 ::testing::Mock::VerifyAndClearExpectations(player);
110
111 // On a non-user pause, the strategy is not changed.
112 m_video->pause();
113 ::testing::Mock::VerifyAndClearExpectations(player);
114
115 // On play, the strategy is set to normal.
116 EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy: :Normal));
117 m_video->play();
118 ::testing::Mock::VerifyAndClearExpectations(player);
119 }
120
121 TEST_F(HTMLVideoElementTest, setBufferingStrategy_UserPause)
122 {
123 setSrc("http://foo.bar/");
124 MockWebMediaPlayer* player = webMediaPlayer();
125 ASSERT_TRUE(player);
126
127 // On play, the strategy is set to normal.
128 EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy: :Normal));
129 video->play();
130 ::testing::Mock::VerifyAndClearExpectations(player);
131
132 // On a user pause, the strategy is set to aggressive.
133 EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy: :Aggressive));
134 {
135 UserGestureIndicator gesture(DefinitelyProcessingUserGesture);
136 video->pause();
137 }
138 ::testing::Mock::VerifyAndClearExpectations(player);
139
140 // On play, the strategy is set to normal.
141 EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy: :Normal));
142 video->play();
143 ::testing::Mock::VerifyAndClearExpectations(player);
144 }
145
146 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/core.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698