OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 "platform/globals.h" | 5 #include "platform/globals.h" |
6 | 6 |
7 #include "include/dart_debugger_api.h" | 7 #include "include/dart_debugger_api.h" |
8 #include "vm/dart_api_impl.h" | 8 #include "vm/dart_api_impl.h" |
9 #include "vm/dart_entry.h" | 9 #include "vm/dart_entry.h" |
10 #include "vm/debugger.h" | 10 #include "vm/debugger.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 EXPECT_VALID(port); | 153 EXPECT_VALID(port); |
154 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 154 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
155 | 155 |
156 Array& service_msg = Array::Handle(); | 156 Array& service_msg = Array::Handle(); |
157 | 157 |
158 // Request an invalid code object. | 158 // Request an invalid code object. |
159 service_msg = | 159 service_msg = |
160 Eval(lib, "[0, port, '0', 'getObject', ['objectId'], ['code/0']]"); | 160 Eval(lib, "[0, port, '0', 'getObject', ['objectId'], ['code/0']]"); |
161 Service::HandleIsolateMessage(isolate, service_msg); | 161 Service::HandleIsolateMessage(isolate, service_msg); |
162 handler.HandleNextMessage(); | 162 handler.HandleNextMessage(); |
163 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 163 EXPECT_SUBSTRING("\"error\"", handler.msg()); |
164 | 164 |
165 // The following test checks that a code object can be found only | 165 // The following test checks that a code object can be found only |
166 // at compile_timestamp()-code.EntryPoint(). | 166 // at compile_timestamp()-code.EntryPoint(). |
167 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " | 167 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " |
168 "['objectId'], ['code/%" Px64"-%" Px "']]", | 168 "['objectId'], ['code/%" Px64"-%" Px "']]", |
169 compile_timestamp, | 169 compile_timestamp, |
170 entry); | 170 entry); |
171 Service::HandleIsolateMessage(isolate, service_msg); | 171 Service::HandleIsolateMessage(isolate, service_msg); |
172 handler.HandleNextMessage(); | 172 handler.HandleNextMessage(); |
173 { | 173 { |
174 // Only perform a partial match. | 174 // Only perform a partial match. |
175 const intptr_t kBufferSize = 512; | 175 const intptr_t kBufferSize = 512; |
176 char buffer[kBufferSize]; | 176 char buffer[kBufferSize]; |
177 OS::SNPrint(buffer, kBufferSize-1, | 177 OS::SNPrint(buffer, kBufferSize-1, |
178 "{\"type\":\"Code\",\"id\":\"code\\/%" Px64 "-%" Px "\",", | 178 "{\"type\":\"Code\",\"id\":\"code\\/%" Px64 "-%" Px "\",", |
179 compile_timestamp, | 179 compile_timestamp, |
180 entry); | 180 entry); |
181 EXPECT_SUBSTRING(buffer, handler.msg()); | 181 EXPECT_SUBSTRING(buffer, handler.msg()); |
182 } | 182 } |
183 | 183 |
184 // Request code object at compile_timestamp-code.EntryPoint() + 16 | 184 // Request code object at compile_timestamp-code.EntryPoint() + 16 |
185 // Expect this to fail because the address is not the entry point. | 185 // Expect this to fail because the address is not the entry point. |
186 uintptr_t address = entry + 16; | 186 uintptr_t address = entry + 16; |
187 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " | 187 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " |
188 "['objectId'], ['code/%" Px64"-%" Px "']]", | 188 "['objectId'], ['code/%" Px64"-%" Px "']]", |
189 compile_timestamp, | 189 compile_timestamp, |
190 address); | 190 address); |
191 Service::HandleIsolateMessage(isolate, service_msg); | 191 Service::HandleIsolateMessage(isolate, service_msg); |
192 handler.HandleNextMessage(); | 192 handler.HandleNextMessage(); |
193 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 193 EXPECT_SUBSTRING("\"error\"", handler.msg()); |
194 | 194 |
195 // Request code object at (compile_timestamp - 1)-code.EntryPoint() | 195 // Request code object at (compile_timestamp - 1)-code.EntryPoint() |
196 // Expect this to fail because the timestamp is wrong. | 196 // Expect this to fail because the timestamp is wrong. |
197 address = entry; | 197 address = entry; |
198 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " | 198 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " |
199 "['objectId'], ['code/%" Px64"-%" Px "']]", | 199 "['objectId'], ['code/%" Px64"-%" Px "']]", |
200 compile_timestamp - 1, | 200 compile_timestamp - 1, |
201 address); | 201 address); |
202 Service::HandleIsolateMessage(isolate, service_msg); | 202 Service::HandleIsolateMessage(isolate, service_msg); |
203 handler.HandleNextMessage(); | 203 handler.HandleNextMessage(); |
204 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 204 EXPECT_SUBSTRING("\"error\"", handler.msg()); |
205 | 205 |
206 // Request native code at address. Expect the null code object back. | 206 // Request native code at address. Expect the null code object back. |
207 address = last; | 207 address = last; |
208 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " | 208 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " |
209 "['objectId'], ['code/native-%" Px "']]", | 209 "['objectId'], ['code/native-%" Px "']]", |
210 address); | 210 address); |
211 Service::HandleIsolateMessage(isolate, service_msg); | 211 Service::HandleIsolateMessage(isolate, service_msg); |
212 handler.HandleNextMessage(); | 212 handler.HandleNextMessage(); |
213 EXPECT_SUBSTRING("{\"type\":\"null\",\"id\":\"objects\\/null\"," | 213 EXPECT_SUBSTRING("{\"type\":\"null\",\"id\":\"objects\\/null\"," |
214 "\"valueAsString\":\"null\"", | 214 "\"valueAsString\":\"null\"", |
215 handler.msg()); | 215 handler.msg()); |
216 | 216 |
217 // Request malformed native code. | 217 // Request malformed native code. |
218 service_msg = EvalF(lib, "[0, port, '0', 'getObject', ['objectId'], " | 218 service_msg = EvalF(lib, "[0, port, '0', 'getObject', ['objectId'], " |
219 "['code/native%" Px "']]", | 219 "['code/native%" Px "']]", |
220 address); | 220 address); |
221 Service::HandleIsolateMessage(isolate, service_msg); | 221 Service::HandleIsolateMessage(isolate, service_msg); |
222 handler.HandleNextMessage(); | 222 handler.HandleNextMessage(); |
223 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 223 EXPECT_SUBSTRING("\"error\"", handler.msg()); |
224 } | 224 } |
225 | 225 |
226 | 226 |
227 TEST_CASE(Service_TokenStream) { | 227 TEST_CASE(Service_TokenStream) { |
228 const char* kScript = | 228 const char* kScript = |
229 "var port;\n" // Set to our mock port by C++. | 229 "var port;\n" // Set to our mock port by C++. |
230 "\n" | 230 "\n" |
231 "main() {\n" | 231 "main() {\n" |
232 "}"; | 232 "}"; |
233 | 233 |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 Dart_Port port_id = PortMap::CreatePort(&handler); | 568 Dart_Port port_id = PortMap::CreatePort(&handler); |
569 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 569 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); |
570 EXPECT_VALID(port); | 570 EXPECT_VALID(port); |
571 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 571 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
572 | 572 |
573 Array& service_msg = Array::Handle(); | 573 Array& service_msg = Array::Handle(); |
574 service_msg = Eval(lib, "[0, port, '0', 'getCpuProfile', [], []]"); | 574 service_msg = Eval(lib, "[0, port, '0', 'getCpuProfile', [], []]"); |
575 Service::HandleIsolateMessage(isolate, service_msg); | 575 Service::HandleIsolateMessage(isolate, service_msg); |
576 handler.HandleNextMessage(); | 576 handler.HandleNextMessage(); |
577 // Expect error (tags required). | 577 // Expect error (tags required). |
578 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 578 EXPECT_SUBSTRING("\"error\"", handler.msg()); |
579 | 579 |
580 service_msg = | 580 service_msg = |
581 Eval(lib, "[0, port, '0', 'getCpuProfile', ['tags'], ['None']]"); | 581 Eval(lib, "[0, port, '0', 'getCpuProfile', ['tags'], ['None']]"); |
582 Service::HandleIsolateMessage(isolate, service_msg); | 582 Service::HandleIsolateMessage(isolate, service_msg); |
583 handler.HandleNextMessage(); | 583 handler.HandleNextMessage(); |
584 // Expect profile | 584 // Expect profile |
585 EXPECT_SUBSTRING("\"type\":\"_CpuProfile\"", handler.msg()); | 585 EXPECT_SUBSTRING("\"type\":\"_CpuProfile\"", handler.msg()); |
586 | 586 |
587 service_msg = | 587 service_msg = |
588 Eval(lib, "[0, port, '0', 'getCpuProfile', ['tags'], ['Bogus']]"); | 588 Eval(lib, "[0, port, '0', 'getCpuProfile', ['tags'], ['Bogus']]"); |
589 Service::HandleIsolateMessage(isolate, service_msg); | 589 Service::HandleIsolateMessage(isolate, service_msg); |
590 handler.HandleNextMessage(); | 590 handler.HandleNextMessage(); |
591 // Expect error. | 591 // Expect error. |
592 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 592 EXPECT_SUBSTRING("\"error\"", handler.msg()); |
593 } | 593 } |
594 | 594 |
595 #endif // !defined(TARGET_ARCH_ARM64) | 595 #endif // !defined(TARGET_ARCH_ARM64) |
596 | 596 |
597 } // namespace dart | 597 } // namespace dart |
OLD | NEW |