OLD | NEW |
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_usb.h" | 5 #include "media/midi/midi_manager_usb.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | |
10 #include <string> | 9 #include <string> |
| 10 #include <utility> |
11 | 11 |
12 #include "base/macros.h" | 12 #include "base/macros.h" |
13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
15 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
16 #include "base/time/time.h" | 16 #include "base/time/time.h" |
17 #include "media/midi/usb_midi_device.h" | 17 #include "media/midi/usb_midi_device.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
19 | 19 |
20 namespace media { | 20 namespace media { |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 Callback callback_; | 160 Callback callback_; |
161 | 161 |
162 private: | 162 private: |
163 DISALLOW_COPY_AND_ASSIGN(TestUsbMidiDeviceFactory); | 163 DISALLOW_COPY_AND_ASSIGN(TestUsbMidiDeviceFactory); |
164 }; | 164 }; |
165 | 165 |
166 class MidiManagerUsbForTesting : public MidiManagerUsb { | 166 class MidiManagerUsbForTesting : public MidiManagerUsb { |
167 public: | 167 public: |
168 explicit MidiManagerUsbForTesting( | 168 explicit MidiManagerUsbForTesting( |
169 scoped_ptr<UsbMidiDevice::Factory> device_factory) | 169 scoped_ptr<UsbMidiDevice::Factory> device_factory) |
170 : MidiManagerUsb(device_factory.Pass()) {} | 170 : MidiManagerUsb(std::move(device_factory)) {} |
171 ~MidiManagerUsbForTesting() override {} | 171 ~MidiManagerUsbForTesting() override {} |
172 | 172 |
173 void CallCompleteInitialization(Result result) { | 173 void CallCompleteInitialization(Result result) { |
174 CompleteInitialization(result); | 174 CompleteInitialization(result); |
175 base::RunLoop run_loop; | 175 base::RunLoop run_loop; |
176 run_loop.RunUntilIdle(); | 176 run_loop.RunUntilIdle(); |
177 } | 177 } |
178 | 178 |
179 private: | 179 private: |
180 DISALLOW_COPY_AND_ASSIGN(MidiManagerUsbForTesting); | 180 DISALLOW_COPY_AND_ASSIGN(MidiManagerUsbForTesting); |
181 }; | 181 }; |
182 | 182 |
183 class MidiManagerUsbTest : public ::testing::Test { | 183 class MidiManagerUsbTest : public ::testing::Test { |
184 public: | 184 public: |
185 MidiManagerUsbTest() : message_loop_(new base::MessageLoop) { | 185 MidiManagerUsbTest() : message_loop_(new base::MessageLoop) { |
186 scoped_ptr<TestUsbMidiDeviceFactory> factory(new TestUsbMidiDeviceFactory); | 186 scoped_ptr<TestUsbMidiDeviceFactory> factory(new TestUsbMidiDeviceFactory); |
187 factory_ = factory.get(); | 187 factory_ = factory.get(); |
188 manager_.reset(new MidiManagerUsbForTesting(factory.Pass())); | 188 manager_.reset(new MidiManagerUsbForTesting(std::move(factory))); |
189 } | 189 } |
190 ~MidiManagerUsbTest() override { | 190 ~MidiManagerUsbTest() override { |
191 manager_->Shutdown(); | 191 manager_->Shutdown(); |
192 base::RunLoop run_loop; | 192 base::RunLoop run_loop; |
193 run_loop.RunUntilIdle(); | 193 run_loop.RunUntilIdle(); |
194 | 194 |
195 std::string leftover_logs = logger_.TakeLog(); | 195 std::string leftover_logs = logger_.TakeLog(); |
196 if (!leftover_logs.empty()) { | 196 if (!leftover_logs.empty()) { |
197 ADD_FAILURE() << "Log should be empty: " << leftover_logs; | 197 ADD_FAILURE() << "Log should be empty: " << leftover_logs; |
198 } | 198 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, | 255 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, |
256 0x01, 0x01, 0x07, | 256 0x01, 0x01, 0x07, |
257 }; | 257 }; |
258 device->SetDescriptors(ToVector(descriptors)); | 258 device->SetDescriptors(ToVector(descriptors)); |
259 device->SetManufacturer("vendor1"); | 259 device->SetManufacturer("vendor1"); |
260 device->SetProductName("device1"); | 260 device->SetProductName("device1"); |
261 device->SetDeviceVersion("1.02"); | 261 device->SetDeviceVersion("1.02"); |
262 | 262 |
263 Initialize(); | 263 Initialize(); |
264 ScopedVector<UsbMidiDevice> devices; | 264 ScopedVector<UsbMidiDevice> devices; |
265 devices.push_back(device.Pass()); | 265 devices.push_back(std::move(device)); |
266 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 266 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
267 RunCallbackUntilCallbackInvoked(true, &devices); | 267 RunCallbackUntilCallbackInvoked(true, &devices); |
268 EXPECT_EQ(Result::OK, GetInitializationResult()); | 268 EXPECT_EQ(Result::OK, GetInitializationResult()); |
269 | 269 |
270 ASSERT_EQ(1u, input_ports().size()); | 270 ASSERT_EQ(1u, input_ports().size()); |
271 EXPECT_EQ("usb:port-0-2", input_ports()[0].id); | 271 EXPECT_EQ("usb:port-0-2", input_ports()[0].id); |
272 EXPECT_EQ("vendor1", input_ports()[0].manufacturer); | 272 EXPECT_EQ("vendor1", input_ports()[0].manufacturer); |
273 EXPECT_EQ("device1", input_ports()[0].name); | 273 EXPECT_EQ("device1", input_ports()[0].name); |
274 EXPECT_EQ("1.02", input_ports()[0].version); | 274 EXPECT_EQ("1.02", input_ports()[0].version); |
275 | 275 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 device1->SetManufacturer("vendor1"); | 315 device1->SetManufacturer("vendor1"); |
316 device1->SetProductName("device1"); | 316 device1->SetProductName("device1"); |
317 device1->SetDeviceVersion("1.02"); | 317 device1->SetDeviceVersion("1.02"); |
318 device2->SetDescriptors(ToVector(descriptors)); | 318 device2->SetDescriptors(ToVector(descriptors)); |
319 device2->SetManufacturer("vendor2"); | 319 device2->SetManufacturer("vendor2"); |
320 device2->SetProductName("device2"); | 320 device2->SetProductName("device2"); |
321 device2->SetDeviceVersion("98.76"); | 321 device2->SetDeviceVersion("98.76"); |
322 | 322 |
323 Initialize(); | 323 Initialize(); |
324 ScopedVector<UsbMidiDevice> devices; | 324 ScopedVector<UsbMidiDevice> devices; |
325 devices.push_back(device1.Pass()); | 325 devices.push_back(std::move(device1)); |
326 devices.push_back(device2.Pass()); | 326 devices.push_back(std::move(device2)); |
327 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 327 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
328 RunCallbackUntilCallbackInvoked(true, &devices); | 328 RunCallbackUntilCallbackInvoked(true, &devices); |
329 EXPECT_EQ(Result::OK, GetInitializationResult()); | 329 EXPECT_EQ(Result::OK, GetInitializationResult()); |
330 | 330 |
331 ASSERT_EQ(2u, input_ports().size()); | 331 ASSERT_EQ(2u, input_ports().size()); |
332 EXPECT_EQ("usb:port-0-2", input_ports()[0].id); | 332 EXPECT_EQ("usb:port-0-2", input_ports()[0].id); |
333 EXPECT_EQ("vendor1", input_ports()[0].manufacturer); | 333 EXPECT_EQ("vendor1", input_ports()[0].manufacturer); |
334 EXPECT_EQ("device1", input_ports()[0].name); | 334 EXPECT_EQ("device1", input_ports()[0].name); |
335 EXPECT_EQ("1.02", input_ports()[0].version); | 335 EXPECT_EQ("1.02", input_ports()[0].version); |
336 EXPECT_EQ("usb:port-1-2", input_ports()[1].id); | 336 EXPECT_EQ("usb:port-1-2", input_ports()[1].id); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 EXPECT_EQ(Result::INITIALIZATION_ERROR, GetInitializationResult()); | 378 EXPECT_EQ(Result::INITIALIZATION_ERROR, GetInitializationResult()); |
379 } | 379 } |
380 | 380 |
381 TEST_F(MidiManagerUsbTest, InitializeFailBecauseOfInvalidDescriptors) { | 381 TEST_F(MidiManagerUsbTest, InitializeFailBecauseOfInvalidDescriptors) { |
382 scoped_ptr<FakeUsbMidiDevice> device(new FakeUsbMidiDevice(&logger_)); | 382 scoped_ptr<FakeUsbMidiDevice> device(new FakeUsbMidiDevice(&logger_)); |
383 uint8_t descriptors[] = {0x04}; | 383 uint8_t descriptors[] = {0x04}; |
384 device->SetDescriptors(ToVector(descriptors)); | 384 device->SetDescriptors(ToVector(descriptors)); |
385 | 385 |
386 Initialize(); | 386 Initialize(); |
387 ScopedVector<UsbMidiDevice> devices; | 387 ScopedVector<UsbMidiDevice> devices; |
388 devices.push_back(device.Pass()); | 388 devices.push_back(std::move(device)); |
389 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 389 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
390 RunCallbackUntilCallbackInvoked(true, &devices); | 390 RunCallbackUntilCallbackInvoked(true, &devices); |
391 EXPECT_EQ(Result::INITIALIZATION_ERROR, GetInitializationResult()); | 391 EXPECT_EQ(Result::INITIALIZATION_ERROR, GetInitializationResult()); |
392 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); | 392 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); |
393 } | 393 } |
394 | 394 |
395 TEST_F(MidiManagerUsbTest, Send) { | 395 TEST_F(MidiManagerUsbTest, Send) { |
396 Initialize(); | 396 Initialize(); |
397 scoped_ptr<FakeUsbMidiDevice> device(new FakeUsbMidiDevice(&logger_)); | 397 scoped_ptr<FakeUsbMidiDevice> device(new FakeUsbMidiDevice(&logger_)); |
398 uint8_t descriptors[] = { | 398 uint8_t descriptors[] = { |
(...skipping 10 matching lines...) Expand all Loading... |
409 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, | 409 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, |
410 0x01, 0x01, 0x07, | 410 0x01, 0x01, 0x07, |
411 }; | 411 }; |
412 | 412 |
413 device->SetDescriptors(ToVector(descriptors)); | 413 device->SetDescriptors(ToVector(descriptors)); |
414 uint8_t data[] = { | 414 uint8_t data[] = { |
415 0x90, 0x45, 0x7f, 0xf0, 0x00, 0x01, 0xf7, | 415 0x90, 0x45, 0x7f, 0xf0, 0x00, 0x01, 0xf7, |
416 }; | 416 }; |
417 | 417 |
418 ScopedVector<UsbMidiDevice> devices; | 418 ScopedVector<UsbMidiDevice> devices; |
419 devices.push_back(device.Pass()); | 419 devices.push_back(std::move(device)); |
420 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 420 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
421 RunCallbackUntilCallbackInvoked(true, &devices); | 421 RunCallbackUntilCallbackInvoked(true, &devices); |
422 EXPECT_EQ(Result::OK, GetInitializationResult()); | 422 EXPECT_EQ(Result::OK, GetInitializationResult()); |
423 ASSERT_EQ(2u, manager_->output_streams().size()); | 423 ASSERT_EQ(2u, manager_->output_streams().size()); |
424 | 424 |
425 manager_->DispatchSendMidiData(client_.get(), 1, ToVector(data), 0); | 425 manager_->DispatchSendMidiData(client_.get(), 1, ToVector(data), 0); |
426 // Since UsbMidiDevice::Send is posted as a task, RunLoop should run to | 426 // Since UsbMidiDevice::Send is posted as a task, RunLoop should run to |
427 // invoke the task. | 427 // invoke the task. |
428 base::RunLoop run_loop; | 428 base::RunLoop run_loop; |
429 run_loop.RunUntilIdle(); | 429 run_loop.RunUntilIdle(); |
(...skipping 23 matching lines...) Expand all Loading... |
453 0x01, 0x01, 0x07, | 453 0x01, 0x01, 0x07, |
454 }; | 454 }; |
455 | 455 |
456 device->SetDescriptors(ToVector(descriptors)); | 456 device->SetDescriptors(ToVector(descriptors)); |
457 uint8_t data[] = { | 457 uint8_t data[] = { |
458 0x90, 0x45, 0x7f, 0xf0, 0x00, 0x01, 0xf7, | 458 0x90, 0x45, 0x7f, 0xf0, 0x00, 0x01, 0xf7, |
459 }; | 459 }; |
460 | 460 |
461 Initialize(); | 461 Initialize(); |
462 ScopedVector<UsbMidiDevice> devices; | 462 ScopedVector<UsbMidiDevice> devices; |
463 devices.push_back(device.Pass()); | 463 devices.push_back(std::move(device)); |
464 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 464 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
465 RunCallbackUntilCallbackInvoked(true, &devices); | 465 RunCallbackUntilCallbackInvoked(true, &devices); |
466 EXPECT_EQ(Result::OK, GetInitializationResult()); | 466 EXPECT_EQ(Result::OK, GetInitializationResult()); |
467 ASSERT_EQ(2u, manager_->output_streams().size()); | 467 ASSERT_EQ(2u, manager_->output_streams().size()); |
468 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); | 468 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); |
469 | 469 |
470 // The specified port index is invalid. The manager must ignore the request. | 470 // The specified port index is invalid. The manager must ignore the request. |
471 manager_->DispatchSendMidiData(client_.get(), 99, ToVector(data), 0); | 471 manager_->DispatchSendMidiData(client_.get(), 99, ToVector(data), 0); |
472 EXPECT_EQ("", logger_.TakeLog()); | 472 EXPECT_EQ("", logger_.TakeLog()); |
473 | 473 |
(...skipping 22 matching lines...) Expand all Loading... |
496 device->SetDescriptors(ToVector(descriptors)); | 496 device->SetDescriptors(ToVector(descriptors)); |
497 uint8_t data[] = { | 497 uint8_t data[] = { |
498 0x09, 0x90, 0x45, 0x7f, 0x04, 0xf0, 0x00, | 498 0x09, 0x90, 0x45, 0x7f, 0x04, 0xf0, 0x00, |
499 0x01, 0x49, 0x90, 0x88, 0x99, // This data should be ignored (CN = 4). | 499 0x01, 0x49, 0x90, 0x88, 0x99, // This data should be ignored (CN = 4). |
500 0x05, 0xf7, 0x00, 0x00, | 500 0x05, 0xf7, 0x00, 0x00, |
501 }; | 501 }; |
502 | 502 |
503 Initialize(); | 503 Initialize(); |
504 ScopedVector<UsbMidiDevice> devices; | 504 ScopedVector<UsbMidiDevice> devices; |
505 UsbMidiDevice* device_raw = device.get(); | 505 UsbMidiDevice* device_raw = device.get(); |
506 devices.push_back(device.Pass()); | 506 devices.push_back(std::move(device)); |
507 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 507 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
508 RunCallbackUntilCallbackInvoked(true, &devices); | 508 RunCallbackUntilCallbackInvoked(true, &devices); |
509 EXPECT_EQ(Result::OK, GetInitializationResult()); | 509 EXPECT_EQ(Result::OK, GetInitializationResult()); |
510 | 510 |
511 manager_->ReceiveUsbMidiData(device_raw, 2, data, arraysize(data), | 511 manager_->ReceiveUsbMidiData(device_raw, 2, data, arraysize(data), |
512 base::TimeTicks()); | 512 base::TimeTicks()); |
513 Finalize(); | 513 Finalize(); |
514 | 514 |
515 EXPECT_EQ( | 515 EXPECT_EQ( |
516 "UsbMidiDevice::GetDescriptors\n" | 516 "UsbMidiDevice::GetDescriptors\n" |
(...skipping 30 matching lines...) Expand all Loading... |
547 ASSERT_EQ(0u, input_ports().size()); | 547 ASSERT_EQ(0u, input_ports().size()); |
548 ASSERT_EQ(0u, output_ports().size()); | 548 ASSERT_EQ(0u, output_ports().size()); |
549 ASSERT_TRUE(manager_->input_stream()); | 549 ASSERT_TRUE(manager_->input_stream()); |
550 std::vector<UsbMidiJack> jacks = manager_->input_stream()->jacks(); | 550 std::vector<UsbMidiJack> jacks = manager_->input_stream()->jacks(); |
551 ASSERT_EQ(0u, manager_->output_streams().size()); | 551 ASSERT_EQ(0u, manager_->output_streams().size()); |
552 ASSERT_EQ(0u, jacks.size()); | 552 ASSERT_EQ(0u, jacks.size()); |
553 EXPECT_EQ("", logger_.TakeLog()); | 553 EXPECT_EQ("", logger_.TakeLog()); |
554 | 554 |
555 scoped_ptr<FakeUsbMidiDevice> new_device(new FakeUsbMidiDevice(&logger_)); | 555 scoped_ptr<FakeUsbMidiDevice> new_device(new FakeUsbMidiDevice(&logger_)); |
556 new_device->SetDescriptors(ToVector(descriptors)); | 556 new_device->SetDescriptors(ToVector(descriptors)); |
557 manager_->OnDeviceAttached(new_device.Pass()); | 557 manager_->OnDeviceAttached(std::move(new_device)); |
558 | 558 |
559 ASSERT_EQ(1u, input_ports().size()); | 559 ASSERT_EQ(1u, input_ports().size()); |
560 ASSERT_EQ(2u, output_ports().size()); | 560 ASSERT_EQ(2u, output_ports().size()); |
561 ASSERT_TRUE(manager_->input_stream()); | 561 ASSERT_TRUE(manager_->input_stream()); |
562 jacks = manager_->input_stream()->jacks(); | 562 jacks = manager_->input_stream()->jacks(); |
563 ASSERT_EQ(2u, manager_->output_streams().size()); | 563 ASSERT_EQ(2u, manager_->output_streams().size()); |
564 EXPECT_EQ(2u, manager_->output_streams()[0]->jack().jack_id); | 564 EXPECT_EQ(2u, manager_->output_streams()[0]->jack().jack_id); |
565 EXPECT_EQ(3u, manager_->output_streams()[1]->jack().jack_id); | 565 EXPECT_EQ(3u, manager_->output_streams()[1]->jack().jack_id); |
566 ASSERT_EQ(1u, jacks.size()); | 566 ASSERT_EQ(1u, jacks.size()); |
567 EXPECT_EQ(2, jacks[0].endpoint_number()); | 567 EXPECT_EQ(2, jacks[0].endpoint_number()); |
568 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); | 568 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); |
569 } | 569 } |
570 | 570 |
571 } // namespace | 571 } // namespace |
572 | 572 |
573 } // namespace midi | 573 } // namespace midi |
574 } // namespace media | 574 } // namespace media |
OLD | NEW |