Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/test/smoke/src/areas/terminal/terminal-persistence.test.ts
5359 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Application, Terminal, TerminalCommandId, TerminalCommandIdWithValue, SettingsEditor } from '../../../../automation';
7
import { setTerminalTestSettings } from './terminal-helpers';
8
9
export function setup(options?: { skipSuite: boolean }) {
10
(options?.skipSuite ? describe.skip : describe)('Terminal Persistence', () => {
11
// Acquire automation API
12
let terminal: Terminal;
13
let settingsEditor: SettingsEditor;
14
15
before(async function () {
16
const app = this.app as Application;
17
terminal = app.workbench.terminal;
18
settingsEditor = app.workbench.settingsEditor;
19
await setTerminalTestSettings(app, [
20
// Use ${process} for terminal title to ensure stable names for detach/attach
21
['terminal.integrated.tabs.title', '"${process}"']
22
]);
23
});
24
25
after(async function () {
26
await settingsEditor.clearUserSettings();
27
});
28
29
describe('detach/attach', () => {
30
// https://github.com/microsoft/vscode/issues/137799
31
it('should support basic reconnection', async () => {
32
await terminal.createTerminal();
33
// TODO: Handle passing in an actual regex, not string
34
await terminal.assertTerminalGroups([
35
[{ name: '.*' }]
36
]);
37
38
// Get the terminal name
39
await terminal.assertTerminalGroups([
40
[{ name: '.*' }]
41
]);
42
const name = (await terminal.getTerminalGroups())[0][0].name!;
43
44
// Detach
45
await terminal.runCommand(TerminalCommandId.DetachSession);
46
await terminal.assertTerminalViewHidden();
47
48
// Attach
49
await terminal.runCommandWithValue(TerminalCommandIdWithValue.AttachToSession, name);
50
await terminal.assertTerminalGroups([
51
[{ name }]
52
]);
53
});
54
55
it.skip('should persist buffer content', async () => {
56
await terminal.createTerminal();
57
// TODO: Handle passing in an actual regex, not string
58
await terminal.assertTerminalGroups([
59
[{ name: '.*' }]
60
]);
61
62
// Get the terminal name
63
await terminal.assertTerminalGroups([
64
[{ name: '.*' }]
65
]);
66
const name = (await terminal.getTerminalGroups())[0][0].name!;
67
68
// Write in terminal
69
await terminal.runCommandInTerminal('echo terminal_test_content');
70
await terminal.waitForTerminalText(buffer => buffer.some(e => e.includes('terminal_test_content')));
71
72
// Detach
73
await terminal.runCommand(TerminalCommandId.DetachSession);
74
await terminal.assertTerminalViewHidden();
75
76
// Attach
77
await terminal.runCommandWithValue(TerminalCommandIdWithValue.AttachToSession, name);
78
await terminal.assertTerminalGroups([
79
[{ name }]
80
]);
81
// There can be line wrapping, so remove newlines and carriage returns #216464
82
await terminal.waitForTerminalText(buffer => buffer.some(e => e.replaceAll(/[\r\n]/g, '').includes('terminal_test_content')));
83
});
84
});
85
});
86
}
87
88