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
3520 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
});
21
22
after(async function () {
23
await settingsEditor.clearUserSettings();
24
});
25
26
describe('detach/attach', () => {
27
// https://github.com/microsoft/vscode/issues/137799
28
it('should support basic reconnection', async () => {
29
await terminal.createTerminal();
30
// TODO: Handle passing in an actual regex, not string
31
await terminal.assertTerminalGroups([
32
[{ name: '.*' }]
33
]);
34
35
// Get the terminal name
36
await terminal.assertTerminalGroups([
37
[{ name: '.*' }]
38
]);
39
const name = (await terminal.getTerminalGroups())[0][0].name!;
40
41
// Detach
42
await terminal.runCommand(TerminalCommandId.DetachSession);
43
await terminal.assertTerminalViewHidden();
44
45
// Attach
46
await terminal.runCommandWithValue(TerminalCommandIdWithValue.AttachToSession, name);
47
await terminal.assertTerminalGroups([
48
[{ name }]
49
]);
50
});
51
52
it.skip('should persist buffer content', async () => {
53
await terminal.createTerminal();
54
// TODO: Handle passing in an actual regex, not string
55
await terminal.assertTerminalGroups([
56
[{ name: '.*' }]
57
]);
58
59
// Get the terminal name
60
await terminal.assertTerminalGroups([
61
[{ name: '.*' }]
62
]);
63
const name = (await terminal.getTerminalGroups())[0][0].name!;
64
65
// Write in terminal
66
await terminal.runCommandInTerminal('echo terminal_test_content');
67
await terminal.waitForTerminalText(buffer => buffer.some(e => e.includes('terminal_test_content')));
68
69
// Detach
70
await terminal.runCommand(TerminalCommandId.DetachSession);
71
await terminal.assertTerminalViewHidden();
72
73
// Attach
74
await terminal.runCommandWithValue(TerminalCommandIdWithValue.AttachToSession, name);
75
await terminal.assertTerminalGroups([
76
[{ name }]
77
]);
78
// There can be line wrapping, so remove newlines and carriage returns #216464
79
await terminal.waitForTerminalText(buffer => buffer.some(e => e.replaceAll(/[\r\n]/g, '').includes('terminal_test_content')));
80
});
81
});
82
});
83
}
84
85