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

Side by Side Diff: chrome/browser/media/router/mojo/media_route_controller_unittest.cc

Issue 2727123002: [Media Router] Custom Controls 1 - Add MediaStatus, MediaRouteController, and mojo interfaces (Closed)
Patch Set: . Created 3 years, 9 months 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
OLDNEW
(Empty)
1 // Copyright 2017 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 "chrome/browser/media/router/mojo/media_route_controller.h"
6
7 #include <string>
8 #include <utility>
9
10 #include "chrome/browser/media/router/media_route_status_observer.h"
11 #include "chrome/browser/media/router/mojo/media_router_mojo_test.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using ::testing::_;
16 using ::testing::Invoke;
17
18 namespace media_router {
19
20 class MockMediaController : public mojom::MediaController {
mark a. foltz 2017/03/06 20:06:20 Can these mocks be added to the library in mock_me
takumif 2017/03/08 04:24:03 I don't think so, since mock_media_router.h is for
21 public:
22 MOCK_METHOD0(Play, void());
23 MOCK_METHOD0(Pause, void());
24 MOCK_METHOD1(SetMute, void(bool mute));
25 MOCK_METHOD1(SetVolume, void(float volume));
26 MOCK_METHOD1(Seek, void(uint32_t time));
27 };
28
29 class MockMediaRouteStatusObserver : public MediaRouteStatusObserver {
30 public:
31 MOCK_METHOD1(OnMediaRouteStatusUpdated, void(const MediaStatus& status));
32 };
33
34 class MediaRouteControllerUnitTest : public ::testing::Test {
35 public:
36 MediaRouteControllerUnitTest() {}
37 ~MediaRouteControllerUnitTest() override {}
38
39 void SetUp() override {
40 mock_provider_ = base::MakeUnique<MockMediaRouteProvider>();
41
42 EXPECT_CALL(*mock_provider_, CreateMediaRouteControllerInternal(_, _, _))
43 .WillOnce(Invoke(
44 this, &MediaRouteControllerUnitTest::SetMediaRouteController));
45 controller_ = base::MakeUnique<MediaRouteController>(
46 "routeId", mock_provider_.get(),
47 base::Bind(&MediaRouteControllerUnitTest::DestroyController,
48 base::Unretained(this)));
49 }
50
51 void DestroyController() {
52 controller_.reset();
53 OnDestroyController();
54 }
55 MOCK_METHOD0(OnDestroyController, void());
56
57 void SetMediaRouteController(
58 const std::string& route_id,
59 mojom::MediaControllerRequest& media_controller,
60 const mojom::MediaRouteProvider::CreateMediaRouteControllerCallback&
61 callback) {
62 mock_media_controller_ = base::MakeUnique<MockMediaController>();
63 media_controller_binding_ =
64 base::MakeUnique<mojo::Binding<mojom::MediaController>>(
65 mock_media_controller_.get(), std::move(media_controller));
66 callback.Run(true);
67 }
68
69 protected:
70 std::unique_ptr<MediaRouteController> controller_;
mark a. foltz 2017/03/06 20:06:20 Declare members in the order they are initialized.
takumif 2017/03/08 04:24:03 Done.
71 std::unique_ptr<MockMediaRouteProvider> mock_provider_;
mark a. foltz 2017/03/06 20:06:19 Can this just be declared as a plain member?
takumif 2017/03/08 04:24:03 Removed.
72 std::unique_ptr<MockMediaController> mock_media_controller_;
73 std::unique_ptr<mojo::Binding<mojom::MediaController>>
74 media_controller_binding_;
75
76 content::TestBrowserThreadBundle test_thread_bundle_;
77
78 private:
79 DISALLOW_COPY_AND_ASSIGN(MediaRouteControllerUnitTest);
80 };
81
82 TEST_F(MediaRouteControllerUnitTest, ForwardControllerCommands) {
83 const float volume = 0.5;
84 const uint32_t time = 120000;
85
86 EXPECT_CALL(*mock_media_controller_, Play());
87 controller_->Play();
88 EXPECT_CALL(*mock_media_controller_, Pause());
89 controller_->Pause();
90 EXPECT_CALL(*mock_media_controller_, SetMute(true));
91 controller_->SetMute(true);
92 EXPECT_CALL(*mock_media_controller_, SetVolume(volume));
93 controller_->SetVolume(volume);
94 EXPECT_CALL(*mock_media_controller_, Seek(time));
95 controller_->Seek(time);
96 }
97
98 TEST_F(MediaRouteControllerUnitTest, NotifyMediaRouteStatusObservers) {
99 MockMediaRouteStatusObserver observer1;
mark a. foltz 2017/03/06 20:06:19 Nit: Declare these as StrictMock<> to enforce stri
takumif 2017/03/08 04:24:03 Done.
100 MockMediaRouteStatusObserver observer2;
101 MockMediaRouteStatusObserver observer3;
102
103 MediaStatus status;
104 status.title = "test media status";
105
106 controller_->AddObserver(&observer1);
107 controller_->AddObserver(&observer2);
108
109 EXPECT_CALL(observer1, OnMediaRouteStatusUpdated(status)).Times(1);
110 EXPECT_CALL(observer2, OnMediaRouteStatusUpdated(status)).Times(1);
111 EXPECT_CALL(observer3, OnMediaRouteStatusUpdated(status)).Times(0);
112 controller_->OnMediaStatusUpdated(status);
113
114 controller_->RemoveObserver(&observer1);
115 controller_->AddObserver(&observer3);
116
117 EXPECT_CALL(observer1, OnMediaRouteStatusUpdated(status)).Times(0);
118 EXPECT_CALL(observer2, OnMediaRouteStatusUpdated(status)).Times(1);
119 EXPECT_CALL(observer3, OnMediaRouteStatusUpdated(status)).Times(1);
120 controller_->OnMediaStatusUpdated(status);
121 }
122
123 TEST_F(MediaRouteControllerUnitTest, DestroyControllerOnDisconnect) {
124 // OnDestroyController() should be called when the connection to
125 // |mock_media_controller_| is invalidated.
126 EXPECT_CALL(*this, OnDestroyController()).Times(1);
127 media_controller_binding_.reset();
128 }
129
130 TEST_F(MediaRouteControllerUnitTest, DestroyControllerOnNoObservers) {
131 MockMediaRouteStatusObserver observer1;
132 MockMediaRouteStatusObserver observer2;
133 controller_->AddObserver(&observer1);
134 controller_->AddObserver(&observer2);
135
136 EXPECT_CALL(*this, OnDestroyController()).Times(0);
137 controller_->RemoveObserver(&observer1);
138
139 // OnDestroyController() should be called when |controller_| no longer has any
140 // observers.
141 EXPECT_CALL(*this, OnDestroyController()).Times(1);
142 controller_->RemoveObserver(&observer2);
143 }
144
145 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698