import { describe, it, beforeEach, expect } from "@jest/globals" import { UserError, ErrorCode } from "../../src/exceptions" import { PyScriptApp } from "../../src/main" describe("Test withUserErrorHandler", () => { class MyApp extends PyScriptApp { myRealMain: any; constructor(myRealMain) { super(); this.myRealMain = myRealMain; } _realMain() { this.myRealMain(); } } beforeEach(() => { // Ensure we always have a clean body document.body.innerHTML = `
Hello World
`; }); it("userError doesn't stop execution", () => { function myRealMain() { throw new UserError(ErrorCode.GENERIC, "Computer says no"); } const app = new MyApp(myRealMain); app.main(); const banners = document.getElementsByClassName("alert-banner"); expect(banners.length).toBe(1); expect(banners[0].innerHTML).toBe("(PY0000): Computer says no"); }); it("userError escapes by default", () => { function myRealMain() { throw new UserError(ErrorCode.GENERIC, "hello
"); } const app = new MyApp(myRealMain); app.main(); const banners = document.getElementsByClassName("alert-banner"); expect(banners.length).toBe(1); expect(banners[0].innerHTML).toBe("(PY0000): hello <br>"); }); it("userError messageType=html don't escape", () => { function myRealMain() { throw new UserError(ErrorCode.GENERIC, "hello
", "html"); } const app = new MyApp(myRealMain); app.main(); const banners = document.getElementsByClassName("alert-banner"); expect(banners.length).toBe(1); expect(banners[0].innerHTML).toBe("(PY0000): hello
"); }); it("any other exception should stop execution and raise", () => { function myRealMain() { throw new Error("Explosions!"); } const app = new MyApp(myRealMain); expect(() => app.main()).toThrow(new Error("Explosions!")) }); });