Index: media/midi/midi_manager_usb_unittest.cc |
diff --git a/media/midi/midi_manager_usb_unittest.cc b/media/midi/midi_manager_usb_unittest.cc |
index b9a2732a81ec56aac64ebf94463fee4387c38a38..88bfd93956760e4da966945d92be3ac6e39d4425 100644 |
--- a/media/midi/midi_manager_usb_unittest.cc |
+++ b/media/midi/midi_manager_usb_unittest.cc |
@@ -6,6 +6,8 @@ |
#include <string> |
+#include "base/message_loop/message_loop.h" |
+#include "base/run_loop.h" |
#include "base/strings/stringprintf.h" |
#include "base/time/time.h" |
#include "media/midi/usb_midi_device.h" |
@@ -133,6 +135,8 @@ class MidiManagerUsbForTesting : public MidiManagerUsb { |
void CallCompleteInitialization(MidiResult result) { |
CompleteInitialization(result); |
+ base::RunLoop run_loop; |
+ run_loop.RunUntilIdle(); |
} |
private: |
@@ -141,7 +145,7 @@ class MidiManagerUsbForTesting : public MidiManagerUsb { |
class MidiManagerUsbTest : public ::testing::Test { |
public: |
- MidiManagerUsbTest() { |
+ MidiManagerUsbTest() : message_loop_(new base::MessageLoop) { |
scoped_ptr<TestUsbMidiDeviceFactory> factory(new TestUsbMidiDeviceFactory); |
factory_ = factory.get(); |
manager_.reset( |
@@ -172,6 +176,14 @@ class MidiManagerUsbTest : public ::testing::Test { |
return client_->result_; |
} |
+ void RunCallbackUntilCallbackInvoked( |
+ bool result, UsbMidiDevice::Devices* devices) { |
+ factory_->callback_.Run(result, devices); |
+ base::RunLoop run_loop; |
+ while (!client_->complete_start_session_) |
+ run_loop.RunUntilIdle(); |
+ } |
+ |
scoped_ptr<MidiManagerUsbForTesting> manager_; |
scoped_ptr<FakeMidiManagerClient> client_; |
// Owned by manager_. |
@@ -179,6 +191,8 @@ class MidiManagerUsbTest : public ::testing::Test { |
Logger logger_; |
private: |
+ scoped_ptr<base::MessageLoop> message_loop_; |
+ |
DISALLOW_COPY_AND_ASSIGN(MidiManagerUsbTest); |
}; |
@@ -207,8 +221,7 @@ TEST_F(MidiManagerUsbTest, Initialize) { |
ScopedVector<UsbMidiDevice> devices; |
devices.push_back(device.release()); |
EXPECT_FALSE(IsInitializationCallbackInvoked()); |
- factory_->callback_.Run(true, &devices); |
- EXPECT_TRUE(IsInitializationCallbackInvoked()); |
+ RunCallbackUntilCallbackInvoked(true, &devices); |
EXPECT_EQ(MIDI_OK, GetInitializationResult()); |
ASSERT_EQ(1u, manager_->input_ports().size()); |
@@ -229,8 +242,7 @@ TEST_F(MidiManagerUsbTest, InitializeFail) { |
Initialize(); |
EXPECT_FALSE(IsInitializationCallbackInvoked()); |
- factory_->callback_.Run(false, NULL); |
- EXPECT_TRUE(IsInitializationCallbackInvoked()); |
+ RunCallbackUntilCallbackInvoked(false, NULL); |
EXPECT_EQ(MIDI_INITIALIZATION_ERROR, GetInitializationResult()); |
} |
@@ -243,8 +255,7 @@ TEST_F(MidiManagerUsbTest, InitializeFailBecauseOfInvalidDescriptor) { |
ScopedVector<UsbMidiDevice> devices; |
devices.push_back(device.release()); |
EXPECT_FALSE(IsInitializationCallbackInvoked()); |
- factory_->callback_.Run(true, &devices); |
- EXPECT_TRUE(IsInitializationCallbackInvoked()); |
+ RunCallbackUntilCallbackInvoked(true, &devices); |
EXPECT_EQ(MIDI_INITIALIZATION_ERROR, GetInitializationResult()); |
EXPECT_EQ("UsbMidiDevice::GetDescriptor\n", logger_.TakeLog()); |
} |
@@ -279,8 +290,7 @@ TEST_F(MidiManagerUsbTest, Send) { |
ScopedVector<UsbMidiDevice> devices; |
devices.push_back(device.release()); |
EXPECT_FALSE(IsInitializationCallbackInvoked()); |
- factory_->callback_.Run(true, &devices); |
- EXPECT_TRUE(IsInitializationCallbackInvoked()); |
+ RunCallbackUntilCallbackInvoked(true, &devices); |
EXPECT_EQ(MIDI_OK, GetInitializationResult()); |
ASSERT_EQ(2u, manager_->output_streams().size()); |
@@ -326,8 +336,7 @@ TEST_F(MidiManagerUsbTest, Receive) { |
UsbMidiDevice* device_raw = device.get(); |
devices.push_back(device.release()); |
EXPECT_FALSE(IsInitializationCallbackInvoked()); |
- factory_->callback_.Run(true, &devices); |
- EXPECT_TRUE(IsInitializationCallbackInvoked()); |
+ RunCallbackUntilCallbackInvoked(true, &devices); |
EXPECT_EQ(MIDI_OK, GetInitializationResult()); |
manager_->ReceiveUsbMidiData(device_raw, 2, data, arraysize(data), |