#57186 - add tests for search-rg extension
This commit is contained in:
parent
3d28155dfd
commit
6cc41bc1ab
|
@ -11,7 +11,7 @@ import * as path from 'path';
|
|||
import { NodeStringDecoder, StringDecoder } from 'string_decoder';
|
||||
import * as vscode from 'vscode';
|
||||
import { rgPath } from './ripgrep';
|
||||
import { anchorGlob } from './utils';
|
||||
import { anchorGlob, createTextSearchResult } from './utils';
|
||||
|
||||
// If vscode-ripgrep is in an .asar file, then the binary is unpacked.
|
||||
const rgDiskPath = rgPath.replace(/\bnode_modules\.asar\b/, 'node_modules.asar.unpacked');
|
||||
|
@ -289,29 +289,11 @@ export class RipgrepParser extends EventEmitter {
|
|||
realTextParts.push(chunk);
|
||||
|
||||
// Get full real text line without color codes
|
||||
const preview = realTextParts.join('');
|
||||
const previewText = realTextParts.join('');
|
||||
|
||||
const uri = vscode.Uri.file(path.join(this.rootFolder, this.currentFile));
|
||||
lineMatches
|
||||
.map(range => {
|
||||
let trimmedPreview = preview;
|
||||
let trimmedPreviewRange = range;
|
||||
if (this.previewOptions) {
|
||||
const previewStart = Math.max(range.start.character - this.previewOptions.leadingChars, 0);
|
||||
trimmedPreview = preview.substr(previewStart, this.previewOptions.totalChars - previewStart);
|
||||
if (previewStart > 0) {
|
||||
trimmedPreviewRange = new vscode.Range(0, range.start.character - previewStart, 0, range.end.character - previewStart);
|
||||
}
|
||||
}
|
||||
|
||||
return <vscode.TextSearchResult>{
|
||||
uri: vscode.Uri.file(path.join(this.rootFolder, this.currentFile)),
|
||||
range,
|
||||
preview: {
|
||||
text: trimmedPreview,
|
||||
match: trimmedPreviewRange || new vscode.Range(0, range.start.character, 0, range.end.character)
|
||||
}
|
||||
};
|
||||
})
|
||||
.map(range => createTextSearchResult(uri, previewText, range, this.previewOptions))
|
||||
.forEach(match => this.onResult(match));
|
||||
|
||||
if (hitLimit) {
|
||||
|
|
113
extensions/search-rg/src/test/searchrg.test.ts
Normal file
113
extensions/search-rg/src/test/searchrg.test.ts
Normal file
|
@ -0,0 +1,113 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import 'mocha';
|
||||
import * as assert from 'assert';
|
||||
import * as vscode from 'vscode';
|
||||
import * as path from 'path';
|
||||
import { createTextSearchResult } from '../utils';
|
||||
|
||||
function createOneLineRange(lineNumber: number, startCol: number, endCol: number): vscode.Range {
|
||||
return new vscode.Range(lineNumber, startCol, lineNumber, endCol);
|
||||
}
|
||||
|
||||
const uri = vscode.Uri.file('/foo/bar');
|
||||
|
||||
suite('search-rg', () => {
|
||||
const previewOptions1: vscode.TextSearchPreviewOptions = {
|
||||
leadingChars: 10,
|
||||
maxLines: 1,
|
||||
totalChars: 100
|
||||
};
|
||||
|
||||
test('empty', () => {
|
||||
assert.deepEqual(
|
||||
createTextSearchResult(uri, '', createOneLineRange(5, 0, 0)),
|
||||
<vscode.TextSearchResult>{
|
||||
preview: {
|
||||
text: '',
|
||||
match: createOneLineRange(0, 0, 0)
|
||||
},
|
||||
range: createOneLineRange(5, 0, 0),
|
||||
uri
|
||||
});
|
||||
|
||||
assert.deepEqual(
|
||||
createTextSearchResult(uri, '', createOneLineRange(5, 0, 0), previewOptions1),
|
||||
<vscode.TextSearchResult>{
|
||||
preview: {
|
||||
text: '',
|
||||
match: createOneLineRange(0, 0, 0)
|
||||
},
|
||||
range: createOneLineRange(5, 0, 0),
|
||||
uri
|
||||
});
|
||||
});
|
||||
|
||||
test('short', () => {
|
||||
assert.deepEqual(
|
||||
createTextSearchResult(uri, 'foo bar', createOneLineRange(5, 4, 7)),
|
||||
<vscode.TextSearchResult>{
|
||||
preview: {
|
||||
text: 'foo bar',
|
||||
match: createOneLineRange(0, 4, 7)
|
||||
},
|
||||
range: createOneLineRange(5, 4, 7),
|
||||
uri
|
||||
});
|
||||
|
||||
assert.deepEqual(
|
||||
createTextSearchResult(uri, 'foo bar', createOneLineRange(5, 4, 7), previewOptions1),
|
||||
<vscode.TextSearchResult>{
|
||||
preview: {
|
||||
text: 'foo bar',
|
||||
match: createOneLineRange(0, 4, 7)
|
||||
},
|
||||
range: createOneLineRange(5, 4, 7),
|
||||
uri
|
||||
});
|
||||
});
|
||||
|
||||
test('leading', () => {
|
||||
assert.deepEqual(
|
||||
createTextSearchResult(uri, 'long text very long text foo', createOneLineRange(5, 25, 28), previewOptions1),
|
||||
<vscode.TextSearchResult>{
|
||||
preview: {
|
||||
text: 'long text foo',
|
||||
match: createOneLineRange(0, 10, 13)
|
||||
},
|
||||
range: createOneLineRange(5, 25, 28),
|
||||
uri
|
||||
});
|
||||
});
|
||||
|
||||
test('trailing', () => {
|
||||
assert.deepEqual(
|
||||
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),
|
||||
<vscode.TextSearchResult>{
|
||||
preview: {
|
||||
text: 'foo long text very long text long text very long text long text very long text long text very long t',
|
||||
match: createOneLineRange(0, 0, 3)
|
||||
},
|
||||
range: createOneLineRange(5, 0, 3),
|
||||
uri
|
||||
});
|
||||
});
|
||||
|
||||
test('middle', () => {
|
||||
assert.deepEqual(
|
||||
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),
|
||||
<vscode.TextSearchResult>{
|
||||
preview: {
|
||||
text: 'text long foo text very long text long text very long text long text very long text long text very l',
|
||||
match: createOneLineRange(0, 10, 13)
|
||||
},
|
||||
range: createOneLineRange(5, 30, 33),
|
||||
uri
|
||||
});
|
||||
});
|
||||
});
|
|
@ -6,6 +6,7 @@
|
|||
'use strict';
|
||||
|
||||
import * as path from 'path';
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
export function fixDriveC(_path: string): string {
|
||||
const root = path.parse(_path).root;
|
||||
|
@ -17,3 +18,27 @@ export function fixDriveC(_path: string): string {
|
|||
export function anchorGlob(glob: string): string {
|
||||
return glob.startsWith('**') || glob.startsWith('/') ? glob : `/${glob}`;
|
||||
}
|
||||
|
||||
export function createTextSearchResult(uri: vscode.Uri, fullText: string, range: vscode.Range, previewOptions?: vscode.TextSearchPreviewOptions): vscode.TextSearchResult {
|
||||
let preview: vscode.TextSearchResultPreview;
|
||||
if (previewOptions) {
|
||||
const previewStart = Math.max(range.start.character - previewOptions.leadingChars, 0);
|
||||
const previewEnd = Math.max(previewOptions.totalChars + previewStart, range.end.character);
|
||||
|
||||
preview = {
|
||||
text: fullText.substring(previewStart, previewEnd),
|
||||
match: new vscode.Range(0, range.start.character - previewStart, 0, range.end.character - previewStart)
|
||||
};
|
||||
} else {
|
||||
preview = {
|
||||
text: fullText,
|
||||
match: new vscode.Range(0, range.start.character, 0, range.end.character)
|
||||
};
|
||||
}
|
||||
|
||||
return <vscode.TextSearchResult>{
|
||||
uri,
|
||||
range,
|
||||
preview
|
||||
};
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ cd $ROOT
|
|||
./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
|
||||
./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
|
||||
./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
|
||||
./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
|
||||
|
||||
mkdir $ROOT/extensions/emmet/test-fixtures
|
||||
./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 .
|
||||
|
|
Loading…
Reference in a new issue