mirror of
https://github.com/Microsoft/vscode
synced 2024-10-05 19:02:54 +00:00
Implemented the requested changes.
Registed new setting in debug.contribution.ts Changed the two settings for a single setting (debug.showVariableTypes) Made the renderer functions listen to changes so it re-renders elements Added a different styling for the type in variable panel Changed function names to use camelCase Co-authored-by: Diogo Pinto <diogotfpinto@tecnico.ulisboa.pt>
This commit is contained in:
parent
cdeeb50a38
commit
7453779c77
|
@ -49,6 +49,7 @@ export interface IRenderValueOptions {
|
|||
export interface IVariableTemplateData {
|
||||
expression: HTMLElement;
|
||||
name: HTMLElement;
|
||||
type: HTMLElement;
|
||||
value: HTMLElement;
|
||||
label: HighlightedLabel;
|
||||
lazyButton: HTMLElement;
|
||||
|
@ -132,10 +133,20 @@ export function renderExpressionValue(expressionOrValue: IExpressionValue | stri
|
|||
|
||||
export function renderVariable(store: DisposableStore, commandService: ICommandService, hoverService: IHoverService, variable: Variable, data: IVariableTemplateData, showChanged: boolean, highlights: IHighlight[], linkDetector?: LinkDetector, displayType?: boolean): void {
|
||||
if (variable.available) {
|
||||
data.type.textContent = '';
|
||||
let text = variable.name;
|
||||
if (variable.value && typeof variable.name === 'string') {
|
||||
if (variable.type && displayType) {
|
||||
text += ': ' + variable.type + ' =';
|
||||
text += ': ';
|
||||
//render type
|
||||
const type = variable.type + ' =';
|
||||
if (linkDetector) {
|
||||
data.type.textContent = '';
|
||||
const session = (variable instanceof ExpressionContainer) ? variable.getSession() : undefined;
|
||||
data.type.appendChild(linkDetector.linkify(type, false, session ? session.root : undefined, true));
|
||||
} else {
|
||||
data.type.textContent = type;
|
||||
}
|
||||
} else {
|
||||
text += ' =';
|
||||
}
|
||||
|
@ -176,6 +187,7 @@ export interface IInputBoxOptions {
|
|||
export interface IExpressionTemplateData {
|
||||
expression: HTMLElement;
|
||||
name: HTMLSpanElement;
|
||||
type: HTMLSpanElement;
|
||||
value: HTMLSpanElement;
|
||||
inputBoxContainer: HTMLElement;
|
||||
actionBar?: ActionBar;
|
||||
|
@ -234,6 +246,7 @@ export abstract class AbstractExpressionsRenderer<T = IExpression> implements IT
|
|||
const lazyButton = dom.append(expression, $('span.lazy-button'));
|
||||
lazyButton.classList.add(...ThemeIcon.asClassNameArray(Codicon.eye));
|
||||
templateDisposable.add(this.hoverService.setupUpdatableHover(getDefaultHoverDelegate('mouse'), lazyButton, localize('debug.lazyButton.tooltip', "Click to expand")));
|
||||
const type = dom.append(expression, $('span.type'));
|
||||
const value = dom.append(expression, $('span.value'));
|
||||
|
||||
const label = templateDisposable.add(new HighlightedLabel(name));
|
||||
|
@ -246,7 +259,7 @@ export abstract class AbstractExpressionsRenderer<T = IExpression> implements IT
|
|||
actionBar = templateDisposable.add(new ActionBar(expression));
|
||||
}
|
||||
|
||||
const template: IExpressionTemplateData = { expression, name, value, label, inputBoxContainer, actionBar, elementDisposable: new DisposableStore(), templateDisposable, lazyButton, currentElement: undefined };
|
||||
const template: IExpressionTemplateData = { expression, name, type, value, label, inputBoxContainer, actionBar, elementDisposable: new DisposableStore(), templateDisposable, lazyButton, currentElement: undefined };
|
||||
|
||||
templateDisposable.add(dom.addDisposableListener(lazyButton, dom.EventType.CLICK, () => {
|
||||
if (template.currentElement) {
|
||||
|
@ -260,8 +273,6 @@ export abstract class AbstractExpressionsRenderer<T = IExpression> implements IT
|
|||
public abstract renderElement(node: ITreeNode<T, FuzzyScore>, index: number, data: IExpressionTemplateData): void;
|
||||
|
||||
protected renderExpressionElement(element: IExpression, node: ITreeNode<T, FuzzyScore>, data: IExpressionTemplateData): void {
|
||||
data.elementDisposable.clear();
|
||||
data.currentElement = element;
|
||||
this.renderExpression(node.element, data, createMatches(node.filterData));
|
||||
if (data.actionBar) {
|
||||
this.renderActionBar!(data.actionBar, element, data);
|
||||
|
|
|
@ -440,6 +440,11 @@ configurationRegistry.registerConfiguration({
|
|||
title: nls.localize('debugConfigurationTitle', "Debug"),
|
||||
type: 'object',
|
||||
properties: {
|
||||
'debug.showVariableTypes': {
|
||||
type: 'boolean',
|
||||
description: nls.localize({ comment: ['This is the description for a setting'], key: 'showVariableTypes' }, "Show variable type in variable pane during debug session"),
|
||||
default: false
|
||||
},
|
||||
'debug.allowBreakpointsEverywhere': {
|
||||
type: 'boolean',
|
||||
description: nls.localize({ comment: ['This is the description for a setting'], key: 'allowBreakpointsEverywhere' }, "Allow setting breakpoints in any file."),
|
||||
|
|
|
@ -35,6 +35,7 @@ export const debugIconStartForeground = registerColor('debugIcon.startForeground
|
|||
export function registerColors() {
|
||||
|
||||
const debugTokenExpressionName = registerColor('debugTokenExpression.name', { dark: '#c586c0', light: '#9b46b0', hcDark: foreground, hcLight: foreground }, 'Foreground color for the token names shown in the debug views (ie. the Variables or Watch view).');
|
||||
const debugTokenExpressionType = registerColor('debugTokenExpression.type', { dark: '#4A90E2', light: '#4A90E2', hcDark: foreground, hcLight: foreground }, 'Foreground color for the token types shown in the debug views (ie. the Variables or Watch view).');
|
||||
const debugTokenExpressionValue = registerColor('debugTokenExpression.value', { dark: '#cccccc99', light: '#6c6c6ccc', hcDark: foreground, hcLight: foreground }, 'Foreground color for the token values shown in the debug views (ie. the Variables or Watch view).');
|
||||
const debugTokenExpressionString = registerColor('debugTokenExpression.string', { dark: '#ce9178', light: '#a31515', hcDark: '#f48771', hcLight: '#a31515' }, 'Foreground color for strings in the debug views (ie. the Variables or Watch view).');
|
||||
const debugTokenExpressionBoolean = registerColor('debugTokenExpression.boolean', { dark: '#4e94ce', light: '#0000ff', hcDark: '#75bdfe', hcLight: '#0000ff' }, 'Foreground color for booleans in the debug views (ie. the Variables or Watch view).');
|
||||
|
@ -210,6 +211,7 @@ export function registerColors() {
|
|||
}
|
||||
|
||||
const tokenNameColor = theme.getColor(debugTokenExpressionName)!;
|
||||
const tokenTypeColor = theme.getColor(debugTokenExpressionType)!;
|
||||
const tokenValueColor = theme.getColor(debugTokenExpressionValue)!;
|
||||
const tokenStringColor = theme.getColor(debugTokenExpressionString)!;
|
||||
const tokenBooleanColor = theme.getColor(debugTokenExpressionBoolean)!;
|
||||
|
@ -221,6 +223,10 @@ export function registerColors() {
|
|||
color: ${tokenNameColor};
|
||||
}
|
||||
|
||||
.monaco-workbench .monaco-list-row .expression .type {
|
||||
color: ${tokenTypeColor};
|
||||
}
|
||||
|
||||
.monaco-workbench .monaco-list-row .expression .value,
|
||||
.monaco-workbench .debug-hover-widget .value {
|
||||
color: ${tokenValueColor};
|
||||
|
|
|
@ -247,6 +247,7 @@ export class ReplVariablesRenderer extends AbstractExpressionsRenderer<IExpressi
|
|||
|
||||
public renderElement(node: ITreeNode<IExpression | ReplVariableElement, FuzzyScore>, _index: number, data: IExpressionTemplateData): void {
|
||||
const element = node.element;
|
||||
data.elementDisposable.clear();
|
||||
super.renderExpressionElement(element instanceof ReplVariableElement ? element.expression : element, node, data);
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ import { IViewDescriptorService } from 'vs/workbench/common/views';
|
|||
import { AbstractExpressionDataSource, AbstractExpressionsRenderer, IExpressionTemplateData, IInputBoxOptions, renderExpressionValue, renderVariable, renderViewTree } from 'vs/workbench/contrib/debug/browser/baseDebugView';
|
||||
import { ADD_TO_WATCH_ID, ADD_TO_WATCH_LABEL, COPY_EVALUATE_PATH_ID, COPY_EVALUATE_PATH_LABEL, COPY_VALUE_ID, COPY_VALUE_LABEL } from 'vs/workbench/contrib/debug/browser/debugCommands';
|
||||
import { LinkDetector } from 'vs/workbench/contrib/debug/browser/linkDetector';
|
||||
import { CONTEXT_BREAK_WHEN_VALUE_CHANGES_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_ACCESSED_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_READ_SUPPORTED, CONTEXT_VARIABLES_FOCUSED, DataBreakpointSetType, DebugVisualizationType, IDataBreakpointInfoResponse, IDebugService, IExpression, IScope, IStackFrame, IViewModel, VARIABLES_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug';
|
||||
import { CONTEXT_BREAK_WHEN_VALUE_CHANGES_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_ACCESSED_SUPPORTED, CONTEXT_BREAK_WHEN_VALUE_IS_READ_SUPPORTED, CONTEXT_VARIABLES_FOCUSED, DataBreakpointSetType, DebugVisualizationType, IDataBreakpointInfoResponse, IDebugConfiguration, IDebugService, IExpression, IScope, IStackFrame, IViewModel, VARIABLES_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug';
|
||||
import { getContextForVariable } from 'vs/workbench/contrib/debug/common/debugContext';
|
||||
import { ErrorScope, Expression, Scope, StackFrame, Variable, VisualizedExpression, getUriForDebugMemory } from 'vs/workbench/contrib/debug/common/debugModel';
|
||||
import { DebugVisualizer, IDebugVisualizerService } from 'vs/workbench/contrib/debug/common/debugVisualizers';
|
||||
|
@ -123,7 +123,7 @@ export class VariablesView extends ViewPane {
|
|||
container.classList.add('debug-variables');
|
||||
const treeContainer = renderViewTree(container);
|
||||
const linkDetector = this.instantiationService.createInstance(LinkDetector);
|
||||
const displayType: boolean = this.configurationService.getValue('variableDisplayType.variableView');
|
||||
const displayType: boolean = this.configurationService.getValue<IDebugConfiguration>('debug').showVariableTypes;
|
||||
this.tree = <WorkbenchAsyncDataTree<IStackFrame | null, IExpression | IScope, FuzzyScore>>this.instantiationService.createInstance(WorkbenchAsyncDataTree, 'VariablesView', treeContainer, new VariablesDelegate(),
|
||||
[
|
||||
this.instantiationService.createInstance(VariablesRenderer, linkDetector, displayType),
|
||||
|
@ -456,6 +456,8 @@ export class VisualizedVariableRenderer extends AbstractExpressionsRenderer {
|
|||
}
|
||||
|
||||
public override renderElement(node: ITreeNode<IExpression, FuzzyScore>, index: number, data: IExpressionTemplateData): void {
|
||||
data.elementDisposable.clear();
|
||||
data.currentElement = node.element;
|
||||
super.renderExpressionElement(node.element, node, data);
|
||||
}
|
||||
|
||||
|
@ -524,7 +526,7 @@ export class VariablesRenderer extends AbstractExpressionsRenderer {
|
|||
|
||||
constructor(
|
||||
private readonly linkDetector: LinkDetector,
|
||||
private readonly displayType: boolean,
|
||||
private displayType: boolean,
|
||||
@IMenuService private readonly menuService: IMenuService,
|
||||
@IContextKeyService private readonly contextKeyService: IContextKeyService,
|
||||
@IDebugVisualizerService private readonly visualization: IDebugVisualizerService,
|
||||
|
@ -533,6 +535,7 @@ export class VariablesRenderer extends AbstractExpressionsRenderer {
|
|||
@IDebugService debugService: IDebugService,
|
||||
@IContextViewService contextViewService: IContextViewService,
|
||||
@IHoverService hoverService: IHoverService,
|
||||
@IConfigurationService private configurationService: IConfigurationService,
|
||||
) {
|
||||
super(debugService, contextViewService, hoverService);
|
||||
}
|
||||
|
@ -546,6 +549,14 @@ export class VariablesRenderer extends AbstractExpressionsRenderer {
|
|||
}
|
||||
|
||||
public override renderElement(node: ITreeNode<IExpression, FuzzyScore>, index: number, data: IExpressionTemplateData): void {
|
||||
data.elementDisposable.clear();
|
||||
data.currentElement = node.element;
|
||||
data.elementDisposable.add(this.configurationService.onDidChangeConfiguration(e => {
|
||||
if (e.affectsConfiguration('debug.showVariableTypes')) {
|
||||
this.displayType = this.configurationService.getValue<IDebugConfiguration>('debug').showVariableTypes;
|
||||
super.renderExpressionElement(node.element, node, data);
|
||||
}
|
||||
}));
|
||||
super.renderExpressionElement(node.element, node, data);
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ import { AbstractExpressionDataSource, AbstractExpressionsRenderer, IExpressionT
|
|||
import { watchExpressionsAdd, watchExpressionsRemoveAll } from 'vs/workbench/contrib/debug/browser/debugIcons';
|
||||
import { LinkDetector } from 'vs/workbench/contrib/debug/browser/linkDetector';
|
||||
import { VariablesRenderer, VisualizedVariableRenderer } from 'vs/workbench/contrib/debug/browser/variablesView';
|
||||
import { CONTEXT_CAN_VIEW_MEMORY, CONTEXT_VARIABLE_IS_READONLY, CONTEXT_WATCH_EXPRESSIONS_EXIST, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_WATCH_ITEM_TYPE, IDebugService, IExpression, WATCH_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug';
|
||||
import { CONTEXT_CAN_VIEW_MEMORY, CONTEXT_VARIABLE_IS_READONLY, CONTEXT_WATCH_EXPRESSIONS_EXIST, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_WATCH_ITEM_TYPE, IDebugConfiguration, IDebugService, IExpression, WATCH_VIEW_ID } from 'vs/workbench/contrib/debug/common/debug';
|
||||
import { Expression, Variable, VisualizedExpression } from 'vs/workbench/contrib/debug/common/debugModel';
|
||||
|
||||
const MAX_VALUE_RENDER_LENGTH_IN_VIEWLET = 1024;
|
||||
|
@ -86,7 +86,7 @@ export class WatchExpressionsView extends ViewPane {
|
|||
this.element.classList.add('debug-pane');
|
||||
container.classList.add('debug-watch');
|
||||
const treeContainer = renderViewTree(container);
|
||||
const watchDisplayType: boolean = this.configurationService.getValue('variableDisplayType.watchView');
|
||||
const watchDisplayType: boolean = this.configurationService.getValue<IDebugConfiguration>('debug').showVariableTypes;
|
||||
|
||||
const expressionsRenderer = this.instantiationService.createInstance(WatchExpressionsRenderer, watchDisplayType);
|
||||
const linkDetector = this.instantiationService.createInstance(LinkDetector);
|
||||
|
@ -280,12 +280,13 @@ export class WatchExpressionsRenderer extends AbstractExpressionsRenderer {
|
|||
static readonly ID = 'watchexpression';
|
||||
|
||||
constructor(
|
||||
private readonly watchDisplayType: boolean,
|
||||
private watchDisplayType: boolean,
|
||||
@IMenuService private readonly menuService: IMenuService,
|
||||
@IContextKeyService private readonly contextKeyService: IContextKeyService,
|
||||
@IDebugService debugService: IDebugService,
|
||||
@IContextViewService contextViewService: IContextViewService,
|
||||
@IHoverService hoverService: IHoverService,
|
||||
@IConfigurationService private configurationService: IConfigurationService,
|
||||
) {
|
||||
super(debugService, contextViewService, hoverService);
|
||||
}
|
||||
|
@ -295,13 +296,24 @@ export class WatchExpressionsRenderer extends AbstractExpressionsRenderer {
|
|||
}
|
||||
|
||||
public override renderElement(node: ITreeNode<IExpression, FuzzyScore>, index: number, data: IExpressionTemplateData): void {
|
||||
data.elementDisposable.clear();
|
||||
data.currentElement = node.element;
|
||||
data.elementDisposable.add(this.configurationService.onDidChangeConfiguration(e => {
|
||||
if (e.affectsConfiguration('debug.showVariableTypes')) {
|
||||
this.watchDisplayType = this.configurationService.getValue<IDebugConfiguration>('debug').showVariableTypes;
|
||||
super.renderExpressionElement(node.element, node, data);
|
||||
}
|
||||
}));
|
||||
super.renderExpressionElement(node.element, node, data);
|
||||
}
|
||||
|
||||
protected renderExpression(expression: IExpression, data: IExpressionTemplateData, highlights: IHighlight[]): void {
|
||||
let text: string;
|
||||
data.type.textContent = '';
|
||||
if (this.watchDisplayType && expression.type) {
|
||||
text = typeof expression.value === 'string' ? `${expression.name}: ${expression.type} =` : expression.name;
|
||||
text = typeof expression.value === 'string' ? `${expression.name}: ` : expression.name;
|
||||
//render type
|
||||
data.type.textContent = expression.type + ' =';
|
||||
} else {
|
||||
text = typeof expression.value === 'string' ? `${expression.name} =` : expression.name;
|
||||
}
|
||||
|
|
|
@ -774,6 +774,7 @@ export interface IDebugConfiguration {
|
|||
};
|
||||
autoExpandLazyVariables: boolean;
|
||||
enableStatusBarColor: boolean;
|
||||
showVariableTypes: boolean;
|
||||
}
|
||||
|
||||
export interface IGlobalConfig {
|
||||
|
|
|
@ -24,15 +24,16 @@ import { MockSession } from 'vs/workbench/contrib/debug/test/common/mockDebug';
|
|||
import { workbenchInstantiationService } from 'vs/workbench/test/browser/workbenchTestServices';
|
||||
const $ = dom.$;
|
||||
|
||||
function assert_variable(session: MockSession, scope: Scope, disposables: Pick<DisposableStore, "add">, linkDetector: LinkDetector, displayType: boolean) {
|
||||
function assertVariable(session: MockSession, scope: Scope, disposables: Pick<DisposableStore, "add">, linkDetector: LinkDetector, displayType: boolean) {
|
||||
let variable = new Variable(session, 1, scope, 2, 'foo', 'bar.foo', undefined, 0, 0, undefined, {}, 'string');
|
||||
let expression = $('.');
|
||||
let name = $('.');
|
||||
let type = $('.');
|
||||
let value = $('.');
|
||||
const label = new HighlightedLabel(name);
|
||||
const lazyButton = $('.');
|
||||
const store = disposables.add(new DisposableStore());
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], undefined, displayType);
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], undefined, displayType);
|
||||
|
||||
assert.strictEqual(label.element.textContent, 'foo');
|
||||
assert.strictEqual(value.textContent, '');
|
||||
|
@ -40,39 +41,45 @@ function assert_variable(session: MockSession, scope: Scope, disposables: Pick<D
|
|||
variable.value = 'hey';
|
||||
expression = $('.');
|
||||
name = $('.');
|
||||
type = $('.');
|
||||
value = $('.');
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
assert.strictEqual(value.textContent, 'hey');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'foo: string =' : 'foo =');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
|
||||
assert.strictEqual(type.textContent, displayType ? 'string =' : '');
|
||||
|
||||
variable.value = isWindows ? 'C:\\foo.js:5' : '/foo.js:5';
|
||||
expression = $('.');
|
||||
name = $('.');
|
||||
type = $('.');
|
||||
value = $('.');
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
assert.ok(value.querySelector('a'));
|
||||
assert.strictEqual(value.querySelector('a')!.textContent, variable.value);
|
||||
|
||||
variable = new Variable(session, 1, scope, 2, 'console', 'console', '5', 0, 0, undefined, { kind: 'virtual' });
|
||||
expression = $('.');
|
||||
name = $('.');
|
||||
type = $('.');
|
||||
value = $('.');
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
assert.strictEqual(name.className, 'virtual');
|
||||
assert.strictEqual(label.element.textContent, 'console =');
|
||||
assert.strictEqual(value.className, 'value number');
|
||||
|
||||
variable = new Variable(session, 1, scope, 2, 'xpto', 'xpto.xpto', undefined, 0, 0, undefined, {}, 'custom-type');
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
assert.strictEqual(label.element.textContent, 'xpto');
|
||||
assert.strictEqual(value.textContent, '');
|
||||
variable.value = '2';
|
||||
expression = $('.');
|
||||
name = $('.');
|
||||
type = $('.');
|
||||
value = $('.');
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
renderVariable(store, NullCommandService, NullHoverService, variable, { expression, name, type, value, label, lazyButton }, false, [], linkDetector, displayType);
|
||||
assert.strictEqual(value.textContent, '2');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'xpto: custom-type =' : 'xpto =');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'xpto: ' : 'xpto =');
|
||||
assert.strictEqual(type.textContent, displayType ? 'custom-type =' : '');
|
||||
|
||||
label.dispose();
|
||||
}
|
||||
|
@ -149,7 +156,7 @@ suite('Debug - Base Debug View', () => {
|
|||
const stackFrame = new StackFrame(thread, 1, null!, 'app.js', 'normal', range, 0, true);
|
||||
const scope = new Scope(stackFrame, 1, 'local', 1, false, 10, 10);
|
||||
|
||||
assert_variable(session, scope, disposables, linkDetector, false);
|
||||
assertVariable(session, scope, disposables, linkDetector, false);
|
||||
|
||||
});
|
||||
|
||||
|
@ -165,7 +172,7 @@ suite('Debug - Base Debug View', () => {
|
|||
const stackFrame = new StackFrame(thread, 1, null!, 'app.js', 'normal', range, 0, true);
|
||||
const scope = new Scope(stackFrame, 1, 'local', 1, false, 10, 10);
|
||||
|
||||
assert_variable(session, scope, disposables, linkDetector, true);
|
||||
assertVariable(session, scope, disposables, linkDetector, true);
|
||||
});
|
||||
|
||||
test('statusbar in debug mode', () => {
|
||||
|
|
|
@ -20,7 +20,7 @@ import { LinkDetector } from 'vs/workbench/contrib/debug/browser/linkDetector';
|
|||
|
||||
const $ = dom.$;
|
||||
|
||||
function assert_variable(disposables: Pick<DisposableStore, "add">, variablesRenderer: VariablesRenderer, displayType: boolean) {
|
||||
function assertVariable(disposables: Pick<DisposableStore, "add">, variablesRenderer: VariablesRenderer, displayType: boolean) {
|
||||
const session = new MockSession();
|
||||
const thread = new Thread(session, 'mockthread', 1);
|
||||
const range = {
|
||||
|
@ -44,6 +44,7 @@ function assert_variable(disposables: Pick<DisposableStore, "add">, variablesRen
|
|||
};
|
||||
const expression = $('.');
|
||||
const name = $('.');
|
||||
const type = $('.');
|
||||
const value = $('.');
|
||||
const label = disposables.add(new HighlightedLabel(name));
|
||||
const lazyButton = $('.');
|
||||
|
@ -54,6 +55,7 @@ function assert_variable(disposables: Pick<DisposableStore, "add">, variablesRen
|
|||
const data = {
|
||||
expression,
|
||||
name,
|
||||
type,
|
||||
value,
|
||||
label,
|
||||
lazyButton,
|
||||
|
@ -69,7 +71,8 @@ function assert_variable(disposables: Pick<DisposableStore, "add">, variablesRen
|
|||
node.element.value = 'xpto';
|
||||
variablesRenderer.renderElement(node, 0, data);
|
||||
assert.strictEqual(value.textContent, 'xpto');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'foo: string =' : 'foo =');
|
||||
assert.strictEqual(type.textContent, displayType ? 'string =' : '');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
|
||||
}
|
||||
|
||||
suite('Debug - Variable Debug View', () => {
|
||||
|
@ -90,11 +93,11 @@ suite('Debug - Variable Debug View', () => {
|
|||
|
||||
test('variable expressions with display type', () => {
|
||||
variablesRenderer = instantiationService.createInstance(VariablesRenderer, linkDetector, true);
|
||||
assert_variable(disposables, variablesRenderer, true);
|
||||
assertVariable(disposables, variablesRenderer, true);
|
||||
});
|
||||
|
||||
test('variable expressions', () => {
|
||||
variablesRenderer = instantiationService.createInstance(VariablesRenderer, linkDetector, false);
|
||||
assert_variable(disposables, variablesRenderer, false);
|
||||
assertVariable(disposables, variablesRenderer, false);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -18,7 +18,7 @@ import { NullHoverService } from 'vs/platform/hover/test/browser/nullHoverServic
|
|||
import { IDebugService, IViewModel } from 'vs/workbench/contrib/debug/common/debug';
|
||||
const $ = dom.$;
|
||||
|
||||
function assert_watch_variable(disposables: Pick<DisposableStore, "add">, watchExpressionsRenderer: WatchExpressionsRenderer, displayType: boolean) {
|
||||
function assertWatchVariable(disposables: Pick<DisposableStore, "add">, watchExpressionsRenderer: WatchExpressionsRenderer, displayType: boolean) {
|
||||
const session = new MockSession();
|
||||
const thread = new Thread(session, 'mockthread', 1);
|
||||
const range = {
|
||||
|
@ -42,6 +42,7 @@ function assert_watch_variable(disposables: Pick<DisposableStore, "add">, watchE
|
|||
};
|
||||
const expression = $('.');
|
||||
const name = $('.');
|
||||
const type = $('.');
|
||||
const value = $('.');
|
||||
const label = disposables.add(new HighlightedLabel(name));
|
||||
const lazyButton = $('.');
|
||||
|
@ -52,6 +53,7 @@ function assert_watch_variable(disposables: Pick<DisposableStore, "add">, watchE
|
|||
const data = {
|
||||
expression,
|
||||
name,
|
||||
type,
|
||||
value,
|
||||
label,
|
||||
lazyButton,
|
||||
|
@ -62,12 +64,13 @@ function assert_watch_variable(disposables: Pick<DisposableStore, "add">, watchE
|
|||
};
|
||||
watchExpressionsRenderer.renderElement(node, 0, data);
|
||||
assert.strictEqual(value.textContent, '');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'foo: string =' : 'foo =');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
|
||||
|
||||
node.element.value = 'xpto';
|
||||
watchExpressionsRenderer.renderElement(node, 0, data);
|
||||
assert.strictEqual(value.textContent, 'xpto');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'foo: string =' : 'foo =');
|
||||
assert.strictEqual(type.textContent, displayType ? 'string =' : '');
|
||||
assert.strictEqual(label.element.textContent, displayType ? 'foo: ' : 'foo =');
|
||||
}
|
||||
|
||||
suite('Debug - Watch Debug View', () => {
|
||||
|
@ -87,11 +90,11 @@ suite('Debug - Watch Debug View', () => {
|
|||
|
||||
test('watch expressions with display type', () => {
|
||||
watchExpressionsRenderer = instantiationService.createInstance(WatchExpressionsRenderer, true);
|
||||
assert_watch_variable(disposables, watchExpressionsRenderer, true);
|
||||
assertWatchVariable(disposables, watchExpressionsRenderer, true);
|
||||
});
|
||||
|
||||
test('watch expressions', () => {
|
||||
watchExpressionsRenderer = instantiationService.createInstance(WatchExpressionsRenderer, false);
|
||||
assert_watch_variable(disposables, watchExpressionsRenderer, false);
|
||||
assertWatchVariable(disposables, watchExpressionsRenderer, false);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue