Skip to content

Commit 5447948

Browse files
authored
Upgrade puppeteer to 23.1.0. (#14261)
Fixes #14141 Newer versions have an issue with headless mode. Also fixes test flakiness with the new version. Contributed on behalf of STMicroelectronics Signed-off-by: Thomas Mäder <[email protected]>
1 parent 4612d3d commit 5447948

File tree

10 files changed

+394
-132
lines changed

10 files changed

+394
-132
lines changed

dev-packages/cli/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@
5151
"log-update": "^4.0.0",
5252
"mocha": "^10.1.0",
5353
"patch-package": "^8.0.0",
54-
"puppeteer": "19.7.2",
55-
"puppeteer-core": "19.7.2",
54+
"puppeteer": "23.1.0",
55+
"puppeteer-core": "23.1.0",
5656
"puppeteer-to-istanbul": "1.4.0",
5757
"temp": "^0.9.1",
5858
"tslib": "^2.6.2",

dev-packages/cli/src/run-test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,5 @@ export default async function runTest(options: TestOptions): Promise<void> {
8484
? `http://[${address}]:${port}`
8585
: `http://${address}:${port}`;
8686
await testPage.goto(url);
87+
await testPage.bringToFront();
8788
}

dev-packages/cli/src/theia.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,10 @@ async function theiaCli(): Promise<void> {
588588
if (!process.env.THEIA_CONFIG_DIR) {
589589
process.env.THEIA_CONFIG_DIR = temp.track().mkdirSync('theia-test-config-dir');
590590
}
591+
const args = ['--no-sandbox'];
592+
if (!testInspect) {
593+
args.push('--headless=old');
594+
}
591595
await runTest({
592596
start: () => new Promise((resolve, reject) => {
593597
const serverProcess = manager.start(toStringArray(theiaArgs));
@@ -596,11 +600,13 @@ async function theiaCli(): Promise<void> {
596600
serverProcess.on('close', (code, signal) => reject(`Server process exited unexpectedly: ${code ?? signal}`));
597601
}),
598602
launch: {
599-
args: ['--no-sandbox'],
603+
args: args,
600604
// eslint-disable-next-line no-null/no-null
601605
defaultViewport: null, // view port can take available space instead of 800x600 default
602606
devtools: testInspect,
603-
executablePath: executablePath()
607+
headless: testInspect ? false : 'shell',
608+
executablePath: executablePath(),
609+
protocolTimeout: 600000
604610
},
605611
files: {
606612
extension: testExtension,

examples/api-tests/src/explorer-open-close.spec.js

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ describe('Explorer and Editor - open and close', function () {
123123

124124
async function openEditor() {
125125
await editorManager.open(fileUri, { mode: 'activate' });
126-
await waitLanguageServerReady();
127126
const activeEditor = /** @type {MonacoEditor} */ MonacoEditor.get(editorManager.activeEditor);
128127
assert.isDefined(activeEditor);
129128
assert.equal(activeEditor.uri.resolveToAbsolute().toString(), fileUri.resolveToAbsolute().toString());
@@ -135,21 +134,4 @@ describe('Explorer and Editor - open and close', function () {
135134
assert.isUndefined(activeEditor);
136135
}
137136

138-
async function waitLanguageServerReady() {
139-
// quite a bit of jitter in the "Initializing LS" status bar entry,
140-
// so we want to read a few times in a row that it's done (undefined)
141-
const MAX_N = 5
142-
let n = MAX_N;
143-
while (n > 0) {
144-
await pause(1);
145-
if (progressStatusBarItem.currentProgress) {
146-
n = MAX_N;
147-
} else {
148-
n--;
149-
}
150-
if (n < MAX_N) {
151-
console.debug('n = ' + n);
152-
}
153-
}
154-
}
155137
});

examples/api-tests/src/find-replace.spec.js

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -143,28 +143,9 @@ describe('Find and Replace', function () {
143143

144144
async function openEditor() {
145145
await editorManager.open(fileUri, { mode: 'activate' });
146-
await waitLanguageServerReady();
147146
const activeEditor = /** @type {MonacoEditor} */ MonacoEditor.get(editorManager.activeEditor);
148147
assert.isDefined(activeEditor);
149148
// @ts-ignore
150149
assert.equal(activeEditor.uri.resolveToAbsolute().toString(), fileUri.resolveToAbsolute().toString());
151150
}
152-
153-
async function waitLanguageServerReady() {
154-
// quite a bit of jitter in the "Initializing LS" status bar entry,
155-
// so we want to read a few times in a row that it's done (undefined)
156-
const MAX_N = 5
157-
let n = MAX_N;
158-
while (n > 0) {
159-
await pause(1);
160-
if (progressStatusBarItem.currentProgress) {
161-
n = MAX_N;
162-
} else {
163-
n--;
164-
}
165-
if (n < 5) {
166-
console.debug('n = ' + n);
167-
}
168-
}
169-
}
170151
});

examples/api-tests/src/scm.spec.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
1515
// *****************************************************************************
1616

17-
18-
19-
2017
// @ts-check
2118
describe('SCM', function () {
2219

@@ -31,6 +28,8 @@ describe('SCM', function () {
3128
const { ScmService } = require('@theia/scm/lib/browser/scm-service');
3229
const { ScmWidget } = require('@theia/scm/lib/browser/scm-widget');
3330
const { CommandRegistry } = require('@theia/core/lib/common');
31+
const { PreferenceService } = require('@theia/core/lib/browser');
32+
3433

3534
/** @type {import('inversify').Container} */
3635
const container = window['theia'].container;
@@ -40,6 +39,7 @@ describe('SCM', function () {
4039
const service = container.get(ScmService);
4140
const commandRegistry = container.get(CommandRegistry);
4241
const pluginService = container.get(HostedPluginSupport);
42+
const preferences = container.get(PreferenceService);
4343

4444
/** @type {ScmWidget} */
4545
let scmWidget;
@@ -81,6 +81,12 @@ describe('SCM', function () {
8181
return success;
8282
}
8383

84+
85+
before(async () => {
86+
preferences.set('git.autoRepositoryDetection', true);
87+
preferences.set('git.openRepositoryInParentFolders', 'always');
88+
});
89+
8490
beforeEach(async () => {
8591
if (!pluginService.getPlugin(gitPluginId)) {
8692
throw new Error(gitPluginId + ' should be started');

examples/api-tests/src/typescript.spec.js

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
// @ts-check
1818
describe('TypeScript', function () {
19-
this.timeout(30_000);
19+
this.timeout(200_000);
2020

2121
const { assert } = chai;
2222
const { timeout } = require('@theia/core/lib/common/promise-util');
@@ -94,6 +94,24 @@ describe('TypeScript', function () {
9494
await preferences.set('files.autoSave', originalAutoSaveValue);
9595
})
9696

97+
async function waitLanguageServerReady() {
98+
// quite a bit of jitter in the "Initializing LS" status bar entry,
99+
// so we want to read a few times in a row that it's done (undefined)
100+
const MAX_N = 5
101+
let n = MAX_N;
102+
while (n > 0) {
103+
await timeout(1000);
104+
if (progressStatusBarItem.currentProgress) {
105+
n = MAX_N;
106+
} else {
107+
n--;
108+
}
109+
if (n < 5) {
110+
console.debug('n = ' + n);
111+
}
112+
}
113+
}
114+
97115
/**
98116
* @param {Uri.default} uri
99117
* @param {boolean} preview
@@ -106,8 +124,8 @@ describe('TypeScript', function () {
106124
// wait till tsserver is running, see:
107125
// https://github.com/microsoft/vscode/blob/93cbbc5cae50e9f5f5046343c751b6d010468200/extensions/typescript-language-features/src/extension.ts#L98-L103
108126
await waitForAnimation(() => contextKeyService.match('typescript.isManagedFile'));
109-
// https://github.com/microsoft/vscode/blob/4aac84268c6226d23828cc6a1fe45ee3982927f0/extensions/typescript-language-features/src/typescriptServiceClient.ts#L911
110-
await waitForAnimation(() => !progressStatusBarItem.currentProgress);
127+
128+
waitLanguageServerReady();
111129
return /** @type {MonacoEditor} */ (editor);
112130
}
113131

@@ -388,6 +406,14 @@ describe('TypeScript', function () {
388406
assert.isTrue(contextKeyService.match('editorTextFocus'));
389407
assert.isTrue(contextKeyService.match('suggestWidgetVisible'));
390408

409+
410+
const suggestController = editor.getControl().getContribution('editor.contrib.suggestController');
411+
412+
waitForAnimation(() => {
413+
const content = nodeAsString(suggestController ? ['_widget']?.['_value']?.['element']?.['domNode']);
414+
return !content.includes('loading');
415+
});
416+
391417
// May need a couple extra "Enter" being sent for the suggest to be accepted
392418
keybindings.dispatchKeyDown('Enter');
393419
await waitForAnimation(() => {
@@ -398,7 +424,7 @@ describe('TypeScript', function () {
398424
return false;
399425
}
400426
return true;
401-
}, 5000, 'Suggest widget has not been dismissed despite attempts to accept suggestion');
427+
}, 20000, 'Suggest widget has not been dismissed despite attempts to accept suggestion');
402428

403429
assert.isTrue(contextKeyService.match('editorTextFocus'));
404430
assert.isFalse(contextKeyService.match('suggestWidgetVisible'));
@@ -542,6 +568,7 @@ describe('TypeScript', function () {
542568
});
543569

544570
it('editor.action.showHover', async function () {
571+
545572
const editor = await openEditor(demoFileUri);
546573
// class |DemoClass);
547574
editor.getControl().setPosition({ lineNumber: 8, column: 7 });
@@ -558,6 +585,11 @@ describe('TypeScript', function () {
558585
assert.isTrue(contextKeyService.match('editorHoverVisible'));
559586
assert.isTrue(contextKeyService.match('editorTextFocus'));
560587

588+
waitForAnimation(() => {
589+
const content = nodeAsString(hover['_contentWidget']?.['_widget']?.['_hover']?.['contentsDomNode']);
590+
return !content.includes('loading');
591+
});
592+
561593
assert.deepEqual(nodeAsString(hover['_contentWidget']?.['_widget']?.['_hover']?.['contentsDomNode']).trim(), `
562594
DIV {
563595
DIV {

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
"mkdirp": "^0.5.0",
4646
"node-gyp": "^9.0.0",
4747
"nyc": "^15.0.0",
48-
"puppeteer": "19.7.2",
49-
"puppeteer-core": "19.7.2",
48+
"puppeteer": "23.1.0",
49+
"puppeteer-core": "23.1.0",
5050
"puppeteer-to-istanbul": "1.4.0",
5151
"rimraf": "^5.0.0",
5252
"sinon": "^12.0.0",

packages/core/src/browser/widgets/react-widget.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ export abstract class ReactWidget extends BaseWidget {
3838

3939
protected override onUpdateRequest(msg: Message): void {
4040
super.onUpdateRequest(msg);
41-
this.nodeRoot.render(<React.Fragment>{this.render()}</React.Fragment>);
41+
if (!this.isDisposed) {
42+
this.nodeRoot.render(<React.Fragment>{this.render()}</React.Fragment>);
43+
}
4244
}
4345

4446
/**

0 commit comments

Comments
 (0)