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

Side by Side Diff: media/midi/midi_manager_unittest.cc

Issue 269543028: Web MIDI: make input_ports_ and output_ports_ members private (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « media/midi/midi_manager.h ('k') | media/midi/midi_manager_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/midi/midi_manager.h" 5 #include "media/midi/midi_manager.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 19 matching lines...) Expand all
30 uint32 port_index, 30 uint32 port_index,
31 const std::vector<uint8>& data, 31 const std::vector<uint8>& data,
32 double timestamp) OVERRIDE {} 32 double timestamp) OVERRIDE {}
33 33
34 // Utility functions for testing. 34 // Utility functions for testing.
35 void CallCompleteInitialization(MidiResult result) { 35 void CallCompleteInitialization(MidiResult result) {
36 CompleteInitialization(result); 36 CompleteInitialization(result);
37 } 37 }
38 38
39 size_t GetClientCount() const { 39 size_t GetClientCount() const {
40 return get_clients_size_for_testing(); 40 return clients_size_for_testing();
41 } 41 }
42 42
43 size_t GetPendingClientCount() const { 43 size_t GetPendingClientCount() const {
44 return get_pending_clients_size_for_testing(); 44 return pending_clients_size_for_testing();
45 } 45 }
46 46
47 bool start_initialization_is_called_; 47 bool start_initialization_is_called_;
48 48
49 private: 49 private:
50 DISALLOW_COPY_AND_ASSIGN(FakeMidiManager); 50 DISALLOW_COPY_AND_ASSIGN(FakeMidiManager);
51 }; 51 };
52 52
53 class FakeMidiManagerClient : public MidiManagerClient { 53 class FakeMidiManagerClient : public MidiManagerClient {
54 public: 54 public:
55 explicit FakeMidiManagerClient(int client_id) 55 explicit FakeMidiManagerClient(int client_id)
56 : client_id_(client_id), 56 : client_id_(client_id),
57 result_(MIDI_NOT_SUPPORTED), 57 result_(MIDI_NOT_SUPPORTED),
58 wait_for_result_(true) {} 58 wait_for_result_(true) {}
59 virtual ~FakeMidiManagerClient() {} 59 virtual ~FakeMidiManagerClient() {}
60 60
61 // MidiManagerClient implementation. 61 // MidiManagerClient implementation.
62 virtual void CompleteStartSession(int client_id, MidiResult result) OVERRIDE { 62 virtual void CompleteStartSession(int client_id, MidiResult result) OVERRIDE {
63 EXPECT_TRUE(wait_for_result_); 63 EXPECT_TRUE(wait_for_result_);
64 CHECK_EQ(client_id_, client_id); 64 CHECK_EQ(client_id_, client_id);
65 result_ = result; 65 result_ = result;
66 wait_for_result_ = false; 66 wait_for_result_ = false;
67 } 67 }
68 68
69 virtual void ReceiveMidiData(uint32 port_index, const uint8* data, 69 virtual void ReceiveMidiData(uint32 port_index, const uint8* data,
70 size_t size, double timestamp) OVERRIDE {} 70 size_t size, double timestamp) OVERRIDE {}
71 virtual void AccumulateMidiBytesSent(size_t size) OVERRIDE {} 71 virtual void AccumulateMidiBytesSent(size_t size) OVERRIDE {}
72 72
73 int get_client_id() const { return client_id_; } 73 int client_id() const { return client_id_; }
74 MidiResult get_result() const { return result_; } 74 MidiResult result() const { return result_; }
75 75
76 MidiResult WaitForResult() { 76 MidiResult WaitForResult() {
77 base::RunLoop run_loop; 77 base::RunLoop run_loop;
78 // CompleteStartSession() is called inside the message loop on the same 78 // CompleteStartSession() is called inside the message loop on the same
79 // thread. Protection for |wait_for_result_| is not needed. 79 // thread. Protection for |wait_for_result_| is not needed.
80 while (wait_for_result_) 80 while (wait_for_result_)
81 run_loop.RunUntilIdle(); 81 run_loop.RunUntilIdle();
82 return get_result(); 82 return result();
83 } 83 }
84 84
85 private: 85 private:
86 int client_id_; 86 int client_id_;
87 MidiResult result_; 87 MidiResult result_;
88 bool wait_for_result_; 88 bool wait_for_result_;
89 89
90 DISALLOW_COPY_AND_ASSIGN(FakeMidiManagerClient); 90 DISALLOW_COPY_AND_ASSIGN(FakeMidiManagerClient);
91 }; 91 };
92 92
93 class MidiManagerTest : public ::testing::Test { 93 class MidiManagerTest : public ::testing::Test {
94 public: 94 public:
95 MidiManagerTest() 95 MidiManagerTest()
96 : manager_(new FakeMidiManager), 96 : manager_(new FakeMidiManager),
97 message_loop_(new base::MessageLoop) {} 97 message_loop_(new base::MessageLoop) {}
98 virtual ~MidiManagerTest() {} 98 virtual ~MidiManagerTest() {}
99 99
100 protected: 100 protected:
101 void StartTheFirstSession(FakeMidiManagerClient* client) { 101 void StartTheFirstSession(FakeMidiManagerClient* client) {
102 EXPECT_FALSE(manager_->start_initialization_is_called_); 102 EXPECT_FALSE(manager_->start_initialization_is_called_);
103 EXPECT_EQ(0U, manager_->GetClientCount()); 103 EXPECT_EQ(0U, manager_->GetClientCount());
104 EXPECT_EQ(0U, manager_->GetPendingClientCount()); 104 EXPECT_EQ(0U, manager_->GetPendingClientCount());
105 manager_->StartSession(client, client->get_client_id()); 105 manager_->StartSession(client, client->client_id());
106 EXPECT_EQ(0U, manager_->GetClientCount()); 106 EXPECT_EQ(0U, manager_->GetClientCount());
107 EXPECT_EQ(1U, manager_->GetPendingClientCount()); 107 EXPECT_EQ(1U, manager_->GetPendingClientCount());
108 EXPECT_TRUE(manager_->start_initialization_is_called_); 108 EXPECT_TRUE(manager_->start_initialization_is_called_);
109 EXPECT_EQ(0U, manager_->GetClientCount()); 109 EXPECT_EQ(0U, manager_->GetClientCount());
110 EXPECT_EQ(1U, manager_->GetPendingClientCount()); 110 EXPECT_EQ(1U, manager_->GetPendingClientCount());
111 EXPECT_TRUE(manager_->start_initialization_is_called_); 111 EXPECT_TRUE(manager_->start_initialization_is_called_);
112 } 112 }
113 113
114 void StartTheNthSession(FakeMidiManagerClient* client, size_t nth) { 114 void StartTheNthSession(FakeMidiManagerClient* client, size_t nth) {
115 EXPECT_EQ(nth != 1, manager_->start_initialization_is_called_); 115 EXPECT_EQ(nth != 1, manager_->start_initialization_is_called_);
116 EXPECT_EQ(0U, manager_->GetClientCount()); 116 EXPECT_EQ(0U, manager_->GetClientCount());
117 EXPECT_EQ(nth - 1, manager_->GetPendingClientCount()); 117 EXPECT_EQ(nth - 1, manager_->GetPendingClientCount());
118 118
119 // StartInitialization() should not be called for the second and later 119 // StartInitialization() should not be called for the second and later
120 // sessions. 120 // sessions.
121 manager_->start_initialization_is_called_ = false; 121 manager_->start_initialization_is_called_ = false;
122 manager_->StartSession(client, client->get_client_id()); 122 manager_->StartSession(client, client->client_id());
123 EXPECT_EQ(nth == 1, manager_->start_initialization_is_called_); 123 EXPECT_EQ(nth == 1, manager_->start_initialization_is_called_);
124 manager_->start_initialization_is_called_ = true; 124 manager_->start_initialization_is_called_ = true;
125 } 125 }
126 126
127 void EndSession(FakeMidiManagerClient* client, size_t before, size_t after) { 127 void EndSession(FakeMidiManagerClient* client, size_t before, size_t after) {
128 EXPECT_EQ(before, manager_->GetClientCount()); 128 EXPECT_EQ(before, manager_->GetClientCount());
129 manager_->EndSession(client); 129 manager_->EndSession(client);
130 EXPECT_EQ(after, manager_->GetClientCount()); 130 EXPECT_EQ(after, manager_->GetClientCount());
131 } 131 }
132 132
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 for (size_t i = 0; i < MidiManager::kMaxPendingClientCount; ++i) { 190 for (size_t i = 0; i < MidiManager::kMaxPendingClientCount; ++i) {
191 many_existing_clients[i] = new FakeMidiManagerClient(i); 191 many_existing_clients[i] = new FakeMidiManagerClient(i);
192 StartTheNthSession(many_existing_clients[i], i + 1); 192 StartTheNthSession(many_existing_clients[i], i + 1);
193 } 193 }
194 194
195 // Push the last client that should be rejected for too many pending requests. 195 // Push the last client that should be rejected for too many pending requests.
196 scoped_ptr<FakeMidiManagerClient> additional_client( 196 scoped_ptr<FakeMidiManagerClient> additional_client(
197 new FakeMidiManagerClient(MidiManager::kMaxPendingClientCount)); 197 new FakeMidiManagerClient(MidiManager::kMaxPendingClientCount));
198 manager_->start_initialization_is_called_ = false; 198 manager_->start_initialization_is_called_ = false;
199 manager_->StartSession(additional_client.get(), 199 manager_->StartSession(additional_client.get(),
200 additional_client->get_client_id()); 200 additional_client->client_id());
201 EXPECT_FALSE(manager_->start_initialization_is_called_); 201 EXPECT_FALSE(manager_->start_initialization_is_called_);
202 EXPECT_EQ(MIDI_INITIALIZATION_ERROR, additional_client->get_result()); 202 EXPECT_EQ(MIDI_INITIALIZATION_ERROR, additional_client->result());
203 203
204 // Other clients still should not receive a result. 204 // Other clients still should not receive a result.
205 RunLoopUntilIdle(); 205 RunLoopUntilIdle();
206 for (size_t i = 0; i < many_existing_clients.size(); ++i) 206 for (size_t i = 0; i < many_existing_clients.size(); ++i)
207 EXPECT_EQ(MIDI_NOT_SUPPORTED, many_existing_clients[i]->get_result()); 207 EXPECT_EQ(MIDI_NOT_SUPPORTED, many_existing_clients[i]->result());
208 208
209 // The result MIDI_OK should be distributed to other clients. 209 // The result MIDI_OK should be distributed to other clients.
210 CompleteInitialization(MIDI_OK); 210 CompleteInitialization(MIDI_OK);
211 for (size_t i = 0; i < many_existing_clients.size(); ++i) 211 for (size_t i = 0; i < many_existing_clients.size(); ++i)
212 EXPECT_EQ(MIDI_OK, many_existing_clients[i]->WaitForResult()); 212 EXPECT_EQ(MIDI_OK, many_existing_clients[i]->WaitForResult());
213 213
214 // Close all successful sessions in FIFO order. 214 // Close all successful sessions in FIFO order.
215 size_t sessions = many_existing_clients.size(); 215 size_t sessions = many_existing_clients.size();
216 for (size_t i = 0; i < many_existing_clients.size(); ++i, --sessions) 216 for (size_t i = 0; i < many_existing_clients.size(); ++i, --sessions)
217 EndSession(many_existing_clients[i], sessions, sessions - 1); 217 EndSession(many_existing_clients[i], sessions, sessions - 1);
218 } 218 }
219 219
220 TEST_F(MidiManagerTest, CreateMidiManager) { 220 TEST_F(MidiManagerTest, CreateMidiManager) {
221 scoped_ptr<FakeMidiManagerClient> client; 221 scoped_ptr<FakeMidiManagerClient> client;
222 client.reset(new FakeMidiManagerClient(0)); 222 client.reset(new FakeMidiManagerClient(0));
223 223
224 scoped_ptr<MidiManager> manager(MidiManager::Create()); 224 scoped_ptr<MidiManager> manager(MidiManager::Create());
225 manager->StartSession(client.get(), client->get_client_id()); 225 manager->StartSession(client.get(), client->client_id());
226 // This #ifdef needs to be identical to the one in media/midi/midi_manager.cc 226
227 // This #ifdef needs to be identical to the one in media/midi/midi_manager.cc.
228 // Do not change the condition for disabling this test.
227 #if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(USE_ALSA) && \ 229 #if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(USE_ALSA) && \
228 !defined(OS_ANDROID) && !defined(OS_CHROMEOS) 230 !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
229 EXPECT_EQ(MIDI_NOT_SUPPORTED, client->WaitForResult()); 231 EXPECT_EQ(MIDI_NOT_SUPPORTED, client->WaitForResult());
230 #else 232 #else
231 EXPECT_EQ(MIDI_OK, client->WaitForResult()); 233 EXPECT_EQ(MIDI_OK, client->WaitForResult());
232 #endif 234 #endif
233 } 235 }
234 236
235 } // namespace 237 } // namespace
236 238
237 } // namespace media 239 } // namespace media
OLDNEW
« no previous file with comments | « media/midi/midi_manager.h ('k') | media/midi/midi_manager_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698