Skip to content

Commit 166da46

Browse files
committed
Fixed rebase issues, added test for filtering
1 parent 3be3003 commit 166da46

3 files changed

Lines changed: 68 additions & 2 deletions

File tree

src/vs/workbench/contrib/debug/browser/replFilterView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import 'vs/css!./media/replFilter';
77
import * as DOM from 'vs/base/browser/dom';
8-
import { BaseActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar';
8+
import { BaseActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems';
99
import { Delayer } from 'vs/base/common/async';
1010
import { IAction } from 'vs/base/common/actions';
1111
import { HistoryInputBox } from 'vs/base/browser/ui/inputbox/inputBox';

src/vs/workbench/contrib/debug/common/replModel.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,18 @@ export class ReplGroup implements IReplElement {
174174
}
175175
}
176176

177+
type FilterFunc = ((element: IReplElement) => void);
178+
177179
export class ReplModel {
178180
private replElements: IReplElement[] = [];
179181
private readonly _onDidChangeElements = new Emitter<void>();
180182
readonly onDidChangeElements = this._onDidChangeElements.event;
183+
private filterFunc: FilterFunc | undefined;
181184

182185
getReplElements(): IReplElement[] {
183-
return this.replElements;
186+
return this.replElements.filter(element =>
187+
this.filterFunc ? this.filterFunc(element) : true
188+
);
184189
}
185190

186191
async addReplExpression(session: IDebugSession, stackFrame: IStackFrame | undefined, name: string): Promise<void> {
@@ -315,6 +320,10 @@ export class ReplModel {
315320
}
316321
}
317322

323+
setFilter(filterFunc: FilterFunc): void {
324+
this.filterFunc = filterFunc;
325+
}
326+
318327
removeReplExpressions(): void {
319328
if (this.replElements.length > 0) {
320329
this.replElements = [];

src/vs/workbench/contrib/debug/test/browser/repl.test.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import { SimpleReplElement, RawObjectReplElement, ReplEvaluationInput, ReplModel
1212
import { RawDebugSession } from 'vs/workbench/contrib/debug/browser/rawDebugSession';
1313
import { timeout } from 'vs/base/common/async';
1414
import { createMockSession } from 'vs/workbench/contrib/debug/test/browser/callStack.test';
15+
import { ReplFilter } from 'vs/workbench/contrib/debug/browser/replFilter';
16+
import { TreeVisibility } from 'vs/base/browser/ui/tree/tree';
1517

1618
suite('Debug - REPL', () => {
1719
let model: DebugModel;
@@ -189,4 +191,59 @@ suite('Debug - REPL', () => {
189191
assert.equal(repl.getReplElements().length, 3);
190192
assert.equal((<SimpleReplElement>repl.getReplElements()[2]).value, 'second global line');
191193
});
194+
195+
test('repl filter', async () => {
196+
const session = createMockSession(model);
197+
const repl = new ReplModel();
198+
const replFilter = new ReplFilter('');
199+
200+
repl.setFilter((element) => {
201+
const filterResult = replFilter.filter(element, TreeVisibility.Visible);
202+
return filterResult === true || filterResult === TreeVisibility.Visible;
203+
});
204+
205+
repl.appendToRepl(session, 'first line\n', severity.Info);
206+
repl.appendToRepl(session, 'second line\n', severity.Info);
207+
repl.appendToRepl(session, 'third line\n', severity.Info);
208+
repl.appendToRepl(session, 'fourth line\n', severity.Info);
209+
210+
replFilter.filterQuery = 'first';
211+
let r1 = <SimpleReplElement[]>repl.getReplElements();
212+
assert.equal(r1.length, 1);
213+
assert.equal(r1[0].value, 'first line\n');
214+
215+
replFilter.filterQuery = '!first';
216+
let r2 = <SimpleReplElement[]>repl.getReplElements();
217+
assert.equal(r1.length, 1);
218+
assert.equal(r2[0].value, 'second line\n');
219+
assert.equal(r2[1].value, 'third line\n');
220+
assert.equal(r2[2].value, 'fourth line\n');
221+
222+
replFilter.filterQuery = 'first, line';
223+
let r3 = <SimpleReplElement[]>repl.getReplElements();
224+
assert.equal(r3.length, 4);
225+
assert.equal(r3[0].value, 'first line\n');
226+
assert.equal(r3[1].value, 'second line\n');
227+
assert.equal(r3[2].value, 'third line\n');
228+
assert.equal(r3[3].value, 'fourth line\n');
229+
230+
replFilter.filterQuery = 'line, !second';
231+
let r4 = <SimpleReplElement[]>repl.getReplElements();
232+
assert.equal(r4.length, 3);
233+
assert.equal(r4[0].value, 'first line\n');
234+
assert.equal(r4[1].value, 'third line\n');
235+
assert.equal(r4[2].value, 'fourth line\n');
236+
237+
replFilter.filterQuery = '!second, line';
238+
let r4_same = <SimpleReplElement[]>repl.getReplElements();
239+
assert.equal(r4.length, r4_same.length);
240+
241+
replFilter.filterQuery = '!line';
242+
let r5 = <SimpleReplElement[]>repl.getReplElements();
243+
assert.equal(r5.length, 0);
244+
245+
replFilter.filterQuery = 'smth';
246+
let r6 = <SimpleReplElement[]>repl.getReplElements();
247+
assert.equal(r6.length, 0);
248+
});
192249
});

0 commit comments

Comments
 (0)