Files
pyscript/pyscriptjs/tests/unit/main.test.ts
Hood Chatham 08f34f748b Apply prettier to css, html, js, md, ts, and yml (#1249)
* Apply prettier to css, js, html, md, ts, and yml

As a followup I will add prettier to the .pre-commit config.
This patch is 100% generated by prettier.
I used a forked version of prettier that understands the
py-script tag.
See https://github.com/hoodmane/pyscript-prettier-precommit
for more info.

* Apply old pre-commit

* Revert some problems

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Revert some changes

* More changes

* Fix pre-commit

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2023-03-06 14:20:21 +00:00

69 lines
2.1 KiB
TypeScript

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 = `<div>Hello World</div>`;
});
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 <br>');
}
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 &lt;br&gt;');
});
it("userError messageType=html don't escape", () => {
function myRealMain() {
throw new UserError(ErrorCode.GENERIC, 'hello <br>', '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 <br>');
});
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!'));
});
});