Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/debug/test/browser/variablesView.test.ts
3296 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 * as assert from 'assert';
7
import * as dom from '../../../../../base/browser/dom.js';
8
import { HighlightedLabel } from '../../../../../base/browser/ui/highlightedlabel/highlightedLabel.js';
9
import { DisposableStore } from '../../../../../base/common/lifecycle.js';
10
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';
11
import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js';
12
import { TestConfigurationService } from '../../../../../platform/configuration/test/common/testConfigurationService.js';
13
import { IHoverService } from '../../../../../platform/hover/browser/hover.js';
14
import { NullHoverService } from '../../../../../platform/hover/test/browser/nullHoverService.js';
15
import { TestInstantiationService } from '../../../../../platform/instantiation/test/common/instantiationServiceMock.js';
16
import { workbenchInstantiationService } from '../../../../test/browser/workbenchTestServices.js';
17
import { DebugExpressionRenderer } from '../../browser/debugExpressionRenderer.js';
18
import { VariablesRenderer } from '../../browser/variablesView.js';
19
import { IDebugService, IViewModel } from '../../common/debug.js';
20
import { Scope, StackFrame, Thread, Variable } from '../../common/debugModel.js';
21
import { MockDebugService, MockSession } from '../common/mockDebug.js';
22
23
const $ = dom.$;
24
25
function assertVariable(disposables: Pick<DisposableStore, "add">, variablesRenderer: VariablesRenderer, displayType: boolean) {
26
const session = new MockSession();
27
const thread = new Thread(session, 'mockthread', 1);
28
const range = {
29
startLineNumber: 1,
30
startColumn: 1,
31
endLineNumber: undefined!,
32
endColumn: undefined!
33
};
34
const stackFrame = new StackFrame(thread, 1, null!, 'app.js', 'normal', range, 0, true);
35
const scope = new Scope(stackFrame, 1, 'local', 1, false, 10, 10);
36
const node = {
37
element: new Variable(session, 1, scope, 2, 'foo', 'bar.foo', undefined, 0, 0, undefined, {}, 'string'),
38
depth: 0,
39
visibleChildrenCount: 1,
40
visibleChildIndex: -1,
41
collapsible: false,
42
collapsed: false,
43
visible: true,
44
filterData: undefined,
45
children: []
46
};
47
const expression = $('.');
48
const name = $('.');
49
const type = $('.');
50
const value = $('.');
51
const label = disposables.add(new HighlightedLabel(name));
52
const lazyButton = $('.');
53
const inputBoxContainer = $('.');
54
const elementDisposable = disposables.add(new DisposableStore());
55
const templateDisposable = disposables.add(new DisposableStore());
56
const currentElement = undefined;
57
const data = {
58
expression,
59
name,
60
type,
61
value,
62
label,
63
lazyButton,
64
inputBoxContainer,
65
elementDisposable,
66
templateDisposable,
67
currentElement
68
};
69
variablesRenderer.renderElement(node, 0, data);
70
assert.strictEqual(value.textContent, '');
71
assert.strictEqual(label.element.textContent, 'foo');
72
73
node.element.value = 'xpto';
74
variablesRenderer.renderElement(node, 0, data);
75
assert.strictEqual(value.textContent, 'xpto');
76
assert.strictEqual(type.textContent, displayType ? 'string =' : '');
77
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
78
79
variablesRenderer.disposeTemplate(data);
80
}
81
82
suite('Debug - Variable Debug View', () => {
83
const disposables = ensureNoDisposablesAreLeakedInTestSuite();
84
let variablesRenderer: VariablesRenderer;
85
let instantiationService: TestInstantiationService;
86
let expressionRenderer: DebugExpressionRenderer;
87
let configurationService: TestConfigurationService;
88
89
setup(() => {
90
instantiationService = workbenchInstantiationService(undefined, disposables);
91
configurationService = instantiationService.createInstance(TestConfigurationService);
92
instantiationService.stub(IConfigurationService, configurationService);
93
expressionRenderer = instantiationService.createInstance(DebugExpressionRenderer);
94
const debugService = new MockDebugService();
95
instantiationService.stub(IHoverService, NullHoverService);
96
debugService.getViewModel = () => <IViewModel>{ focusedStackFrame: undefined, getSelectedExpression: () => undefined };
97
debugService.getViewModel().getSelectedExpression = () => undefined;
98
instantiationService.stub(IDebugService, debugService);
99
});
100
101
test('variable expressions with display type', () => {
102
configurationService.setUserConfiguration('debug.showVariableTypes', true);
103
instantiationService.stub(IConfigurationService, configurationService);
104
variablesRenderer = instantiationService.createInstance(VariablesRenderer, expressionRenderer);
105
assertVariable(disposables, variablesRenderer, true);
106
});
107
108
test('variable expressions', () => {
109
configurationService.setUserConfiguration('debug.showVariableTypes', false);
110
instantiationService.stub(IConfigurationService, configurationService);
111
variablesRenderer = instantiationService.createInstance(VariablesRenderer, expressionRenderer);
112
assertVariable(disposables, variablesRenderer, false);
113
});
114
});
115
116