| Index: runtime/vm/service_test.cc
|
| diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
|
| index c272b4c1951c66fce40c1c4f2fceb3d0ee1388c2..4ec886de87f853660ced8c210d57ad0e4c28015d 100644
|
| --- a/runtime/vm/service_test.cc
|
| +++ b/runtime/vm/service_test.cc
|
| @@ -115,6 +115,50 @@ static RawClass* GetClass(const Library& lib, const char* name) {
|
| }
|
|
|
|
|
| +TEST_CASE(Service_IsolateStickyError) {
|
| + const char* kScript =
|
| + "main() => throw 'HI THERE STICKY';\n";
|
| +
|
| + Isolate* isolate = thread->isolate();
|
| + isolate->set_is_runnable(true);
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
|
| + EXPECT_VALID(lib);
|
| + Library& vmlib = Library::Handle();
|
| + vmlib ^= Api::UnwrapHandle(lib);
|
| + EXPECT(!vmlib.IsNull());
|
| + Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
|
| + EXPECT(Dart_IsUnhandledExceptionError(result));
|
| + EXPECT(!Dart_HasStickyError());
|
| + EXPECT(Thread::Current()->sticky_error() == Error::null());
|
| +
|
| + {
|
| + TransitionNativeToVM transition(thread);
|
| +
|
| + JSONStream js;
|
| + isolate->PrintJSON(&js, false);
|
| + // No error property and no PauseExit state.
|
| + EXPECT_NOTSUBSTRING("\"error\":", js.ToCString());
|
| + EXPECT_NOTSUBSTRING("HI THERE STICKY", js.ToCString());
|
| + EXPECT_NOTSUBSTRING("PauseExit", js.ToCString());
|
| + }
|
| +
|
| + // Set the sticky error.
|
| + Dart_SetStickyError(result);
|
| + EXPECT(Dart_HasStickyError());
|
| +
|
| + {
|
| + TransitionNativeToVM transition(thread);
|
| +
|
| + JSONStream js;
|
| + isolate->PrintJSON(&js, false);
|
| + // Error and PauseExit set.
|
| + EXPECT_SUBSTRING("\"error\":", js.ToCString());
|
| + EXPECT_SUBSTRING("HI THERE STICKY", js.ToCString());
|
| + EXPECT_SUBSTRING("PauseExit", js.ToCString());
|
| + }
|
| +}
|
| +
|
| +
|
| TEST_CASE(Service_IdZones) {
|
| Zone* zone = thread->zone();
|
| Isolate* isolate = thread->isolate();
|
|
|