This repository has been archived by the owner on Jan 30, 2025. It is now read-only.
forked from puppeteer/puppeteer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfixtures.spec.ts
120 lines (112 loc) · 3.44 KB
/
fixtures.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/**
* @license
* Copyright 2019 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import {spawn, execSync} from 'child_process';
import path from 'path';
import expect from 'expect';
import {getTestState, setupTestBrowserHooks} from './mocha-utils.js';
import {waitEvent} from './utils.js';
describe('Fixtures', function () {
setupTestBrowserHooks();
it('dumpio option should work with pipe option', async () => {
const {defaultBrowserOptions, puppeteerPath, headless} =
await getTestState();
if (headless !== 'shell') {
// This test only works in the old headless mode.
return;
}
let dumpioData = '';
const options = Object.assign({}, defaultBrowserOptions, {
pipe: true,
dumpio: true,
});
const res = spawn('node', [
path.join(__dirname, '../fixtures', 'dumpio.js'),
puppeteerPath,
JSON.stringify(options),
]);
res.stderr.on('data', data => {
dumpioData += data.toString('utf8');
});
await new Promise(resolve => {
return res.on('close', resolve);
});
expect(dumpioData).toContain('message from dumpio');
});
it('should dump browser process stderr', async () => {
const {defaultBrowserOptions, isFirefox, puppeteerPath} =
await getTestState();
let dumpioData = '';
const options = Object.assign({}, defaultBrowserOptions, {dumpio: true});
const res = spawn('node', [
path.join(__dirname, '../fixtures', 'dumpio.js'),
puppeteerPath,
JSON.stringify(options),
]);
res.stderr.on('data', data => {
dumpioData += data.toString('utf8');
});
await new Promise(resolve => {
return res.on('close', resolve);
});
if (isFirefox && defaultBrowserOptions.protocol === 'webDriverBiDi') {
expect(dumpioData).toContain('WebDriver BiDi listening on ws://');
} else {
expect(dumpioData).toContain('DevTools listening on ws://');
}
});
it('should close the browser when the node process closes', async () => {
const {defaultBrowserOptions, puppeteerPath, puppeteer} =
await getTestState();
const options = Object.assign({}, defaultBrowserOptions, {
// Disable DUMPIO to cleanly read stdout.
dumpio: false,
});
const res = spawn('node', [
path.join(__dirname, '../fixtures', 'closeme.js'),
puppeteerPath,
JSON.stringify(options),
]);
let killed = false;
function killProcess() {
if (killed) {
return;
}
if (process.platform === 'win32') {
execSync(`taskkill /pid ${res.pid} /T /F`);
} else {
process.kill(res.pid!);
}
killed = true;
}
try {
let wsEndPointCallback: (value: string) => void;
const wsEndPointPromise = new Promise<string>(x => {
wsEndPointCallback = x;
});
let output = '';
res.stdout.on('data', data => {
output += data;
if (output.indexOf('\n')) {
wsEndPointCallback(output.substring(0, output.indexOf('\n')));
}
});
const connectOptions = Object.assign({}, defaultBrowserOptions, {
browserWSEndpoint: await wsEndPointPromise,
});
using browser = await puppeteer.connect(connectOptions);
const promises = [
waitEvent(browser, 'disconnected'),
new Promise(resolve => {
res.on('close', resolve);
}),
];
killProcess();
await Promise.all(promises);
} finally {
killProcess();
}
});
});