OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/message_loop_proxy_impl.h" | 5 #include "base/message_loop_proxy_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/message_loop_proxy.h" | 10 #include "base/message_loop_proxy.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 | 51 |
52 static void BasicFunction(MessageLoopProxyImplTest* test) { | 52 static void BasicFunction(MessageLoopProxyImplTest* test) { |
53 test->AssertOnFileThread(); | 53 test->AssertOnFileThread(); |
54 test->Quit(); | 54 test->Quit(); |
55 } | 55 } |
56 | 56 |
57 static void AssertNotRun() { | 57 static void AssertNotRun() { |
58 FAIL() << "Callback Should not get executed."; | 58 FAIL() << "Callback Should not get executed."; |
59 } | 59 } |
60 | 60 |
61 class DummyTask : public Task { | |
62 public: | |
63 explicit DummyTask(bool* deleted) : deleted_(deleted) { } | |
64 ~DummyTask() { | |
65 *deleted_ = true; | |
66 } | |
67 | |
68 void Run() { | |
69 FAIL(); | |
70 } | |
71 | |
72 private: | |
73 bool* deleted_; | |
74 }; | |
75 | |
76 class DeletedOnFile { | 61 class DeletedOnFile { |
77 public: | 62 public: |
78 explicit DeletedOnFile(MessageLoopProxyImplTest* test) : test_(test) {} | 63 explicit DeletedOnFile(MessageLoopProxyImplTest* test) : test_(test) {} |
79 | 64 |
80 ~DeletedOnFile() { | 65 ~DeletedOnFile() { |
81 test_->AssertOnFileThread(); | 66 test_->AssertOnFileThread(); |
82 test_->Quit(); | 67 test_->Quit(); |
83 } | 68 } |
84 | 69 |
85 private: | 70 private: |
(...skipping 12 matching lines...) Expand all Loading... |
98 MessageLoop::current()->Run(); | 83 MessageLoop::current()->Run(); |
99 } | 84 } |
100 | 85 |
101 TEST_F(MessageLoopProxyImplTest, Delete) { | 86 TEST_F(MessageLoopProxyImplTest, Delete) { |
102 DeletedOnFile* deleted_on_file = new DeletedOnFile(this); | 87 DeletedOnFile* deleted_on_file = new DeletedOnFile(this); |
103 EXPECT_TRUE(file_thread_->message_loop_proxy()->DeleteSoon( | 88 EXPECT_TRUE(file_thread_->message_loop_proxy()->DeleteSoon( |
104 FROM_HERE, deleted_on_file)); | 89 FROM_HERE, deleted_on_file)); |
105 MessageLoop::current()->Run(); | 90 MessageLoop::current()->Run(); |
106 } | 91 } |
107 | 92 |
108 TEST_F(MessageLoopProxyImplTest, LegacyPostTaskAfterThreadExits) { | |
109 scoped_ptr<base::Thread> test_thread( | |
110 new base::Thread("MessageLoopProxyImplTest_Dummy")); | |
111 test_thread->Start(); | |
112 scoped_refptr<base::MessageLoopProxy> message_loop_proxy = | |
113 test_thread->message_loop_proxy(); | |
114 test_thread->Stop(); | |
115 | |
116 bool deleted = false; | |
117 bool ret = message_loop_proxy->PostTask( | |
118 FROM_HERE, new DummyTask(&deleted)); | |
119 EXPECT_FALSE(ret); | |
120 EXPECT_TRUE(deleted); | |
121 } | |
122 | |
123 TEST_F(MessageLoopProxyImplTest, LegacyPostTaskAfterThreadIsDeleted) { | |
124 scoped_refptr<base::MessageLoopProxy> message_loop_proxy; | |
125 { | |
126 scoped_ptr<base::Thread> test_thread( | |
127 new base::Thread("MessageLoopProxyImplTest_Dummy")); | |
128 test_thread->Start(); | |
129 message_loop_proxy = test_thread->message_loop_proxy(); | |
130 } | |
131 bool deleted = false; | |
132 bool ret = message_loop_proxy->PostTask(FROM_HERE, new DummyTask(&deleted)); | |
133 EXPECT_FALSE(ret); | |
134 EXPECT_TRUE(deleted); | |
135 } | |
136 | |
137 TEST_F(MessageLoopProxyImplTest, PostTask) { | 93 TEST_F(MessageLoopProxyImplTest, PostTask) { |
138 EXPECT_TRUE(file_thread_->message_loop_proxy()->PostTask( | 94 EXPECT_TRUE(file_thread_->message_loop_proxy()->PostTask( |
139 FROM_HERE, base::Bind(&MessageLoopProxyImplTest::BasicFunction, | 95 FROM_HERE, base::Bind(&MessageLoopProxyImplTest::BasicFunction, |
140 base::Unretained(this)))); | 96 base::Unretained(this)))); |
141 MessageLoop::current()->Run(); | 97 MessageLoop::current()->Run(); |
142 } | 98 } |
143 | 99 |
144 TEST_F(MessageLoopProxyImplTest, PostTaskAfterThreadExits) { | 100 TEST_F(MessageLoopProxyImplTest, PostTaskAfterThreadExits) { |
145 scoped_ptr<base::Thread> test_thread( | 101 scoped_ptr<base::Thread> test_thread( |
146 new base::Thread("MessageLoopProxyImplTest_Dummy")); | 102 new base::Thread("MessageLoopProxyImplTest_Dummy")); |
(...skipping 14 matching lines...) Expand all Loading... |
161 scoped_ptr<base::Thread> test_thread( | 117 scoped_ptr<base::Thread> test_thread( |
162 new base::Thread("MessageLoopProxyImplTest_Dummy")); | 118 new base::Thread("MessageLoopProxyImplTest_Dummy")); |
163 test_thread->Start(); | 119 test_thread->Start(); |
164 message_loop_proxy = test_thread->message_loop_proxy(); | 120 message_loop_proxy = test_thread->message_loop_proxy(); |
165 } | 121 } |
166 bool ret = message_loop_proxy->PostTask( | 122 bool ret = message_loop_proxy->PostTask( |
167 FROM_HERE, | 123 FROM_HERE, |
168 base::Bind(&MessageLoopProxyImplTest::AssertNotRun)); | 124 base::Bind(&MessageLoopProxyImplTest::AssertNotRun)); |
169 EXPECT_FALSE(ret); | 125 EXPECT_FALSE(ret); |
170 } | 126 } |
OLD | NEW |