Index: media/midi/midi_manager_unittest.cc |
diff --git a/media/midi/midi_manager_unittest.cc b/media/midi/midi_manager_unittest.cc |
index 2b56780e22e793fea044a223692ba74ad13b23f0..9e0399b58a7d0464d401037f330740d72d4b28ae 100644 |
--- a/media/midi/midi_manager_unittest.cc |
+++ b/media/midi/midi_manager_unittest.cc |
@@ -22,7 +22,8 @@ namespace { |
class FakeMidiManager : public MidiManager { |
public: |
- FakeMidiManager() : start_initialization_is_called_(false) {} |
+ FakeMidiManager() |
+ : start_initialization_is_called_(false), finalize_is_called_(false) {} |
~FakeMidiManager() override {} |
// MidiManager implementation. |
@@ -30,6 +31,8 @@ class FakeMidiManager : public MidiManager { |
start_initialization_is_called_ = true; |
} |
+ void Finalize() override { finalize_is_called_ = true; } |
+ |
void DispatchSendMidiData(MidiManagerClient* client, |
uint32 port_index, |
const std::vector<uint8>& data, |
@@ -49,6 +52,7 @@ class FakeMidiManager : public MidiManager { |
} |
bool start_initialization_is_called_; |
+ bool finalize_is_called_; |
private: |
DISALLOW_COPY_AND_ASSIGN(FakeMidiManager); |
@@ -100,7 +104,13 @@ class MidiManagerTest : public ::testing::Test { |
MidiManagerTest() |
: manager_(new FakeMidiManager), |
message_loop_(new base::MessageLoop) {} |
- ~MidiManagerTest() override {} |
+ ~MidiManagerTest() override { |
+ manager_->Shutdown(); |
+ base::RunLoop run_loop; |
+ run_loop.RunUntilIdle(); |
+ EXPECT_EQ(manager_->start_initialization_is_called_, |
+ manager_->finalize_is_called_); |
+ } |
protected: |
void StartTheFirstSession(FakeMidiManagerClient* client) { |
@@ -204,6 +214,7 @@ TEST_F(MidiManagerTest, TooManyPendingSessions) { |
many_existing_clients[i] = new FakeMidiManagerClient; |
StartTheNthSession(many_existing_clients[i], i + 1); |
} |
+ EXPECT_TRUE(manager_->start_initialization_is_called_); |
// Push the last client that should be rejected for too many pending requests. |
scoped_ptr<FakeMidiManagerClient> additional_client( |
@@ -211,6 +222,7 @@ TEST_F(MidiManagerTest, TooManyPendingSessions) { |
manager_->start_initialization_is_called_ = false; |
manager_->StartSession(additional_client.get()); |
EXPECT_FALSE(manager_->start_initialization_is_called_); |
+ manager_->start_initialization_is_called_ = true; |
EXPECT_EQ(Result::INITIALIZATION_ERROR, additional_client->result()); |
// Other clients still should not receive a result. |
@@ -267,8 +279,15 @@ TEST_F(MidiManagerTest, CreateMidiManager) { |
#else |
EXPECT_EQ(Result::OK, result); |
#endif |
+ |
+ manager->Shutdown(); |
+ base::RunLoop run_loop; |
+ run_loop.RunUntilIdle(); |
} |
+// TODO(toyoshim): Add multi-threaded unit tests to check races around |
+// StartInitialization(), CompleteInitialization(), and Finalize(). |
+ |
} // namespace |
} // namespace midi |