Skip to content

Commit

Permalink
chore: fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jrandolf committed Sep 1, 2022
1 parent 8c6171a commit ecf5bc8
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 36 deletions.
79 changes: 44 additions & 35 deletions src/common/Frame.ts
Expand Up @@ -796,7 +796,11 @@ export class Frame {
script.addEventListener(
'error',
event => {
rej(event.message ?? 'Could not load script');
let message = 'Could not load script';
if (event instanceof ErrorEvent) {
message = event.message ?? message;
}
rej(message);
},
{once: true}
);
Expand Down Expand Up @@ -830,60 +834,65 @@ export class Frame {
options: FrameAddStyleTagOptions
): Promise<ElementHandle<HTMLStyleElement | HTMLLinkElement>> {
let {content = ''} = options;
const {path, url} = options;
if (+!!url + +!!path + +!!content > 1) {
const {path} = options;
if (+!!options.url + +!!path + +!!content !== 1) {
throw new Error(
'Exactly one of `url`, `path`, or `content` may be specified.'
'Exactly one of `url`, `path`, or `content` must be specified.'
);
}

if (url) {
try {
return this.worlds[PUPPETEER_WORLD].evaluateHandle(async url => {
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = url;
const promise = new Promise((res, rej) => {
link.onload = res;
link.onerror = rej;
});
document.head.appendChild(link);
await promise;
return link;
}, url);
} catch (error) {
throw new Error(`Loading style from ${url} failed`);
}
}

if (path) {
let fs: typeof import('fs').promises;
try {
fs = (await importFS()).promises;
} catch (error) {
if (error instanceof TypeError) {
throw new Error(
'Cannot pass a filepath to addStyleTag in the browser environment.'
'Can only pass a file path in a Node-like environment.'
);
}
throw error;
}

content = await fs.readFile(path, 'utf8');
content += '/*# sourceURL=' + path.replace(/\n/g, '') + '*/';
options.content = content;
}

return this.worlds[PUPPETEER_WORLD].evaluateHandle(async content => {
const style = document.createElement('style');
style.appendChild(document.createTextNode(content));
const promise = new Promise((res, rej) => {
style.onload = res;
style.onerror = rej;
});
document.head.appendChild(style);
await promise;
return style;
}, content);
return this.worlds[MAIN_WORLD].transferHandle(
await this.worlds[PUPPETEER_WORLD].evaluateHandle(
async ({url, content}) => {
let element: HTMLLinkElement | HTMLStyleElement;
if (url) {
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = url;
element = link;
} else {
element = document.createElement('style');
element.appendChild(document.createTextNode(content!));
}
const promise = new Promise((res, rej) => {
element.addEventListener('load', res, {once: true});
element.addEventListener(
'error',
event => {
let message = 'Could not load style';
if (event instanceof ErrorEvent) {
message = event.message ?? message;
}
rej(message);
},
{once: true}
);
});
document.head.appendChild(element);
await promise;
return element;
},
options
)
);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion test/src/page.spec.ts
Expand Up @@ -1824,7 +1824,7 @@ describe('Page', function () {
} catch (error_) {
error = error_ as Error;
}
expect(error.message).toBe('Loading style from /nonexistfile.js failed');
expect(error.message).toContain('Could not load style');
});

it('should work with a path', async () => {
Expand Down

0 comments on commit ecf5bc8

Please sign in to comment.