OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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_alsa.h" | 5 #include "media/midi/midi_manager_alsa.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
9 namespace media { | 9 namespace media { |
10 namespace midi { | 10 namespace midi { |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 scoped_ptr<MidiManagerAlsa::MidiPort> port_input_0_no_card_alt_client_name_; | 113 scoped_ptr<MidiManagerAlsa::MidiPort> port_input_0_no_card_alt_client_name_; |
114 scoped_ptr<MidiManagerAlsa::MidiPort> port_input_0_no_card_alt_port_name_; | 114 scoped_ptr<MidiManagerAlsa::MidiPort> port_input_0_no_card_alt_port_name_; |
115 scoped_ptr<MidiManagerAlsa::MidiPort> port_input_0_no_card_alt_client_id_; | 115 scoped_ptr<MidiManagerAlsa::MidiPort> port_input_0_no_card_alt_client_id_; |
116 scoped_ptr<MidiManagerAlsa::MidiPort> port_input_0_no_card_alt_port_id_; | 116 scoped_ptr<MidiManagerAlsa::MidiPort> port_input_0_no_card_alt_port_id_; |
117 | 117 |
118 // State fields to avoid declaring in test fixtures below. | 118 // State fields to avoid declaring in test fixtures below. |
119 MidiManagerAlsa::MidiPortState midi_port_state_0_; | 119 MidiManagerAlsa::MidiPortState midi_port_state_0_; |
120 MidiManagerAlsa::MidiPortState midi_port_state_1_; | 120 MidiManagerAlsa::MidiPortState midi_port_state_1_; |
121 MidiManagerAlsa::TemporaryMidiPortState temporary_midi_port_state_0_; | 121 MidiManagerAlsa::TemporaryMidiPortState temporary_midi_port_state_0_; |
122 MidiManagerAlsa::AlsaSeqState alsa_seq_state_0_; | 122 MidiManagerAlsa::AlsaSeqState alsa_seq_state_0_; |
| 123 MidiManagerAlsa::AlsaCardMap alsa_cards_; |
123 }; | 124 }; |
124 | 125 |
125 // Tests that ExtractManufacturerString works as expected. | 126 // Tests that ExtractManufacturerString works as expected. |
126 TEST_F(MidiManagerAlsaTest, ExtractManufacturer) { | 127 TEST_F(MidiManagerAlsaTest, ExtractManufacturer) { |
127 EXPECT_EQ("My\\x20Vendor", MidiManagerAlsa::ExtractManufacturerString( | 128 EXPECT_EQ("My\\x20Vendor", |
128 "My\\x20Vendor", "1234", "My Vendor, Inc.", | 129 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
129 "Card", "My Vendor Inc Card at bus")); | 130 "My\\x20Vendor", "1234", "My Vendor, Inc.", "Card", |
130 EXPECT_EQ("My Vendor", MidiManagerAlsa::ExtractManufacturerString( | 131 "My Vendor Inc Card at bus")); |
| 132 EXPECT_EQ("My Vendor", MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
131 "My Vendor", "1234", "My Vendor, Inc.", "Card", | 133 "My Vendor", "1234", "My Vendor, Inc.", "Card", |
132 "My Vendor Inc Card at bus")); | 134 "My Vendor Inc Card at bus")); |
133 EXPECT_EQ("My Vendor, Inc.", MidiManagerAlsa::ExtractManufacturerString( | 135 EXPECT_EQ("My Vendor, Inc.", |
134 "1234", "1234", "My Vendor, Inc.", "Card", | 136 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
135 "My Vendor Inc Card at bus")); | 137 "1234", "1234", "My Vendor, Inc.", "Card", |
| 138 "My Vendor Inc Card at bus")); |
136 EXPECT_EQ("My Vendor Inc", | 139 EXPECT_EQ("My Vendor Inc", |
137 MidiManagerAlsa::ExtractManufacturerString( | 140 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
138 "1234", "1234", "", "Card", "My Vendor Inc Card at bus")); | 141 "1234", "1234", "", "Card", "My Vendor Inc Card at bus")); |
139 EXPECT_EQ("My Vendor Inc", | 142 EXPECT_EQ("My Vendor Inc", |
140 MidiManagerAlsa::ExtractManufacturerString( | 143 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
141 "", "", "", "Card", "My Vendor Inc Card at bus")); | 144 "", "", "", "Card", "My Vendor Inc Card at bus")); |
142 EXPECT_EQ("", MidiManagerAlsa::ExtractManufacturerString("1234", "1234", "", | 145 EXPECT_EQ("", MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
143 "Card", "Longname")); | 146 "1234", "1234", "", "Card", "Longname")); |
144 EXPECT_EQ("Keystation\\x20Mini\\x2032", | 147 EXPECT_EQ("Keystation\\x20Mini\\x2032", |
145 MidiManagerAlsa::ExtractManufacturerString( | 148 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
146 "Keystation\\x20Mini\\x2032", "129d", | 149 "Keystation\\x20Mini\\x2032", "129d", |
147 "Evolution Electronics, Ltd", "Keystation Mini 32", | 150 "Evolution Electronics, Ltd", "Keystation Mini 32", |
148 "Keystation Mini 32 Keystation Mini 32 at" | 151 "Keystation Mini 32 Keystation Mini 32 at" |
149 " usb-0000:00:14.0-2.4.4, full speed")); | 152 " usb-0000:00:14.0-2.4.4, full speed")); |
150 EXPECT_EQ("Keystation Mini 32", | 153 EXPECT_EQ("Keystation Mini 32", |
151 MidiManagerAlsa::ExtractManufacturerString( | 154 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
152 "Keystation Mini 32", "129d", "Evolution Electronics, Ltd", | 155 "Keystation Mini 32", "129d", "Evolution Electronics, Ltd", |
153 "Keystation Mini 32", | 156 "Keystation Mini 32", |
154 "Keystation Mini 32 Keystation Mini 32 at" | 157 "Keystation Mini 32 Keystation Mini 32 at" |
155 " usb-0000:00:14.0-2.4.4, full speed")); | 158 " usb-0000:00:14.0-2.4.4, full speed")); |
156 EXPECT_EQ("Keystation Mini 32", MidiManagerAlsa::ExtractManufacturerString( | 159 EXPECT_EQ("Keystation Mini 32", |
157 "", "", "", "Keystation Mini 32", | 160 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
158 "Keystation Mini 32 Keystation Mini 32 at" | 161 "", "", "", "Keystation Mini 32", |
159 " usb-0000:00:14.0-2.4.4, full speed")); | 162 "Keystation Mini 32 Keystation Mini 32 at" |
160 EXPECT_EQ("", MidiManagerAlsa::ExtractManufacturerString( | 163 " usb-0000:00:14.0-2.4.4, full speed")); |
| 164 EXPECT_EQ("", MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
161 "", "", "", "Serial MIDI (UART16550A)", | 165 "", "", "", "Serial MIDI (UART16550A)", |
162 "Serial MIDI (UART16550A) [Soundcanvas] at 0x3f8, irq 4")); | 166 "Serial MIDI (UART16550A) [Soundcanvas] at 0x3f8, irq 4")); |
163 EXPECT_EQ("", MidiManagerAlsa::ExtractManufacturerString( | 167 EXPECT_EQ("", MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
164 "", "", "", "VirMIDI", "Virtual MIDI Card 1")); | 168 "", "", "", "VirMIDI", "Virtual MIDI Card 1")); |
165 EXPECT_EQ("C-Media Electronics Inc", | 169 EXPECT_EQ("C-Media Electronics Inc", |
166 MidiManagerAlsa::ExtractManufacturerString( | 170 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
167 "", "0x13f6", "C-Media Electronics Inc", "C-Media CMI8738 MIDI", | 171 "", "0x13f6", "C-Media Electronics Inc", "C-Media CMI8738 MIDI", |
168 "C-Media CMI8738 (model 55) at 0xd000, irq 19")); | 172 "C-Media CMI8738 (model 55) at 0xd000, irq 19")); |
169 EXPECT_EQ("C-Media Electronics Inc", | 173 EXPECT_EQ("C-Media Electronics Inc", |
170 MidiManagerAlsa::ExtractManufacturerString( | 174 MidiManagerAlsa::AlsaCard::ExtractManufacturerString( |
171 "", "0x13f6", "C-Media Electronics Inc", "C-Media CMI8738 FM", | 175 "", "0x13f6", "C-Media Electronics Inc", "C-Media CMI8738 FM", |
172 "C-Media CMI8738 (model 55) at 0xd000, irq 19")); | 176 "C-Media CMI8738 (model 55) at 0xd000, irq 19")); |
173 } | 177 } |
174 | 178 |
175 // Tests that verify proper serialization and generation of opaque key for | 179 // Tests that verify proper serialization and generation of opaque key for |
176 // MidiPort. | 180 // MidiPort. |
177 TEST_F(MidiManagerAlsaTest, JSONPortMetadata) { | 181 TEST_F(MidiManagerAlsaTest, JSONPortMetadata) { |
178 EXPECT_EQ( | 182 EXPECT_EQ( |
179 "{\"clientId\":1,\"clientName\":\"client_name\",\"id\":\"id\"," | 183 "{\"clientId\":1,\"clientName\":\"client_name\",\"id\":\"id\"," |
180 "\"midiDevice\":5,\"path\":\"path\",\"portId\":2,\"portName\":\"port_" | 184 "\"midiDevice\":5,\"path\":\"path\",\"portId\":2,\"portName\":\"port_" |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 *port_input_0_no_card_alt_port_id_.get())); | 520 *port_input_0_no_card_alt_port_id_.get())); |
517 | 521 |
518 // Look for something else that we won't find. | 522 // Look for something else that we won't find. |
519 EXPECT_EQ(midi_port_state_0_.end(), | 523 EXPECT_EQ(midi_port_state_0_.end(), |
520 midi_port_state_0_.FindDisconnected(*port_input_minimal_)); | 524 midi_port_state_0_.FindDisconnected(*port_input_minimal_)); |
521 } | 525 } |
522 | 526 |
523 // Tests AlsaSeqState -> MidiPortState. | 527 // Tests AlsaSeqState -> MidiPortState. |
524 TEST_F(MidiManagerAlsaTest, ToMidiPortState) { | 528 TEST_F(MidiManagerAlsaTest, ToMidiPortState) { |
525 // Empty state. | 529 // Empty state. |
526 EXPECT_EQ(0, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 530 EXPECT_EQ(0, |
| 531 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
527 | 532 |
528 // Still empty, because there are no ports yet. | 533 // Still empty, because there are no ports yet. |
529 alsa_seq_state_0_.ClientStart(0, "0", SND_SEQ_KERNEL_CLIENT); | 534 alsa_seq_state_0_.ClientStart(0, "0", SND_SEQ_KERNEL_CLIENT); |
530 EXPECT_EQ(0, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 535 EXPECT_EQ(0, |
| 536 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
531 | 537 |
532 // Add a port, now it has 1 item when converted. | 538 // Add a port, now it has 1 item when converted. |
533 alsa_seq_state_0_.PortStart( | 539 alsa_seq_state_0_.PortStart( |
534 0, 0, "0:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kInput, true); | 540 0, 0, "0:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kInput, true); |
535 EXPECT_EQ(1, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 541 EXPECT_EQ(1, |
| 542 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
536 | 543 |
537 // Close client. This closes its ports and returns count to 0. | 544 // Close client. This closes its ports and returns count to 0. |
538 alsa_seq_state_0_.ClientExit(0); | 545 alsa_seq_state_0_.ClientExit(0); |
539 EXPECT_EQ(0, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 546 EXPECT_EQ(0, |
| 547 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
540 | 548 |
541 // Add another port, without client. This does nothing. | 549 // Add another port, without client. This does nothing. |
542 alsa_seq_state_0_.PortStart( | 550 alsa_seq_state_0_.PortStart( |
543 0, 0, "0:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kInput, true); | 551 0, 0, "0:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kInput, true); |
544 EXPECT_EQ(0, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 552 EXPECT_EQ(0, |
| 553 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
545 | 554 |
546 // Close client again. This does nothing. | 555 // Close client again. This does nothing. |
547 alsa_seq_state_0_.ClientExit(0); | 556 alsa_seq_state_0_.ClientExit(0); |
548 EXPECT_EQ(0, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 557 EXPECT_EQ(0, |
| 558 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
549 | 559 |
550 // Add duplex port. This will add 2 ports when converted. | 560 // Add duplex port. This will add 2 ports when converted. |
551 alsa_seq_state_0_.ClientStart(0, "0", SND_SEQ_KERNEL_CLIENT); | 561 alsa_seq_state_0_.ClientStart(0, "0", SND_SEQ_KERNEL_CLIENT); |
552 alsa_seq_state_0_.PortStart( | 562 alsa_seq_state_0_.PortStart( |
553 0, 0, "0:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kDuplex, true); | 563 0, 0, "0:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kDuplex, true); |
554 EXPECT_EQ(2, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 564 EXPECT_EQ(2, |
| 565 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
555 | 566 |
556 // Add an output port. Now we are at 3. | 567 // Add an output port. Now we are at 3. |
557 alsa_seq_state_0_.PortStart( | 568 alsa_seq_state_0_.PortStart( |
558 0, 1, "0:1", MidiManagerAlsa::AlsaSeqState::PortDirection::kOutput, true); | 569 0, 1, "0:1", MidiManagerAlsa::AlsaSeqState::PortDirection::kOutput, true); |
559 EXPECT_EQ(3, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 570 EXPECT_EQ(3, |
| 571 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
560 | 572 |
561 // Add another client. Still at 3. | 573 // Add another client. Still at 3. |
562 alsa_seq_state_0_.ClientStart(1, "1", SND_SEQ_KERNEL_CLIENT); | 574 alsa_seq_state_0_.ClientStart(1, "1", SND_SEQ_KERNEL_CLIENT); |
563 EXPECT_EQ(3, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 575 EXPECT_EQ(3, |
| 576 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
564 | 577 |
565 // Add a port. Now at 4. | 578 // Add a port. Now at 4. |
566 alsa_seq_state_0_.PortStart( | 579 alsa_seq_state_0_.PortStart( |
567 1, 0, "1:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kInput, true); | 580 1, 0, "1:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kInput, true); |
568 EXPECT_EQ(4, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 581 EXPECT_EQ(4, |
| 582 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
569 | 583 |
570 // Add a duplicate port. Still at 4. | 584 // Add a duplicate port. Still at 4. |
571 alsa_seq_state_0_.PortStart( | 585 alsa_seq_state_0_.PortStart( |
572 1, 0, "1:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kInput, true); | 586 1, 0, "1:0", MidiManagerAlsa::AlsaSeqState::PortDirection::kInput, true); |
573 EXPECT_EQ(4, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 587 EXPECT_EQ(4, |
| 588 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
574 | 589 |
575 // Add a duplicate client. This will close the ports from the previous client. | 590 // Add a duplicate client. This will close the ports from the previous client. |
576 alsa_seq_state_0_.ClientStart(1, "1", SND_SEQ_KERNEL_CLIENT); | 591 alsa_seq_state_0_.ClientStart(1, "1", SND_SEQ_KERNEL_CLIENT); |
577 EXPECT_EQ(3, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 592 EXPECT_EQ(3, |
| 593 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
578 | 594 |
579 // Remove a duplex port. This reduces count by 2. | 595 // Remove a duplex port. This reduces count by 2. |
580 alsa_seq_state_0_.PortExit(0, 0); | 596 alsa_seq_state_0_.PortExit(0, 0); |
581 EXPECT_EQ(1, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 597 EXPECT_EQ(1, |
| 598 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
582 | 599 |
583 // Remove a non-existent port. No change. | 600 // Remove a non-existent port. No change. |
584 alsa_seq_state_0_.PortExit(0, 0); | 601 alsa_seq_state_0_.PortExit(0, 0); |
585 EXPECT_EQ(1, CountPorts(*alsa_seq_state_0_.ToMidiPortState().get())); | 602 EXPECT_EQ(1, |
| 603 CountPorts(*alsa_seq_state_0_.ToMidiPortState(alsa_cards_).get())); |
586 | 604 |
587 // Verify the last entry. | 605 // Verify the last entry. |
588 EXPECT_TRUE((*alsa_seq_state_0_.ToMidiPortState()->begin()) | 606 EXPECT_TRUE((*alsa_seq_state_0_.ToMidiPortState(alsa_cards_)->begin()) |
589 ->MatchConnected(MidiManagerAlsa::MidiPort( | 607 ->MatchConnected(MidiManagerAlsa::MidiPort( |
590 "", "", 0, 1, -1, "0", "0:1", "", "", | 608 "", "", 0, 1, -1, "0", "0:1", "", "", |
591 MidiManagerAlsa::MidiPort::Type::kOutput))); | 609 MidiManagerAlsa::MidiPort::Type::kOutput))); |
592 } | 610 } |
593 | 611 |
| 612 // Tests kernel_client_count of AlsaSeqState. |
| 613 TEST_F(MidiManagerAlsaTest, KernelClientCount) { |
| 614 EXPECT_EQ(0, alsa_seq_state_0_.kernel_client_count()); |
| 615 |
| 616 // Add a kernel client. |
| 617 alsa_seq_state_0_.ClientStart(16, "16", SND_SEQ_KERNEL_CLIENT); |
| 618 EXPECT_EQ(1, alsa_seq_state_0_.kernel_client_count()); |
| 619 |
| 620 // Add a duplicate kernel client. |
| 621 alsa_seq_state_0_.ClientStart(16, "16", SND_SEQ_KERNEL_CLIENT); |
| 622 EXPECT_EQ(1, alsa_seq_state_0_.kernel_client_count()); |
| 623 |
| 624 // Add a duplicate user client. |
| 625 alsa_seq_state_0_.ClientStart(16, "16", SND_SEQ_USER_CLIENT); |
| 626 EXPECT_EQ(0, alsa_seq_state_0_.kernel_client_count()); |
| 627 |
| 628 // Add 2 more kernel clients. |
| 629 alsa_seq_state_0_.ClientStart(17, "17", SND_SEQ_KERNEL_CLIENT); |
| 630 alsa_seq_state_0_.ClientStart(18, "18", SND_SEQ_KERNEL_CLIENT); |
| 631 EXPECT_EQ(2, alsa_seq_state_0_.kernel_client_count()); |
| 632 |
| 633 // Add another user client. |
| 634 alsa_seq_state_0_.ClientStart(101, "101", SND_SEQ_USER_CLIENT); |
| 635 EXPECT_EQ(2, alsa_seq_state_0_.kernel_client_count()); |
| 636 |
| 637 // Remove kernel client. |
| 638 alsa_seq_state_0_.ClientExit(17); |
| 639 EXPECT_EQ(1, alsa_seq_state_0_.kernel_client_count()); |
| 640 |
| 641 // Remove user client. |
| 642 alsa_seq_state_0_.ClientExit(16); |
| 643 EXPECT_EQ(1, alsa_seq_state_0_.kernel_client_count()); |
| 644 |
| 645 // Remove kernel client. |
| 646 alsa_seq_state_0_.ClientExit(18); |
| 647 EXPECT_EQ(0, alsa_seq_state_0_.kernel_client_count()); |
| 648 |
| 649 // Add a duplicate kernel client. |
| 650 alsa_seq_state_0_.ClientStart(101, "101", SND_SEQ_KERNEL_CLIENT); |
| 651 EXPECT_EQ(1, alsa_seq_state_0_.kernel_client_count()); |
| 652 |
| 653 // Add a low kernel client. |
| 654 alsa_seq_state_0_.ClientStart(1, "1", SND_SEQ_KERNEL_CLIENT); |
| 655 EXPECT_EQ(1, alsa_seq_state_0_.kernel_client_count()); |
| 656 |
| 657 // Remove low kernel client. |
| 658 alsa_seq_state_0_.ClientExit(1); |
| 659 EXPECT_EQ(1, alsa_seq_state_0_.kernel_client_count()); |
| 660 } |
| 661 |
| 662 TEST_F(MidiManagerAlsaTest, AlsaCards) { |
| 663 // TODO(agoode): test add/remove of alsa cards. |
| 664 } |
| 665 |
594 // TODO(agoode): Test old -> new state event generation, using mocks. | 666 // TODO(agoode): Test old -> new state event generation, using mocks. |
595 | 667 |
596 } // namespace midi | 668 } // namespace midi |
597 } // namespace media | 669 } // namespace media |
OLD | NEW |