| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #include "jsapi-tests/tests.h" |
| |
| using JS::CreateError; |
| using JS::Rooted; |
| using JS::ObjectValue; |
| using JS::Value; |
| |
| static size_t uncaughtCount = 0; |
| |
| BEGIN_TEST(testUncaughtError) |
| { |
| JSErrorReporter old = JS_SetErrorReporter(rt, UncaughtErrorReporter); |
| |
| CHECK(uncaughtCount == 0); |
| |
| Rooted<JSString*> empty(cx, JS_GetEmptyString(JS_GetRuntime(cx))); |
| if (!empty) |
| return false; |
| |
| Rooted<Value> err(cx); |
| if (!CreateError(cx, JSEXN_TYPEERR, nullptr, empty, 0, 0, nullptr, empty, &err)) |
| return false; |
| |
| Rooted<JSObject*> errObj(cx, &err.toObject()); |
| if (!JS_SetProperty(cx, errObj, "fileName", err)) |
| return false; |
| if (!JS_SetProperty(cx, errObj, "lineNumber", err)) |
| return false; |
| if (!JS_SetProperty(cx, errObj, "columnNumber", err)) |
| return false; |
| if (!JS_SetProperty(cx, errObj, "stack", err)) |
| return false; |
| if (!JS_SetProperty(cx, errObj, "message", err)) |
| return false; |
| |
| JS_SetPendingException(cx, err); |
| JS_ReportPendingException(cx); |
| |
| CHECK(uncaughtCount == 1); |
| |
| JS_SetErrorReporter(rt, old); |
| |
| return true; |
| } |
| |
| static void |
| UncaughtErrorReporter(JSContext* cx, const char* message, JSErrorReport* report) |
| { |
| uncaughtCount++; |
| } |
| |
| END_TEST(testUncaughtError) |