summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/errors/error-report.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/errors/error-report.js')
-rw-r--r--js/src/jit-test/tests/errors/error-report.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/errors/error-report.js b/js/src/jit-test/tests/errors/error-report.js
new file mode 100644
index 0000000000..978c25f9b8
--- /dev/null
+++ b/js/src/jit-test/tests/errors/error-report.js
@@ -0,0 +1,51 @@
+{
+ // Plain-old Error object
+ let error = new Error("foobar");
+
+ let report = createErrorReport(error);
+ assertEq(report.toStringResult, "Error: foobar");
+ assertEq(report.name, "Error");
+ assertEq(report.message, "foobar");
+}
+
+{
+ // Error object with overwritten properties
+ let error = new Error("foobar");
+ error.name = "MyError";
+ error.message = "here";
+
+ let report = createErrorReport(error);
+ assertEq(report.toStringResult, "MyError: here");
+ assertEq(report.name, "Error");
+ assertEq(report.message, "here");
+}
+
+{
+ // Plain object, which doesn't quack (enough) like an Error
+ let obj = {name: "foo", message: "bar"};
+
+ let report = createErrorReport(obj);
+ assertEq(report.toStringResult, "uncaught exception: [object Object]");
+ assertEq(report.name, "");
+ assertEq(report.message, "uncaught exception: [object Object]");
+}
+
+{
+ // Duck-typed error object
+ let obj = {name: "foo", message: "bar", fileName: "test", lineNumber: 0};
+
+ let report = createErrorReport(obj);
+ assertEq(report.toStringResult, "foo: bar");
+ assertEq(report.name, "");
+ assertEq(report.message, "foo: bar");
+}
+
+{
+ // toString failure
+ let obj = {toString() { throw "haha"; }};
+
+ let report = createErrorReport(obj);
+ assertEq(report.toStringResult, "uncaught exception: unknown (can't convert to string)");
+ assertEq(report.name, "");
+ assertEq(report.message, "uncaught exception: unknown (can't convert to string)");
+}