Skip to content

Commit 0a28063

Browse files
committed
debug: base debug view tests
1 parent 1670e10 commit 0a28063

File tree

5 files changed

+95
-5
lines changed

5 files changed

+95
-5
lines changed

src/vs/workbench/parts/debug/browser/baseDebugView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function renderViewTree(container: HTMLElement): HTMLElement {
5050
return treeContainer;
5151
}
5252

53-
function replaceWhitespace(value: string): string {
53+
export function replaceWhitespace(value: string): string {
5454
const map: { [x: string]: string } = { '\n': '\\n', '\r': '\\r', '\t': '\\t' };
5555
return value.replace(/[\n\r\t]/g, char => map[char]);
5656
}
@@ -98,7 +98,7 @@ export function renderExpressionValue(expressionOrValue: IExpression | string, c
9898
}
9999
}
100100

101-
export function renderVariable(tree: ITree, variable: Variable, data: IVariableTemplateData, showChanged: boolean): void {
101+
export function renderVariable(variable: Variable, data: IVariableTemplateData, showChanged: boolean): void {
102102
if (variable.available) {
103103
data.name.textContent = replaceWhitespace(variable.name);
104104
data.name.title = variable.type ? variable.type : variable.name;

src/vs/workbench/parts/debug/electron-browser/replViewer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ export class ReplExpressionsRenderer implements IRenderer {
223223

224224
public renderElement(tree: ITree, element: any, templateId: string, templateData: any): void {
225225
if (templateId === ReplExpressionsRenderer.VARIABLE_TEMPLATE_ID) {
226-
renderVariable(tree, element, templateData, false);
226+
renderVariable(element, templateData, false);
227227
} else if (templateId === ReplExpressionsRenderer.EXPRESSION_TEMPLATE_ID) {
228228
this.renderExpression(tree, element, templateData);
229229
} else if (templateId === ReplExpressionsRenderer.SIMPLE_REPL_ELEMENT_TEMPLATE_ID) {

src/vs/workbench/parts/debug/electron-browser/variablesView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ export class VariablesRenderer implements IRenderer {
284284
}
285285
});
286286
} else {
287-
renderVariable(tree, variable, templateData, true);
287+
renderVariable(variable, templateData, true);
288288
}
289289
}
290290
}

src/vs/workbench/parts/debug/electron-browser/watchExpressionsView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ class WatchExpressionsRenderer implements IRenderer {
284284
if (templateId === WatchExpressionsRenderer.WATCH_EXPRESSION_TEMPLATE_ID) {
285285
this.renderWatchExpression(tree, element, templateData);
286286
} else {
287-
renderVariable(tree, element, templateData, true);
287+
renderVariable(element, templateData, true);
288288
}
289289
}
290290

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
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 { replaceWhitespace, renderExpressionValue, renderVariable } from 'vs/workbench/parts/debug/browser/baseDebugView';
8+
import * as dom from 'vs/base/browser/dom';
9+
import { Expression, Variable, Process, Scope, StackFrame, Thread } from 'vs/workbench/parts/debug/common/debugModel';
10+
import { MockSession } from 'vs/workbench/parts/debug/test/common/mockDebug';
11+
const $ = dom.$;
12+
13+
suite('Debug - Base Debug View', () => {
14+
15+
test('replace whitespace', () => {
16+
assert.equal(replaceWhitespace('hey there'), 'hey there');
17+
assert.equal(replaceWhitespace('hey there\n'), 'hey there\\n');
18+
assert.equal(replaceWhitespace('hey \r there\n\t'), 'hey \\r there\\n\\t');
19+
assert.equal(replaceWhitespace('hey \r\t\n\t\t\n there'), 'hey \\r\\t\\n\\t\\t\\n there');
20+
});
21+
22+
test('render expression value', () => {
23+
let container = $('.container');
24+
renderExpressionValue('render \n me', container, { showHover: true, preserveWhitespace: true });
25+
assert.equal(container.className, 'value');
26+
assert.equal(container.title, 'render \n me');
27+
assert.equal(container.textContent, 'render \n me');
28+
29+
const expression = new Expression('console');
30+
expression.value = 'Object';
31+
container = $('.container');
32+
renderExpressionValue(expression, container, { colorize: true });
33+
assert.equal(container.className, 'value unavailable error');
34+
35+
expression.available = true;
36+
expression.value = '"string value"';
37+
container = $('.container');
38+
renderExpressionValue(expression, container, { colorize: true });
39+
assert.equal(container.className, 'value string');
40+
assert.equal(container.textContent, '"string value"');
41+
42+
expression.type = 'boolean';
43+
container = $('.container');
44+
renderExpressionValue(expression, container, { colorize: true });
45+
assert.equal(container.className, 'value boolean');
46+
assert.equal(container.textContent, expression.value);
47+
48+
expression.value = 'this is a long string';
49+
container = $('.container');
50+
renderExpressionValue(expression, container, { colorize: true, maxValueLength: 4 });
51+
assert.equal(container.textContent, 'this...');
52+
});
53+
54+
test('render variable', () => {
55+
const rawSession = new MockSession();
56+
const process = new Process({ name: 'mockProcess', type: 'node', request: 'launch' }, rawSession);
57+
const thread = new Thread(process, 'mockthread', 1);
58+
const stackFrame = new StackFrame(thread, 1, null, 'app.js', 'normal', { startLineNumber: 1, startColumn: 1, endLineNumber: undefined, endColumn: undefined }, 0);
59+
const scope = new Scope(stackFrame, 1, 'local', 1, false, 10, 10);
60+
61+
let variable = new Variable(process, scope, 2, 'foo', 'bar.foo', undefined, 0, 0, {}, 'string');
62+
let expression = $('.');
63+
let name = $('.');
64+
let value = $('.');
65+
renderVariable(variable, { expression, name, value }, false);
66+
67+
assert.equal(name.textContent, 'foo');
68+
assert.equal(value.textContent, '');
69+
assert.equal(value.title, '');
70+
71+
variable.value = 'hey';
72+
expression = $('.');
73+
name = $('.');
74+
value = $('.');
75+
renderVariable(variable, { expression, name, value }, false);
76+
assert.equal(value.textContent, 'hey');
77+
assert.equal(name.textContent, 'foo:');
78+
assert.equal(name.title, 'string');
79+
80+
variable = new Variable(process, scope, 2, 'console', 'console', '5', 0, 0, { kind: 'virtual' });
81+
expression = $('.');
82+
name = $('.');
83+
value = $('.');
84+
renderVariable(variable, { expression, name, value }, false);
85+
assert.equal(name.className, 'virtual');
86+
assert.equal(name.textContent, 'console:');
87+
assert.equal(name.title, 'console');
88+
assert.equal(value.className, 'value number');
89+
});
90+
});

0 commit comments

Comments
 (0)