Index: runtime/vm/message_test.cc |
=================================================================== |
--- runtime/vm/message_test.cc (revision 4816) |
+++ runtime/vm/message_test.cc (working copy) |
@@ -15,12 +15,8 @@ |
explicit MessageQueueTestPeer(MessageQueue* queue) : queue_(queue) {} |
bool HasMessage() const { |
- // We don't really need to grab the monitor during the unit test, |
- // but it doesn't hurt. |
- queue_->monitor_.Enter(); |
bool result = (queue_->head_[Message::kNormalPriority] != NULL || |
queue_->head_[Message::kOOBPriority] != NULL); |
- queue_->monitor_.Exit(); |
return result; |
} |
@@ -29,6 +25,18 @@ |
}; |
+class MessageHandlerTestPeer { |
+ public: |
+ explicit MessageHandlerTestPeer(MessageHandler* handler) |
+ : handler_(handler) {} |
+ |
+ MessageQueue* queue() { return handler_->queue_; } |
+ |
+ private: |
+ MessageHandler* handler_; |
+}; |
+ |
+ |
static uint8_t* AllocMsg(const char* str) { |
return reinterpret_cast<uint8_t*>(strdup(str)); |
} |
@@ -54,12 +62,12 @@ |
EXPECT(queue_peer.HasMessage()); |
// Remove two messages. |
- Message* msg = queue.Dequeue(0); |
+ Message* msg = queue.Dequeue(); |
EXPECT(msg != NULL); |
EXPECT_STREQ("msg1", reinterpret_cast<char*>(msg->data())); |
EXPECT(queue_peer.HasMessage()); |
- msg = queue.Dequeue(0); |
+ msg = queue.Dequeue(); |
EXPECT(msg != NULL); |
EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data())); |
EXPECT(!queue_peer.HasMessage()); |
@@ -89,12 +97,12 @@ |
EXPECT(queue_peer.HasMessage()); |
// The higher priority message is delivered first. |
- Message* msg = queue.Dequeue(0); |
+ Message* msg = queue.Dequeue(); |
EXPECT(msg != NULL); |
EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data())); |
EXPECT(queue_peer.HasMessage()); |
- msg = queue.Dequeue(0); |
+ msg = queue.Dequeue(); |
EXPECT(msg != NULL); |
EXPECT_STREQ("msg1", reinterpret_cast<char*>(msg->data())); |
EXPECT(!queue_peer.HasMessage()); |
@@ -106,17 +114,18 @@ |
// A thread which receives an expected sequence of messages. |
static Monitor* sync = NULL; |
-static MessageQueue* shared_queue = NULL; |
+static MessageHandler* shared_handler = NULL; |
void MessageReceiver_start(uword unused) { |
// We only need an isolate here because the MonitorLocker in the |
// MessageQueue expects it, we don't need to initialize the isolate |
// as it does not run any dart code. |
Dart::CreateIsolate(NULL); |
- // Create a message queue and share it. |
- MessageQueue* queue = new MessageQueue(); |
- MessageQueueTestPeer peer(queue); |
- shared_queue = queue; |
+ // Create a message handler and share it. |
+ MessageHandler* handler = new MessageHandler(); |
+ MessageHandlerTestPeer handler_peer(handler); |
+ MessageQueueTestPeer queue_peer(handler_peer.queue()); |
+ shared_handler = handler; |
// Tell the other thread that the shared queue is ready. |
{ |
@@ -125,13 +134,13 @@ |
} |
// Wait for the other thread to fill the queue a bit. |
- while (!peer.HasMessage()) { |
+ while (!queue_peer.HasMessage()) { |
MonitorLocker ml(sync); |
ml.Wait(5); |
} |
for (int i = 0; i < 3; i++) { |
- Message* msg = queue->Dequeue(0); |
+ Message* msg = handler->Dequeue(0); |
EXPECT(msg != NULL); |
EXPECT_EQ(i + 10, msg->dest_port()); |
EXPECT_EQ(i + 100, msg->reply_port()); |
@@ -139,31 +148,31 @@ |
delete msg; |
} |
for (int i = 0; i < 3; i++) { |
- Message* msg = queue->Dequeue(0); |
+ Message* msg = handler->Dequeue(0); |
EXPECT(msg != NULL); |
EXPECT_EQ(i + 20, msg->dest_port()); |
EXPECT_EQ(i + 200, msg->reply_port()); |
EXPECT_EQ(i + 2000, *(reinterpret_cast<int*>(msg->data()))); |
delete msg; |
} |
- shared_queue = NULL; |
- delete queue; |
+ shared_handler = NULL; |
+ delete handler; |
Dart::ShutdownIsolate(); |
} |
-TEST_CASE(MessageQueue_WaitNotify) { |
+TEST_CASE(MessageHandler_WaitNotify) { |
sync = new Monitor(); |
int result = Thread::Start(MessageReceiver_start, 0); |
EXPECT_EQ(0, result); |
- // Wait for the shared queue to be created. |
- while (shared_queue == NULL) { |
+ // Wait for the shared handler to be created. |
+ while (shared_handler == NULL) { |
MonitorLocker ml(sync); |
ml.Wait(5); |
} |
- ASSERT(shared_queue != NULL); |
+ ASSERT(shared_handler != NULL); |
// Pile up three messages before the other thread runs. |
for (int i = 0; i < 3; i++) { |
@@ -172,7 +181,7 @@ |
Message* msg = |
new Message(i + 10, i + 100, reinterpret_cast<uint8_t*>(data), |
Message::kNormalPriority); |
- shared_queue->Enqueue(msg); |
+ shared_handler->PostMessage(msg); |
} |
// Wake the other thread and have it start consuming messages. |
@@ -190,7 +199,7 @@ |
Message* msg = |
new Message(i + 20, i + 200, reinterpret_cast<uint8_t*>(data), |
Message::kNormalPriority); |
- shared_queue->Enqueue(msg); |
+ shared_handler->PostMessage(msg); |
} |
sync = NULL; |
@@ -242,7 +251,7 @@ |
// One message is left in the queue. |
EXPECT(queue_peer.HasMessage()); |
- Message* msg = queue.Dequeue(0); |
+ Message* msg = queue.Dequeue(); |
EXPECT(msg != NULL); |
EXPECT_STREQ("msg2", reinterpret_cast<char*>(msg->data())); |