mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-21 03:36:14 +01:00
Merge model.brackets.test.ts into textModelWithTokens.test.ts
This commit is contained in:
@@ -1,130 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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 * as assert from 'assert';
|
||||
import {Range} from 'vs/editor/common/core/range';
|
||||
import {IFoundBracket} from 'vs/editor/common/editorCommon';
|
||||
import {TextModel} from 'vs/editor/common/model/textModel';
|
||||
import {TextModelWithTokens} from 'vs/editor/common/model/textModelWithTokens';
|
||||
|
||||
suite('TextModelWithTokens', () => {
|
||||
|
||||
function toRelaxedFoundBracket(a:IFoundBracket) {
|
||||
if (!a) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
range: a.range.toString(),
|
||||
open: a.open,
|
||||
close: a.close,
|
||||
isOpen: a.isOpen
|
||||
};
|
||||
}
|
||||
|
||||
function testBrackets(contents: string[], brackets:string[][]): void {
|
||||
let charIsBracket: {[char:string]:boolean} = {};
|
||||
let charIsOpenBracket: {[char:string]:boolean} = {};
|
||||
let openForChar: {[char:string]:string} = {};
|
||||
let closeForChar: {[char:string]:string} = {};
|
||||
brackets.forEach((b) => {
|
||||
charIsBracket[b[0]] = true;
|
||||
charIsBracket[b[1]] = true;
|
||||
|
||||
charIsOpenBracket[b[0]] = true;
|
||||
charIsOpenBracket[b[1]] = false;
|
||||
|
||||
openForChar[b[0]] = b[0];
|
||||
closeForChar[b[0]] = b[1];
|
||||
|
||||
openForChar[b[1]] = b[0];
|
||||
closeForChar[b[1]] = b[1];
|
||||
});
|
||||
|
||||
let expectedBrackets:IFoundBracket[] = [];
|
||||
for (let lineIndex = 0; lineIndex < contents.length; lineIndex++) {
|
||||
let lineText = contents[lineIndex];
|
||||
|
||||
for (let charIndex = 0; charIndex < lineText.length; charIndex++) {
|
||||
let ch = lineText.charAt(charIndex);
|
||||
if (charIsBracket[ch]) {
|
||||
expectedBrackets.push({
|
||||
open: openForChar[ch],
|
||||
close: closeForChar[ch],
|
||||
isOpen: charIsOpenBracket[ch],
|
||||
range: new Range(lineIndex + 1, charIndex + 1, lineIndex + 1, charIndex + 2)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let model = new TextModelWithTokens([], TextModel.toRawText(contents.join('\n'), TextModel.DEFAULT_CREATION_OPTIONS), null);
|
||||
|
||||
// findPrevBracket
|
||||
{
|
||||
let expectedBracketIndex = expectedBrackets.length - 1;
|
||||
let currentExpectedBracket = expectedBracketIndex >= 0 ? expectedBrackets[expectedBracketIndex] : null;
|
||||
for (let lineNumber = contents.length; lineNumber >= 1; lineNumber--) {
|
||||
let lineText = contents[lineNumber - 1];
|
||||
|
||||
for (let column = lineText.length + 1; column >= 1; column--) {
|
||||
|
||||
if (currentExpectedBracket) {
|
||||
if (lineNumber === currentExpectedBracket.range.startLineNumber && column < currentExpectedBracket.range.endColumn) {
|
||||
expectedBracketIndex--;
|
||||
currentExpectedBracket = expectedBracketIndex >= 0 ? expectedBrackets[expectedBracketIndex] : null;
|
||||
}
|
||||
}
|
||||
|
||||
let actual = model.findPrevBracket({
|
||||
lineNumber: lineNumber,
|
||||
column: column
|
||||
});
|
||||
|
||||
assert.deepEqual(toRelaxedFoundBracket(actual), toRelaxedFoundBracket(currentExpectedBracket), 'findPrevBracket of ' + lineNumber + ', ' + column);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// findNextBracket
|
||||
{
|
||||
let expectedBracketIndex = 0;
|
||||
let currentExpectedBracket = expectedBracketIndex < expectedBrackets.length ? expectedBrackets[expectedBracketIndex] : null;
|
||||
for (let lineNumber = 1; lineNumber <= contents.length; lineNumber++) {
|
||||
let lineText = contents[lineNumber - 1];
|
||||
|
||||
for (let column = 1; column <= lineText.length + 1; column++) {
|
||||
|
||||
if (currentExpectedBracket) {
|
||||
if (lineNumber === currentExpectedBracket.range.startLineNumber && column > currentExpectedBracket.range.startColumn) {
|
||||
expectedBracketIndex++;
|
||||
currentExpectedBracket = expectedBracketIndex < expectedBrackets.length ? expectedBrackets[expectedBracketIndex] : null;
|
||||
}
|
||||
}
|
||||
|
||||
let actual = model.findNextBracket({
|
||||
lineNumber: lineNumber,
|
||||
column: column
|
||||
});
|
||||
|
||||
assert.deepEqual(toRelaxedFoundBracket(actual), toRelaxedFoundBracket(currentExpectedBracket), 'findNextBracket of ' + lineNumber + ', ' + column);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
model.dispose();
|
||||
}
|
||||
|
||||
test('brackets', () => {
|
||||
testBrackets([
|
||||
'if (a == 3) { return (7 * (a + 5)); }'
|
||||
], [
|
||||
['{', '}'],
|
||||
['[', ']'],
|
||||
['(', ')']
|
||||
]);
|
||||
});
|
||||
|
||||
});
|
||||
@@ -10,6 +10,10 @@ import {ViewLineToken} from 'vs/editor/common/core/viewLineToken';
|
||||
import {ITokenizationSupport} from 'vs/editor/common/modes';
|
||||
import {MockMode} from 'vs/editor/test/common/mocks/mockMode';
|
||||
import {Token} from 'vs/editor/common/core/token';
|
||||
import {Range} from 'vs/editor/common/core/range';
|
||||
import {IFoundBracket} from 'vs/editor/common/editorCommon';
|
||||
import {TextModel} from 'vs/editor/common/model/textModel';
|
||||
import {TextModelWithTokens} from 'vs/editor/common/model/textModelWithTokens';
|
||||
|
||||
suite('TextModelWithTokens', () => {
|
||||
|
||||
@@ -61,3 +65,122 @@ suite('TextModelWithTokens', () => {
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
suite('TextModelWithTokens', () => {
|
||||
|
||||
function toRelaxedFoundBracket(a:IFoundBracket) {
|
||||
if (!a) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
range: a.range.toString(),
|
||||
open: a.open,
|
||||
close: a.close,
|
||||
isOpen: a.isOpen
|
||||
};
|
||||
}
|
||||
|
||||
function testBrackets(contents: string[], brackets:string[][]): void {
|
||||
let charIsBracket: {[char:string]:boolean} = {};
|
||||
let charIsOpenBracket: {[char:string]:boolean} = {};
|
||||
let openForChar: {[char:string]:string} = {};
|
||||
let closeForChar: {[char:string]:string} = {};
|
||||
brackets.forEach((b) => {
|
||||
charIsBracket[b[0]] = true;
|
||||
charIsBracket[b[1]] = true;
|
||||
|
||||
charIsOpenBracket[b[0]] = true;
|
||||
charIsOpenBracket[b[1]] = false;
|
||||
|
||||
openForChar[b[0]] = b[0];
|
||||
closeForChar[b[0]] = b[1];
|
||||
|
||||
openForChar[b[1]] = b[0];
|
||||
closeForChar[b[1]] = b[1];
|
||||
});
|
||||
|
||||
let expectedBrackets:IFoundBracket[] = [];
|
||||
for (let lineIndex = 0; lineIndex < contents.length; lineIndex++) {
|
||||
let lineText = contents[lineIndex];
|
||||
|
||||
for (let charIndex = 0; charIndex < lineText.length; charIndex++) {
|
||||
let ch = lineText.charAt(charIndex);
|
||||
if (charIsBracket[ch]) {
|
||||
expectedBrackets.push({
|
||||
open: openForChar[ch],
|
||||
close: closeForChar[ch],
|
||||
isOpen: charIsOpenBracket[ch],
|
||||
range: new Range(lineIndex + 1, charIndex + 1, lineIndex + 1, charIndex + 2)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let model = new TextModelWithTokens([], TextModel.toRawText(contents.join('\n'), TextModel.DEFAULT_CREATION_OPTIONS), null);
|
||||
|
||||
// findPrevBracket
|
||||
{
|
||||
let expectedBracketIndex = expectedBrackets.length - 1;
|
||||
let currentExpectedBracket = expectedBracketIndex >= 0 ? expectedBrackets[expectedBracketIndex] : null;
|
||||
for (let lineNumber = contents.length; lineNumber >= 1; lineNumber--) {
|
||||
let lineText = contents[lineNumber - 1];
|
||||
|
||||
for (let column = lineText.length + 1; column >= 1; column--) {
|
||||
|
||||
if (currentExpectedBracket) {
|
||||
if (lineNumber === currentExpectedBracket.range.startLineNumber && column < currentExpectedBracket.range.endColumn) {
|
||||
expectedBracketIndex--;
|
||||
currentExpectedBracket = expectedBracketIndex >= 0 ? expectedBrackets[expectedBracketIndex] : null;
|
||||
}
|
||||
}
|
||||
|
||||
let actual = model.findPrevBracket({
|
||||
lineNumber: lineNumber,
|
||||
column: column
|
||||
});
|
||||
|
||||
assert.deepEqual(toRelaxedFoundBracket(actual), toRelaxedFoundBracket(currentExpectedBracket), 'findPrevBracket of ' + lineNumber + ', ' + column);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// findNextBracket
|
||||
{
|
||||
let expectedBracketIndex = 0;
|
||||
let currentExpectedBracket = expectedBracketIndex < expectedBrackets.length ? expectedBrackets[expectedBracketIndex] : null;
|
||||
for (let lineNumber = 1; lineNumber <= contents.length; lineNumber++) {
|
||||
let lineText = contents[lineNumber - 1];
|
||||
|
||||
for (let column = 1; column <= lineText.length + 1; column++) {
|
||||
|
||||
if (currentExpectedBracket) {
|
||||
if (lineNumber === currentExpectedBracket.range.startLineNumber && column > currentExpectedBracket.range.startColumn) {
|
||||
expectedBracketIndex++;
|
||||
currentExpectedBracket = expectedBracketIndex < expectedBrackets.length ? expectedBrackets[expectedBracketIndex] : null;
|
||||
}
|
||||
}
|
||||
|
||||
let actual = model.findNextBracket({
|
||||
lineNumber: lineNumber,
|
||||
column: column
|
||||
});
|
||||
|
||||
assert.deepEqual(toRelaxedFoundBracket(actual), toRelaxedFoundBracket(currentExpectedBracket), 'findNextBracket of ' + lineNumber + ', ' + column);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
model.dispose();
|
||||
}
|
||||
|
||||
test('brackets', () => {
|
||||
testBrackets([
|
||||
'if (a == 3) { return (7 * (a + 5)); }'
|
||||
], [
|
||||
['{', '}'],
|
||||
['[', ']'],
|
||||
['(', ')']
|
||||
]);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user