Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(266)

Side by Side Diff: runtime/vm/port_test.cc

Issue 8588040: Add a mid-sized integration test for the Dart Embedding Api which (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/port.cc ('k') | runtime/vm/unit_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/assert.h" 5 #include "vm/assert.h"
6 #include "vm/message_queue.h" 6 #include "vm/message_queue.h"
7 #include "vm/os.h" 7 #include "vm/os.h"
8 #include "vm/port.h" 8 #include "vm/port.h"
9 #include "vm/unit_test.h" 9 #include "vm/unit_test.h"
10 10
11 namespace dart { 11 namespace dart {
12 12
13 // Provides private access to PortMap for testing.
14 class PortMapTestPeer {
15 public:
16 static bool IsActivePort(Dart_Port port) {
17 MutexLocker ml(PortMap::mutex_);
18 return (PortMap::FindPort(port) >= 0);
19 }
20
21 static bool IsLivePort(Dart_Port port) {
22 MutexLocker ml(PortMap::mutex_);
23 intptr_t index = PortMap::FindPort(port);
24 if (index < 0) {
25 return false;
26 }
27 return PortMap::map_[index].live;
28 }
29 };
30
13 31
14 // Intercept the post message callback and just store a copy of the message. 32 // Intercept the post message callback and just store a copy of the message.
15 static const int kMaxSavedMsg = 80; 33 static const int kMaxSavedMsg = 80;
16 static char saved_msg[kMaxSavedMsg]; 34 static char saved_msg[kMaxSavedMsg];
17 static bool MyPostMessageCallback(Dart_Isolate dest_isolate, 35 static bool MyPostMessageCallback(Dart_Isolate dest_isolate,
18 Dart_Port dest_port, 36 Dart_Port dest_port,
19 Dart_Port reply_port, 37 Dart_Port reply_port,
20 Dart_Message dart_message) { 38 Dart_Message dart_message) {
21 const char* msg = reinterpret_cast<char*>(dart_message); 39 const char* msg = reinterpret_cast<char*>(dart_message);
22 OS::SNPrint(saved_msg, kMaxSavedMsg, "%s", msg); 40 OS::SNPrint(saved_msg, kMaxSavedMsg, "%s", msg);
(...skipping 15 matching lines...) Expand all
38 Dart_SetMessageCallbacks(&MyPostMessageCallback, &MyClosePortCallback); 56 Dart_SetMessageCallbacks(&MyPostMessageCallback, &MyClosePortCallback);
39 saved_port = 0; 57 saved_port = 0;
40 saved_msg[0] = '\0'; 58 saved_msg[0] = '\0';
41 } 59 }
42 60
43 61
44 TEST_CASE(PortMap_CreateAndCloseOnePort) { 62 TEST_CASE(PortMap_CreateAndCloseOnePort) {
45 InitPortMapTest(); 63 InitPortMapTest();
46 intptr_t port = PortMap::CreatePort(); 64 intptr_t port = PortMap::CreatePort();
47 EXPECT_NE(0, port); 65 EXPECT_NE(0, port);
48 EXPECT(PortMap::IsActivePort(port)); 66 EXPECT(PortMapTestPeer::IsActivePort(port));
49 67
50 PortMap::ClosePort(port); 68 PortMap::ClosePort(port);
51 EXPECT(!PortMap::IsActivePort(port)); 69 EXPECT(!PortMapTestPeer::IsActivePort(port));
52 70
53 // Embedder was notified of port closure. 71 // Embedder was notified of port closure.
54 EXPECT_EQ(port, saved_port); 72 EXPECT_EQ(port, saved_port);
55 } 73 }
56 74
57 75
58 TEST_CASE(PortMap_CreateAndCloseTwoPorts) { 76 TEST_CASE(PortMap_CreateAndCloseTwoPorts) {
59 InitPortMapTest(); 77 InitPortMapTest();
60 Dart_Port port1 = PortMap::CreatePort(); 78 Dart_Port port1 = PortMap::CreatePort();
61 Dart_Port port2 = PortMap::CreatePort(); 79 Dart_Port port2 = PortMap::CreatePort();
62 EXPECT(PortMap::IsActivePort(port1)); 80 EXPECT(PortMapTestPeer::IsActivePort(port1));
63 EXPECT(PortMap::IsActivePort(port2)); 81 EXPECT(PortMapTestPeer::IsActivePort(port2));
64 82
65 // Uniqueness. 83 // Uniqueness.
66 EXPECT_NE(port1, port2); 84 EXPECT_NE(port1, port2);
67 85
68 PortMap::ClosePort(port1); 86 PortMap::ClosePort(port1);
69 EXPECT(!PortMap::IsActivePort(port1)); 87 EXPECT(!PortMapTestPeer::IsActivePort(port1));
70 EXPECT(PortMap::IsActivePort(port2)); 88 EXPECT(PortMapTestPeer::IsActivePort(port2));
71 EXPECT_EQ(port1, saved_port); 89 EXPECT_EQ(port1, saved_port);
72 90
73 PortMap::ClosePort(port2); 91 PortMap::ClosePort(port2);
74 EXPECT(!PortMap::IsActivePort(port1)); 92 EXPECT(!PortMapTestPeer::IsActivePort(port1));
75 EXPECT(!PortMap::IsActivePort(port2)); 93 EXPECT(!PortMapTestPeer::IsActivePort(port2));
76 EXPECT_EQ(port2, saved_port); 94 EXPECT_EQ(port2, saved_port);
77 } 95 }
78 96
79 97
80 TEST_CASE(PortMap_ClosePorts) { 98 TEST_CASE(PortMap_ClosePorts) {
81 InitPortMapTest(); 99 InitPortMapTest();
82 Dart_Port port1 = PortMap::CreatePort(); 100 Dart_Port port1 = PortMap::CreatePort();
83 Dart_Port port2 = PortMap::CreatePort(); 101 Dart_Port port2 = PortMap::CreatePort();
84 EXPECT(PortMap::IsActivePort(port1)); 102 EXPECT(PortMapTestPeer::IsActivePort(port1));
85 EXPECT(PortMap::IsActivePort(port2)); 103 EXPECT(PortMapTestPeer::IsActivePort(port2));
86 104
87 // Close all ports at once. 105 // Close all ports at once.
88 PortMap::ClosePorts(); 106 PortMap::ClosePorts();
89 EXPECT(!PortMap::IsActivePort(port1)); 107 EXPECT(!PortMapTestPeer::IsActivePort(port1));
90 EXPECT(!PortMap::IsActivePort(port2)); 108 EXPECT(!PortMapTestPeer::IsActivePort(port2));
91 109
92 // Embedder is notified to close all ports as well. 110 // Embedder is notified to close all ports as well.
93 EXPECT_EQ(kCloseAllPorts, saved_port); 111 EXPECT_EQ(kCloseAllPorts, saved_port);
94 } 112 }
95 113
96 114
97 TEST_CASE(PortMap_CreateManyPorts) { 115 TEST_CASE(PortMap_CreateManyPorts) {
98 InitPortMapTest(); 116 InitPortMapTest();
99 for (int i = 0; i < 32; i++) { 117 for (int i = 0; i < 32; i++) {
100 Dart_Port port = PortMap::CreatePort(); 118 Dart_Port port = PortMap::CreatePort();
101 EXPECT(PortMap::IsActivePort(port)); 119 EXPECT(PortMapTestPeer::IsActivePort(port));
102 PortMap::ClosePort(port); 120 PortMap::ClosePort(port);
103 EXPECT(!PortMap::IsActivePort(port)); 121 EXPECT(!PortMapTestPeer::IsActivePort(port));
104 } 122 }
105 } 123 }
106 124
107 125
126 TEST_CASE(PortMap_SetLive) {
127 InitPortMapTest();
128 intptr_t port = PortMap::CreatePort();
129 EXPECT_NE(0, port);
130 EXPECT(PortMapTestPeer::IsActivePort(port));
131 EXPECT(!PortMapTestPeer::IsLivePort(port));
132
133 PortMap::SetLive(port);
134 EXPECT(PortMapTestPeer::IsActivePort(port));
135 EXPECT(PortMapTestPeer::IsLivePort(port));
136
137 PortMap::ClosePort(port);
138 EXPECT(!PortMapTestPeer::IsActivePort(port));
139 EXPECT(!PortMapTestPeer::IsLivePort(port));
140
141 // Embedder was notified of port closure.
142 EXPECT_EQ(port, saved_port);
143 }
144
145
108 TEST_CASE(PortMap_PostMessage) { 146 TEST_CASE(PortMap_PostMessage) {
109 InitPortMapTest(); 147 InitPortMapTest();
110 Dart_Port port = PortMap::CreatePort(); 148 Dart_Port port = PortMap::CreatePort();
111 EXPECT(PortMap::PostMessage( 149 EXPECT(PortMap::PostMessage(
112 port, 0, reinterpret_cast<Dart_Message>(strdup("msg")))); 150 port, 0, reinterpret_cast<Dart_Message>(strdup("msg"))));
113 151
114 // Check that the post message callback was called. 152 // Check that the post message callback was called.
115 EXPECT_STREQ("msg", saved_msg); 153 EXPECT_STREQ("msg", saved_msg);
116 PortMap::ClosePorts(); 154 PortMap::ClosePorts();
117 } 155 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 // Give the spawned thread enough time to properly exit. 263 // Give the spawned thread enough time to properly exit.
226 Monitor* waiter = new Monitor(); 264 Monitor* waiter = new Monitor();
227 { 265 {
228 MonitorLocker ml(waiter); 266 MonitorLocker ml(waiter);
229 ml.Wait(20); 267 ml.Wait(20);
230 } 268 }
231 delete waiter; 269 delete waiter;
232 } 270 }
233 271
234 } // namespace dart 272 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/port.cc ('k') | runtime/vm/unit_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698