| Index: runtime/vm/port_test.cc
|
| ===================================================================
|
| --- runtime/vm/port_test.cc (revision 6698)
|
| +++ runtime/vm/port_test.cc (working copy)
|
| @@ -3,7 +3,7 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| #include "platform/assert.h"
|
| -#include "vm/message.h"
|
| +#include "vm/message_handler.h"
|
| #include "vm/os.h"
|
| #include "vm/port.h"
|
| #include "vm/unit_test.h"
|
| @@ -29,20 +29,22 @@
|
| };
|
|
|
|
|
| -class TestMessageHandler : public MessageHandler {
|
| +class PortTestMessageHandler : public MessageHandler {
|
| public:
|
| - TestMessageHandler() : notify_count(0) {}
|
| + PortTestMessageHandler() : notify_count(0) {}
|
|
|
| void MessageNotify(Message::Priority priority) {
|
| notify_count++;
|
| }
|
|
|
| + bool HandleMessage(Message* message) { return true; }
|
| +
|
| int notify_count;
|
| };
|
|
|
|
|
| TEST_CASE(PortMap_CreateAndCloseOnePort) {
|
| - TestMessageHandler handler;
|
| + PortTestMessageHandler handler;
|
| intptr_t port = PortMap::CreatePort(&handler);
|
| EXPECT_NE(0, port);
|
| EXPECT(PortMapTestPeer::IsActivePort(port));
|
| @@ -53,7 +55,7 @@
|
|
|
|
|
| TEST_CASE(PortMap_CreateAndCloseTwoPorts) {
|
| - TestMessageHandler handler;
|
| + PortTestMessageHandler handler;
|
| Dart_Port port1 = PortMap::CreatePort(&handler);
|
| Dart_Port port2 = PortMap::CreatePort(&handler);
|
| EXPECT(PortMapTestPeer::IsActivePort(port1));
|
| @@ -73,7 +75,7 @@
|
|
|
|
|
| TEST_CASE(PortMap_ClosePorts) {
|
| - TestMessageHandler handler;
|
| + PortTestMessageHandler handler;
|
| Dart_Port port1 = PortMap::CreatePort(&handler);
|
| Dart_Port port2 = PortMap::CreatePort(&handler);
|
| EXPECT(PortMapTestPeer::IsActivePort(port1));
|
| @@ -87,7 +89,7 @@
|
|
|
|
|
| TEST_CASE(PortMap_CreateManyPorts) {
|
| - TestMessageHandler handler;
|
| + PortTestMessageHandler handler;
|
| for (int i = 0; i < 32; i++) {
|
| Dart_Port port = PortMap::CreatePort(&handler);
|
| EXPECT(PortMapTestPeer::IsActivePort(port));
|
| @@ -98,7 +100,7 @@
|
|
|
|
|
| TEST_CASE(PortMap_SetLive) {
|
| - TestMessageHandler handler;
|
| + PortTestMessageHandler handler;
|
| intptr_t port = PortMap::CreatePort(&handler);
|
| EXPECT_NE(0, port);
|
| EXPECT(PortMapTestPeer::IsActivePort(port));
|
| @@ -115,7 +117,7 @@
|
|
|
|
|
| TEST_CASE(PortMap_PostMessage) {
|
| - TestMessageHandler handler;
|
| + PortTestMessageHandler handler;
|
| Dart_Port port = PortMap::CreatePort(&handler);
|
| EXPECT_EQ(0, handler.notify_count);
|
|
|
| @@ -135,98 +137,4 @@
|
| Message::kNormalPriority)));
|
| }
|
|
|
| -
|
| -// End-of-test marker.
|
| -static const intptr_t kEOT = 0xFFFF;
|
| -
|
| -
|
| -uint8_t* AllocIntData(intptr_t payload) {
|
| - intptr_t* result = reinterpret_cast<intptr_t*>(malloc(sizeof(payload)));
|
| - *result = payload;
|
| - return reinterpret_cast<uint8_t*>(result);
|
| -}
|
| -
|
| -
|
| -intptr_t GetIntData(uint8_t* data) {
|
| - return *reinterpret_cast<intptr_t*>(data);
|
| -}
|
| -
|
| -
|
| -static Message* NextMessage() {
|
| - Isolate* isolate = Isolate::Current();
|
| - Message* result = isolate->message_handler()->queue()->Dequeue(0);
|
| - return result;
|
| -}
|
| -
|
| -
|
| -void ThreadedPort_start(uword parameter) {
|
| - // TODO(turnidge): We only use the isolate to get access to its
|
| - // message handler. I should rewrite this test to use a
|
| - // TestMessageHandler instead.
|
| - Isolate* isolate = Dart::CreateIsolate(NULL);
|
| -
|
| - intptr_t remote = parameter;
|
| - intptr_t local = PortMap::CreatePort(isolate->message_handler());
|
| -
|
| - PortMap::PostMessage(new Message(
|
| - remote, 0, AllocIntData(local), Message::kNormalPriority));
|
| - intptr_t count = 0;
|
| - while (true) {
|
| - Message* msg = NextMessage();
|
| - EXPECT_EQ(local, msg->dest_port());
|
| - EXPECT(msg != NULL);
|
| - if (GetIntData(msg->data()) == kEOT) {
|
| - break;
|
| - }
|
| - EXPECT(GetIntData(msg->data()) == count);
|
| - delete msg;
|
| - PortMap::PostMessage(new Message(
|
| - remote, 0, AllocIntData(count * 2), Message::kNormalPriority));
|
| - count++;
|
| - }
|
| - PortMap::PostMessage(new Message(
|
| - remote, 0, AllocIntData(kEOT), Message::kNormalPriority));
|
| - Dart::ShutdownIsolate();
|
| -}
|
| -
|
| -
|
| -TEST_CASE(ThreadedPort) {
|
| - intptr_t local = PortMap::CreatePort(Isolate::Current()->message_handler());
|
| -
|
| - int result = Thread::Start(ThreadedPort_start, local);
|
| - EXPECT_EQ(0, result);
|
| -
|
| - Message* msg = NextMessage();
|
| - EXPECT_EQ(local, msg->dest_port());
|
| - EXPECT(msg != NULL);
|
| - intptr_t remote = GetIntData(msg->data()); // Get the remote port.
|
| - delete msg;
|
| -
|
| - for (intptr_t i = 0; i < 10; i++) {
|
| - PortMap::PostMessage(
|
| - new Message(remote, 0, AllocIntData(i), Message::kNormalPriority));
|
| - Message* msg = NextMessage();
|
| - EXPECT_EQ(local, msg->dest_port());
|
| - EXPECT(msg != NULL);
|
| - EXPECT_EQ(i * 2, GetIntData(msg->data()));
|
| - delete msg;
|
| - }
|
| -
|
| - PortMap::PostMessage(
|
| - new Message(remote, 0, AllocIntData(kEOT), Message::kNormalPriority));
|
| - msg = NextMessage();
|
| - EXPECT_EQ(local, msg->dest_port());
|
| - EXPECT(msg != NULL);
|
| - EXPECT_EQ(kEOT, GetIntData(msg->data()));
|
| - delete msg;
|
| -
|
| - // Give the spawned thread enough time to properly exit.
|
| - Monitor* waiter = new Monitor();
|
| - {
|
| - MonitorLocker ml(waiter);
|
| - ml.Wait(20);
|
| - }
|
| - delete waiter;
|
| -}
|
| -
|
| } // namespace dart
|
|
|