Skip to content

Commit 6cc41bc

Browse files
committed
#57186 - add tests for search-rg extension
1 parent 3d28155 commit 6cc41bc

File tree

4 files changed

+143
-22
lines changed

4 files changed

+143
-22
lines changed

extensions/search-rg/src/ripgrepTextSearch.ts

+4-22
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import * as path from 'path';
1111
import { NodeStringDecoder, StringDecoder } from 'string_decoder';
1212
import * as vscode from 'vscode';
1313
import { rgPath } from './ripgrep';
14-
import { anchorGlob } from './utils';
14+
import { anchorGlob, createTextSearchResult } from './utils';
1515

1616
// If vscode-ripgrep is in an .asar file, then the binary is unpacked.
1717
const rgDiskPath = rgPath.replace(/\bnode_modules\.asar\b/, 'node_modules.asar.unpacked');
@@ -289,29 +289,11 @@ export class RipgrepParser extends EventEmitter {
289289
realTextParts.push(chunk);
290290

291291
// Get full real text line without color codes
292-
const preview = realTextParts.join('');
292+
const previewText = realTextParts.join('');
293293

294+
const uri = vscode.Uri.file(path.join(this.rootFolder, this.currentFile));
294295
lineMatches
295-
.map(range => {
296-
let trimmedPreview = preview;
297-
let trimmedPreviewRange = range;
298-
if (this.previewOptions) {
299-
const previewStart = Math.max(range.start.character - this.previewOptions.leadingChars, 0);
300-
trimmedPreview = preview.substr(previewStart, this.previewOptions.totalChars - previewStart);
301-
if (previewStart > 0) {
302-
trimmedPreviewRange = new vscode.Range(0, range.start.character - previewStart, 0, range.end.character - previewStart);
303-
}
304-
}
305-
306-
return <vscode.TextSearchResult>{
307-
uri: vscode.Uri.file(path.join(this.rootFolder, this.currentFile)),
308-
range,
309-
preview: {
310-
text: trimmedPreview,
311-
match: trimmedPreviewRange || new vscode.Range(0, range.start.character, 0, range.end.character)
312-
}
313-
};
314-
})
296+
.map(range => createTextSearchResult(uri, previewText, range, this.previewOptions))
315297
.forEach(match => this.onResult(match));
316298

317299
if (hitLimit) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
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+
'use strict';
7+
8+
import 'mocha';
9+
import * as assert from 'assert';
10+
import * as vscode from 'vscode';
11+
import * as path from 'path';
12+
import { createTextSearchResult } from '../utils';
13+
14+
function createOneLineRange(lineNumber: number, startCol: number, endCol: number): vscode.Range {
15+
return new vscode.Range(lineNumber, startCol, lineNumber, endCol);
16+
}
17+
18+
const uri = vscode.Uri.file('/foo/bar');
19+
20+
suite('search-rg', () => {
21+
const previewOptions1: vscode.TextSearchPreviewOptions = {
22+
leadingChars: 10,
23+
maxLines: 1,
24+
totalChars: 100
25+
};
26+
27+
test('empty', () => {
28+
assert.deepEqual(
29+
createTextSearchResult(uri, '', createOneLineRange(5, 0, 0)),
30+
<vscode.TextSearchResult>{
31+
preview: {
32+
text: '',
33+
match: createOneLineRange(0, 0, 0)
34+
},
35+
range: createOneLineRange(5, 0, 0),
36+
uri
37+
});
38+
39+
assert.deepEqual(
40+
createTextSearchResult(uri, '', createOneLineRange(5, 0, 0), previewOptions1),
41+
<vscode.TextSearchResult>{
42+
preview: {
43+
text: '',
44+
match: createOneLineRange(0, 0, 0)
45+
},
46+
range: createOneLineRange(5, 0, 0),
47+
uri
48+
});
49+
});
50+
51+
test('short', () => {
52+
assert.deepEqual(
53+
createTextSearchResult(uri, 'foo bar', createOneLineRange(5, 4, 7)),
54+
<vscode.TextSearchResult>{
55+
preview: {
56+
text: 'foo bar',
57+
match: createOneLineRange(0, 4, 7)
58+
},
59+
range: createOneLineRange(5, 4, 7),
60+
uri
61+
});
62+
63+
assert.deepEqual(
64+
createTextSearchResult(uri, 'foo bar', createOneLineRange(5, 4, 7), previewOptions1),
65+
<vscode.TextSearchResult>{
66+
preview: {
67+
text: 'foo bar',
68+
match: createOneLineRange(0, 4, 7)
69+
},
70+
range: createOneLineRange(5, 4, 7),
71+
uri
72+
});
73+
});
74+
75+
test('leading', () => {
76+
assert.deepEqual(
77+
createTextSearchResult(uri, 'long text very long text foo', createOneLineRange(5, 25, 28), previewOptions1),
78+
<vscode.TextSearchResult>{
79+
preview: {
80+
text: 'long text foo',
81+
match: createOneLineRange(0, 10, 13)
82+
},
83+
range: createOneLineRange(5, 25, 28),
84+
uri
85+
});
86+
});
87+
88+
test('trailing', () => {
89+
assert.deepEqual(
90+
createTextSearchResult(uri, 'foo long text very long text long text very long text long text very long text long text very long text long text very long text', createOneLineRange(5, 0, 3), previewOptions1),
91+
<vscode.TextSearchResult>{
92+
preview: {
93+
text: 'foo long text very long text long text very long text long text very long text long text very long t',
94+
match: createOneLineRange(0, 0, 3)
95+
},
96+
range: createOneLineRange(5, 0, 3),
97+
uri
98+
});
99+
});
100+
101+
test('middle', () => {
102+
assert.deepEqual(
103+
createTextSearchResult(uri, 'long text very long text long foo text very long text long text very long text long text very long text long text very long text', createOneLineRange(5, 30, 33), previewOptions1),
104+
<vscode.TextSearchResult>{
105+
preview: {
106+
text: 'text long foo text very long text long text very long text long text very long text long text very l',
107+
match: createOneLineRange(0, 10, 13)
108+
},
109+
range: createOneLineRange(5, 30, 33),
110+
uri
111+
});
112+
});
113+
});

extensions/search-rg/src/utils.ts

+25
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
'use strict';
77

88
import * as path from 'path';
9+
import * as vscode from 'vscode';
910

1011
export function fixDriveC(_path: string): string {
1112
const root = path.parse(_path).root;
@@ -17,3 +18,27 @@ export function fixDriveC(_path: string): string {
1718
export function anchorGlob(glob: string): string {
1819
return glob.startsWith('**') || glob.startsWith('/') ? glob : `/${glob}`;
1920
}
21+
22+
export function createTextSearchResult(uri: vscode.Uri, fullText: string, range: vscode.Range, previewOptions?: vscode.TextSearchPreviewOptions): vscode.TextSearchResult {
23+
let preview: vscode.TextSearchResultPreview;
24+
if (previewOptions) {
25+
const previewStart = Math.max(range.start.character - previewOptions.leadingChars, 0);
26+
const previewEnd = Math.max(previewOptions.totalChars + previewStart, range.end.character);
27+
28+
preview = {
29+
text: fullText.substring(previewStart, previewEnd),
30+
match: new vscode.Range(0, range.start.character - previewStart, 0, range.end.character - previewStart)
31+
};
32+
} else {
33+
preview = {
34+
text: fullText,
35+
match: new vscode.Range(0, range.start.character, 0, range.end.character)
36+
};
37+
}
38+
39+
return <vscode.TextSearchResult>{
40+
uri,
41+
range,
42+
preview
43+
};
44+
}

scripts/test-integration.sh

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ cd $ROOT
1717
./scripts/code.sh $ROOT/extensions/vscode-api-tests/testworkspace.code-workspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/workspace-tests --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started
1818
./scripts/code.sh $ROOT/extensions/vscode-colorize-tests/test --extensionDevelopmentPath=$ROOT/extensions/vscode-colorize-tests --extensionTestsPath=$ROOT/extensions/vscode-colorize-tests/out --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started
1919
./scripts/code.sh $ROOT/extensions/markdown-language-features/test-fixtures --extensionDevelopmentPath=$ROOT/extensions/markdown-language-features --extensionTestsPath=$ROOT/extensions/markdown-language-features/out/test --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started
20+
./scripts/code.sh $ROOT/extensions/search-rg/test-fixtures --extensionDevelopmentPath=$ROOT/extensions/search-rg --extensionTestsPath=$ROOT/extensions/search-rg/out/test --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started
2021

2122
mkdir $ROOT/extensions/emmet/test-fixtures
2223
./scripts/code.sh $ROOT/extensions/emmet/test-fixtures --extensionDevelopmentPath=$ROOT/extensions/emmet --extensionTestsPath=$ROOT/extensions/emmet/out/test --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started .

0 commit comments

Comments
 (0)