| 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 "mojo/edk/base_edk/platform_message_loop_impl.h" | 5 #include "mojo/edk/base_edk/platform_message_loop_impl.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <thread> | 8 #include <thread> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 task_runner->PostTask(ToClosure([&stuff, &message_loop, &task_runner]() { | 62 task_runner->PostTask(ToClosure([&stuff, &message_loop, &task_runner]() { |
| 63 EXPECT_TRUE(message_loop.IsRunningOnCurrentThread()); | 63 EXPECT_TRUE(message_loop.IsRunningOnCurrentThread()); |
| 64 stuff.push_back(4); | 64 stuff.push_back(4); |
| 65 task_runner->PostTask(ToClosure([&stuff]() { stuff.push_back(6); })); | 65 task_runner->PostTask(ToClosure([&stuff]() { stuff.push_back(6); })); |
| 66 })); | 66 })); |
| 67 task_runner->PostTask(ToClosure([&stuff]() { stuff.push_back(5); })); | 67 task_runner->PostTask(ToClosure([&stuff]() { stuff.push_back(5); })); |
| 68 message_loop.RunUntilIdle(); | 68 message_loop.RunUntilIdle(); |
| 69 EXPECT_EQ(std::vector<int>({4, 5, 6}), stuff); | 69 EXPECT_EQ(std::vector<int>({4, 5, 6}), stuff); |
| 70 | 70 |
| 71 stuff.clear(); | 71 stuff.clear(); |
| 72 task_runner->PostTask(ToClosure([&stuff, &message_loop, &task_runner]() { |
| 73 EXPECT_TRUE(message_loop.IsRunningOnCurrentThread()); |
| 74 stuff.push_back(7); |
| 75 message_loop.QuitNow(); |
| 76 task_runner->PostTask(ToClosure([&stuff]() { stuff.push_back(9); })); |
| 77 })); |
| 78 task_runner->PostTask(ToClosure([&stuff]() { stuff.push_back(8); })); |
| 79 message_loop.Run(); |
| 80 EXPECT_EQ(std::vector<int>({7}), stuff); |
| 81 stuff.clear(); |
| 82 message_loop.RunUntilIdle(); |
| 83 EXPECT_EQ(std::vector<int>({8, 9}), stuff); |
| 84 |
| 85 stuff.clear(); |
| 72 message_loop.RunUntilIdle(); | 86 message_loop.RunUntilIdle(); |
| 73 EXPECT_TRUE(stuff.empty()); | 87 EXPECT_TRUE(stuff.empty()); |
| 74 | 88 |
| 75 { | 89 { |
| 76 std::thread other_thread([&message_loop]() { | 90 std::thread other_thread([&message_loop]() { |
| 77 // |IsRunningOnCurrentThread()| may be called on any thread. | 91 // |IsRunningOnCurrentThread()| may be called on any thread. |
| 78 EXPECT_FALSE(message_loop.IsRunningOnCurrentThread()); | 92 EXPECT_FALSE(message_loop.IsRunningOnCurrentThread()); |
| 79 }); | 93 }); |
| 80 other_thread.join(); | 94 other_thread.join(); |
| 81 } | 95 } |
| 82 | 96 |
| 83 stuff.clear(); | 97 stuff.clear(); |
| 84 task_runner->PostTask(ToClosure([&stuff, &message_loop, &task_runner]() { | 98 task_runner->PostTask(ToClosure([&stuff, &message_loop, &task_runner]() { |
| 85 EXPECT_TRUE(message_loop.IsRunningOnCurrentThread()); | 99 EXPECT_TRUE(message_loop.IsRunningOnCurrentThread()); |
| 86 std::thread other_thread([&stuff, &message_loop, task_runner]() { | 100 std::thread other_thread([&stuff, &message_loop, task_runner]() { |
| 87 EXPECT_FALSE(message_loop.IsRunningOnCurrentThread()); | 101 EXPECT_FALSE(message_loop.IsRunningOnCurrentThread()); |
| 88 EXPECT_EQ(task_runner, message_loop.GetTaskRunner()); | 102 EXPECT_EQ(task_runner, message_loop.GetTaskRunner()); |
| 89 stuff.push_back(7); | 103 stuff.push_back(10); |
| 90 task_runner->PostTask(ToClosure([&stuff, &message_loop]() { | 104 task_runner->PostTask(ToClosure([&stuff, &message_loop]() { |
| 91 EXPECT_TRUE(message_loop.IsRunningOnCurrentThread()); | 105 EXPECT_TRUE(message_loop.IsRunningOnCurrentThread()); |
| 92 stuff.push_back(8); | 106 stuff.push_back(11); |
| 93 message_loop.QuitWhenIdle(); | 107 message_loop.QuitWhenIdle(); |
| 94 })); | 108 })); |
| 95 }); | 109 }); |
| 96 other_thread.join(); | 110 other_thread.join(); |
| 97 EXPECT_EQ(std::vector<int>({7}), stuff); | 111 EXPECT_EQ(std::vector<int>({10}), stuff); |
| 98 stuff.clear(); | 112 stuff.clear(); |
| 99 })); | 113 })); |
| 100 message_loop.Run(); | 114 message_loop.Run(); |
| 101 EXPECT_EQ(std::vector<int>({8}), stuff); | 115 EXPECT_EQ(std::vector<int>({11}), stuff); |
| 102 } | 116 } |
| 103 | 117 |
| 104 TEST(PlatformMessageLoopImpl, TypeIO) { | 118 TEST(PlatformMessageLoopImpl, TypeIO) { |
| 105 PlatformMessageLoopImpl message_loop(base::MessageLoop::TYPE_IO); | 119 PlatformMessageLoopImpl message_loop(base::MessageLoop::TYPE_IO); |
| 106 | 120 |
| 107 EXPECT_EQ(base::MessageLoop::TYPE_IO, | 121 EXPECT_EQ(base::MessageLoop::TYPE_IO, |
| 108 message_loop.base_message_loop().type()); | 122 message_loop.base_message_loop().type()); |
| 109 | 123 |
| 110 RefPtr<TaskRunner> task_runner = message_loop.GetTaskRunner(); | 124 RefPtr<TaskRunner> task_runner = message_loop.GetTaskRunner(); |
| 111 EXPECT_TRUE(task_runner); | 125 EXPECT_TRUE(task_runner); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 bool was_run = false; | 157 bool was_run = false; |
| 144 message_loop->GetTaskRunner()->PostTask( | 158 message_loop->GetTaskRunner()->PostTask( |
| 145 ToClosure([&was_run]() { was_run = true; })); | 159 ToClosure([&was_run]() { was_run = true; })); |
| 146 EXPECT_FALSE(was_run); | 160 EXPECT_FALSE(was_run); |
| 147 message_loop->RunUntilIdle(); | 161 message_loop->RunUntilIdle(); |
| 148 EXPECT_TRUE(was_run); | 162 EXPECT_TRUE(was_run); |
| 149 } | 163 } |
| 150 | 164 |
| 151 } // namespace | 165 } // namespace |
| 152 } // namespace base_edk | 166 } // namespace base_edk |
| OLD | NEW |