#57186 - add tests for search-rg extension

This commit is contained in:
Rob Lourens 2018-08-25 13:21:49 -07:00
parent 3d28155dfd
commit 6cc41bc1ab
4 changed files with 143 additions and 22 deletions

View file

@ -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) {

View 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
});
});
});

View file

@ -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
};
}

View file

@ -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 .