error-report.js (1961B)
1 { 2 // Plain-old Error object 3 let error = new Error("foobar"); 4 5 let report = createErrorReport(error); 6 assertEq(report.toStringResult, "Error: foobar"); 7 assertEq(report.name, "Error"); 8 assertEq(report.message, "foobar"); 9 } 10 11 { 12 // Error object with overwritten properties 13 let error = new Error("foobar"); 14 error.name = "MyError"; 15 error.message = "here"; 16 17 let report = createErrorReport(error); 18 assertEq(report.toStringResult, "MyError: here"); 19 assertEq(report.name, "Error"); 20 assertEq(report.message, "here"); 21 } 22 23 { 24 // Plain object, which doesn't quack (enough) like an Error 25 let obj = {name: "foo", message: "bar"}; 26 27 let report = createErrorReport(obj); 28 assertEq(report.toStringResult, "uncaught exception: [object Object]"); 29 assertEq(report.name, ""); 30 assertEq(report.message, "uncaught exception: [object Object]"); 31 } 32 33 { 34 setPrefValue("ducktyped_errors", false); 35 // Duck-typed error object (when not supported) 36 let obj = {name: "foo", message: "bar", fileName: "test", lineNumber: 0}; 37 38 let report = createErrorReport(obj); 39 assertEq(report.toStringResult, "uncaught exception: [object Object]"); 40 assertEq(report.name, ""); 41 assertEq(report.message, "uncaught exception: [object Object]"); 42 } 43 44 { 45 setPrefValue("ducktyped_errors", true); 46 // Duck-typed error object (when supported) 47 let obj = {name: "foo", message: "bar", fileName: "test", lineNumber: 0}; 48 49 let report = createErrorReport(obj); 50 assertEq(report.toStringResult, "foo: bar"); 51 assertEq(report.name, ""); 52 assertEq(report.message, "foo: bar"); 53 } 54 55 { 56 // toString failure 57 let obj = {toString() { throw "haha"; }}; 58 59 let report = createErrorReport(obj); 60 assertEq(report.toStringResult, "uncaught exception: unknown (can't convert to string)"); 61 assertEq(report.name, ""); 62 assertEq(report.message, "uncaught exception: unknown (can't convert to string)"); 63 }