mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-08 01:28:26 -05:00
Merge from vscode a5cf1da01d5db3d2557132be8d30f89c38019f6c (#8525)
* Merge from vscode a5cf1da01d5db3d2557132be8d30f89c38019f6c * remove files we don't want * fix hygiene * update distro * update distro * fix hygiene * fix strict nulls * distro * distro * fix tests * fix tests * add another edit * fix viewlet icon * fix azure dialog * fix some padding * fix more padding issues
This commit is contained in:
@@ -14,6 +14,7 @@ import { getEditOperation, testCommand } from 'vs/editor/test/browser/testComman
|
||||
import { withEditorModel } from 'vs/editor/test/common/editorTestUtils';
|
||||
import { MockMode } from 'vs/editor/test/common/mocks/mockMode';
|
||||
import { javascriptOnEnterRules } from 'vs/editor/test/common/modes/supports/javascriptOnEnterRules';
|
||||
import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions';
|
||||
|
||||
/**
|
||||
* Create single edit operation
|
||||
@@ -50,6 +51,7 @@ function testShiftCommand(lines: string[], languageIdentifier: LanguageIdentifie
|
||||
indentSize: 4,
|
||||
insertSpaces: false,
|
||||
useTabStops: useTabStops,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
}), expectedLines, expectedSelection);
|
||||
}
|
||||
|
||||
@@ -60,6 +62,7 @@ function testUnshiftCommand(lines: string[], languageIdentifier: LanguageIdentif
|
||||
indentSize: 4,
|
||||
insertSpaces: false,
|
||||
useTabStops: useTabStops,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
}), expectedLines, expectedSelection);
|
||||
}
|
||||
|
||||
@@ -672,7 +675,8 @@ suite('Editor Commands - ShiftCommand', () => {
|
||||
tabSize: 4,
|
||||
indentSize: 4,
|
||||
insertSpaces: true,
|
||||
useTabStops: false
|
||||
useTabStops: false,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
}),
|
||||
[
|
||||
' Written | Numeric',
|
||||
@@ -717,7 +721,8 @@ suite('Editor Commands - ShiftCommand', () => {
|
||||
tabSize: 4,
|
||||
indentSize: 4,
|
||||
insertSpaces: true,
|
||||
useTabStops: false
|
||||
useTabStops: false,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
}),
|
||||
[
|
||||
' Written | Numeric',
|
||||
@@ -762,7 +767,8 @@ suite('Editor Commands - ShiftCommand', () => {
|
||||
tabSize: 4,
|
||||
indentSize: 4,
|
||||
insertSpaces: false,
|
||||
useTabStops: false
|
||||
useTabStops: false,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
}),
|
||||
[
|
||||
' Written | Numeric',
|
||||
@@ -807,7 +813,8 @@ suite('Editor Commands - ShiftCommand', () => {
|
||||
tabSize: 4,
|
||||
indentSize: 4,
|
||||
insertSpaces: true,
|
||||
useTabStops: false
|
||||
useTabStops: false,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
}),
|
||||
[
|
||||
' Written | Numeric',
|
||||
@@ -841,7 +848,8 @@ suite('Editor Commands - ShiftCommand', () => {
|
||||
tabSize: 4,
|
||||
indentSize: 4,
|
||||
insertSpaces: false,
|
||||
useTabStops: true
|
||||
useTabStops: true,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
}),
|
||||
[
|
||||
'\tHello world!',
|
||||
@@ -951,7 +959,8 @@ suite('Editor Commands - ShiftCommand', () => {
|
||||
tabSize: tabSize,
|
||||
indentSize: indentSize,
|
||||
insertSpaces: insertSpaces,
|
||||
useTabStops: true
|
||||
useTabStops: true,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
});
|
||||
let actual = getEditOperation(model, op);
|
||||
assert.deepEqual(actual, expected);
|
||||
@@ -965,7 +974,8 @@ suite('Editor Commands - ShiftCommand', () => {
|
||||
tabSize: tabSize,
|
||||
indentSize: indentSize,
|
||||
insertSpaces: insertSpaces,
|
||||
useTabStops: true
|
||||
useTabStops: true,
|
||||
autoIndent: EditorAutoIndentStrategy.Full,
|
||||
});
|
||||
let actual = getEditOperation(model, op);
|
||||
assert.deepEqual(actual, expected);
|
||||
|
||||
@@ -726,7 +726,7 @@ suite('Editor Controller - Cursor', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('combining marks', () => {
|
||||
test('grapheme breaking', () => {
|
||||
withTestCodeEditor([
|
||||
'abcabc',
|
||||
'ãããããã',
|
||||
@@ -2834,7 +2834,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
],
|
||||
languageIdentifier: mode.getLanguageIdentifier(),
|
||||
modelOpts: { insertSpaces: false },
|
||||
editorOpts: { autoIndent: true }
|
||||
editorOpts: { autoIndent: 'full' }
|
||||
}, (model, cursor) => {
|
||||
moveTo(cursor, 1, 12, false);
|
||||
assertCursor(cursor, new Selection(1, 12, 1, 12));
|
||||
@@ -2857,7 +2857,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
'\t'
|
||||
],
|
||||
languageIdentifier: mode.getLanguageIdentifier(),
|
||||
editorOpts: { autoIndent: true }
|
||||
editorOpts: { autoIndent: 'full' }
|
||||
}, (model, cursor) => {
|
||||
moveTo(cursor, 2, 2, false);
|
||||
assertCursor(cursor, new Selection(2, 2, 2, 2));
|
||||
@@ -2876,7 +2876,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
],
|
||||
languageIdentifier: mode.getLanguageIdentifier(),
|
||||
modelOpts: { insertSpaces: false },
|
||||
editorOpts: { autoIndent: true }
|
||||
editorOpts: { autoIndent: 'full' }
|
||||
}, (model, cursor) => {
|
||||
moveTo(cursor, 2, 15, false);
|
||||
assertCursor(cursor, new Selection(2, 15, 2, 15));
|
||||
@@ -2896,7 +2896,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
],
|
||||
languageIdentifier: mode.getLanguageIdentifier(),
|
||||
modelOpts: { insertSpaces: false },
|
||||
editorOpts: { autoIndent: true }
|
||||
editorOpts: { autoIndent: 'full' }
|
||||
}, (model, cursor) => {
|
||||
moveTo(cursor, 2, 14, false);
|
||||
assertCursor(cursor, new Selection(2, 14, 2, 14));
|
||||
@@ -2924,7 +2924,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
mode.getLanguageIdentifier()
|
||||
);
|
||||
|
||||
withTestCodeEditor(null, { model: model, autoIndent: true }, (editor, cursor) => {
|
||||
withTestCodeEditor(null, { model: model, autoIndent: 'full' }, (editor, cursor) => {
|
||||
moveTo(cursor, 2, 11, false);
|
||||
assertCursor(cursor, new Selection(2, 11, 2, 11));
|
||||
|
||||
@@ -2948,7 +2948,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
'}}'
|
||||
],
|
||||
languageIdentifier: mode.getLanguageIdentifier(),
|
||||
editorOpts: { autoIndent: true }
|
||||
editorOpts: { autoIndent: 'full' }
|
||||
}, (model, cursor) => {
|
||||
moveTo(cursor, 3, 13, false);
|
||||
assertCursor(cursor, new Selection(3, 13, 3, 13));
|
||||
@@ -3084,7 +3084,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
],
|
||||
languageIdentifier: mode.getLanguageIdentifier(),
|
||||
modelOpts: { insertSpaces: false },
|
||||
editorOpts: { autoIndent: true }
|
||||
editorOpts: { autoIndent: 'full' }
|
||||
}, (model, cursor) => {
|
||||
moveTo(cursor, 5, 4, false);
|
||||
assertCursor(cursor, new Selection(5, 4, 5, 4));
|
||||
@@ -3554,7 +3554,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
rubyMode.getLanguageIdentifier()
|
||||
);
|
||||
|
||||
withTestCodeEditor(null, { model: model, autoIndent: true }, (editor, cursor) => {
|
||||
withTestCodeEditor(null, { model: model, autoIndent: 'full' }, (editor, cursor) => {
|
||||
moveTo(cursor, 4, 7, false);
|
||||
assertCursor(cursor, new Selection(4, 7, 4, 7));
|
||||
|
||||
@@ -3615,7 +3615,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
'\t\t'
|
||||
],
|
||||
languageIdentifier: mode.getLanguageIdentifier(),
|
||||
editorOpts: { autoIndent: true }
|
||||
editorOpts: { autoIndent: 'full' }
|
||||
}, (model, cursor) => {
|
||||
moveTo(cursor, 3, 3, false);
|
||||
assertCursor(cursor, new Selection(3, 3, 3, 3));
|
||||
@@ -3664,7 +3664,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
mode.getLanguageIdentifier()
|
||||
);
|
||||
|
||||
withTestCodeEditor(null, { model: model, autoIndent: false }, (editor, cursor) => {
|
||||
withTestCodeEditor(null, { model: model, autoIndent: 'advanced' }, (editor, cursor) => {
|
||||
moveTo(cursor, 7, 6, false);
|
||||
assertCursor(cursor, new Selection(7, 6, 7, 6));
|
||||
|
||||
@@ -3728,7 +3728,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
mode.getLanguageIdentifier()
|
||||
);
|
||||
|
||||
withTestCodeEditor(null, { model: model, autoIndent: false }, (editor, cursor) => {
|
||||
withTestCodeEditor(null, { model: model, autoIndent: 'advanced' }, (editor, cursor) => {
|
||||
moveTo(cursor, 8, 1, false);
|
||||
assertCursor(cursor, new Selection(8, 1, 8, 1));
|
||||
|
||||
@@ -3791,7 +3791,7 @@ suite('Editor Controller - Indentation Rules', () => {
|
||||
mode.getLanguageIdentifier()
|
||||
);
|
||||
|
||||
withTestCodeEditor(null, { model: model, autoIndent: true }, (editor, cursor) => {
|
||||
withTestCodeEditor(null, { model: model, autoIndent: 'full' }, (editor, cursor) => {
|
||||
moveTo(cursor, 3, 19, false);
|
||||
assertCursor(cursor, new Selection(3, 19, 3, 19));
|
||||
|
||||
@@ -4936,6 +4936,35 @@ suite('autoClosingPairs', () => {
|
||||
mode.dispose();
|
||||
});
|
||||
|
||||
test('issue #84998: Overtyping Brackets doesn\'t work after backslash', () => {
|
||||
let mode = new AutoClosingMode();
|
||||
usingCursor({
|
||||
text: [
|
||||
''
|
||||
],
|
||||
languageIdentifier: mode.getLanguageIdentifier()
|
||||
}, (model, cursor) => {
|
||||
|
||||
cursor.setSelections('test', [new Selection(1, 1, 1, 1)]);
|
||||
|
||||
cursorCommand(cursor, H.Type, { text: '\\' }, 'keyboard');
|
||||
assert.equal(model.getValue(), '\\');
|
||||
|
||||
cursorCommand(cursor, H.Type, { text: '(' }, 'keyboard');
|
||||
assert.equal(model.getValue(), '\\()');
|
||||
|
||||
cursorCommand(cursor, H.Type, { text: 'abc' }, 'keyboard');
|
||||
assert.equal(model.getValue(), '\\(abc)');
|
||||
|
||||
cursorCommand(cursor, H.Type, { text: '\\' }, 'keyboard');
|
||||
assert.equal(model.getValue(), '\\(abc\\)');
|
||||
|
||||
cursorCommand(cursor, H.Type, { text: ')' }, 'keyboard');
|
||||
assert.equal(model.getValue(), '\\(abc\\)');
|
||||
});
|
||||
mode.dispose();
|
||||
});
|
||||
|
||||
test('issue #2773: Accents (´`¨^, others?) are inserted in the wrong position (Mac)', () => {
|
||||
let mode = new AutoClosingMode();
|
||||
usingCursor({
|
||||
|
||||
@@ -103,7 +103,7 @@ function doCreateTest(description: string, inputStr: string, expectedStr: string
|
||||
|
||||
const selection = new Range(1, 1 + cursorOffset, 1, 1 + cursorOffset + cursorLength);
|
||||
|
||||
return PagedScreenReaderStrategy.fromEditorSelection(currentState, model, selection, true);
|
||||
return PagedScreenReaderStrategy.fromEditorSelection(currentState, model, selection, 10, true);
|
||||
},
|
||||
deduceModelPosition: (viewAnchorPosition: Position, deltaOffset: number, lineFeedCnt: number): Position => {
|
||||
return null!;
|
||||
|
||||
@@ -535,7 +535,7 @@ suite('TextAreaState', () => {
|
||||
|
||||
function testPagedScreenReaderStrategy(lines: string[], selection: Selection, expected: TextAreaState): void {
|
||||
const model = TextModel.createFromString(lines.join('\n'));
|
||||
const actual = PagedScreenReaderStrategy.fromEditorSelection(TextAreaState.EMPTY, model, selection, true);
|
||||
const actual = PagedScreenReaderStrategy.fromEditorSelection(TextAreaState.EMPTY, model, selection, 10, true);
|
||||
assert.ok(equalsTextAreaState(actual, expected));
|
||||
model.dispose();
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import { URI } from 'vs/base/common/uri';
|
||||
import { OpenerService } from 'vs/editor/browser/services/openerService';
|
||||
import { TestCodeEditorService } from 'vs/editor/test/browser/editorTestServices';
|
||||
import { CommandsRegistry, ICommandService, NullCommandService } from 'vs/platform/commands/common/commands';
|
||||
import { matchesScheme } from 'vs/platform/opener/common/opener';
|
||||
|
||||
suite('OpenerService', function () {
|
||||
const editorService = new TestCodeEditorService();
|
||||
@@ -28,27 +29,27 @@ suite('OpenerService', function () {
|
||||
lastCommand = undefined;
|
||||
});
|
||||
|
||||
test('delegate to editorService, scheme:///fff', function () {
|
||||
test('delegate to editorService, scheme:///fff', async function () {
|
||||
const openerService = new OpenerService(editorService, NullCommandService);
|
||||
openerService.open(URI.parse('another:///somepath'));
|
||||
await openerService.open(URI.parse('another:///somepath'));
|
||||
assert.equal(editorService.lastInput!.options!.selection, undefined);
|
||||
});
|
||||
|
||||
test('delegate to editorService, scheme:///fff#L123', function () {
|
||||
test('delegate to editorService, scheme:///fff#L123', async function () {
|
||||
const openerService = new OpenerService(editorService, NullCommandService);
|
||||
|
||||
openerService.open(URI.parse('file:///somepath#L23'));
|
||||
await openerService.open(URI.parse('file:///somepath#L23'));
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startLineNumber, 23);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startColumn, 1);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.endLineNumber, undefined);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.endColumn, undefined);
|
||||
assert.equal(editorService.lastInput!.resource.fragment, '');
|
||||
|
||||
openerService.open(URI.parse('another:///somepath#L23'));
|
||||
await openerService.open(URI.parse('another:///somepath#L23'));
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startLineNumber, 23);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startColumn, 1);
|
||||
|
||||
openerService.open(URI.parse('another:///somepath#L23,45'));
|
||||
await openerService.open(URI.parse('another:///somepath#L23,45'));
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startLineNumber, 23);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startColumn, 45);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.endLineNumber, undefined);
|
||||
@@ -56,17 +57,17 @@ suite('OpenerService', function () {
|
||||
assert.equal(editorService.lastInput!.resource.fragment, '');
|
||||
});
|
||||
|
||||
test('delegate to editorService, scheme:///fff#123,123', function () {
|
||||
test('delegate to editorService, scheme:///fff#123,123', async function () {
|
||||
const openerService = new OpenerService(editorService, NullCommandService);
|
||||
|
||||
openerService.open(URI.parse('file:///somepath#23'));
|
||||
await openerService.open(URI.parse('file:///somepath#23'));
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startLineNumber, 23);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startColumn, 1);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.endLineNumber, undefined);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.endColumn, undefined);
|
||||
assert.equal(editorService.lastInput!.resource.fragment, '');
|
||||
|
||||
openerService.open(URI.parse('file:///somepath#23,45'));
|
||||
await openerService.open(URI.parse('file:///somepath#23,45'));
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startLineNumber, 23);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.startColumn, 45);
|
||||
assert.equal(editorService.lastInput!.options!.selection!.endLineNumber, undefined);
|
||||
@@ -74,22 +75,22 @@ suite('OpenerService', function () {
|
||||
assert.equal(editorService.lastInput!.resource.fragment, '');
|
||||
});
|
||||
|
||||
test('delegate to commandsService, command:someid', function () {
|
||||
test('delegate to commandsService, command:someid', async function () {
|
||||
const openerService = new OpenerService(editorService, commandService);
|
||||
|
||||
const id = `aCommand${Math.random()}`;
|
||||
CommandsRegistry.registerCommand(id, function () { });
|
||||
|
||||
openerService.open(URI.parse('command:' + id));
|
||||
await openerService.open(URI.parse('command:' + id));
|
||||
assert.equal(lastCommand!.id, id);
|
||||
assert.equal(lastCommand!.args.length, 0);
|
||||
|
||||
openerService.open(URI.parse('command:' + id).with({ query: '123' }));
|
||||
await openerService.open(URI.parse('command:' + id).with({ query: '123' }));
|
||||
assert.equal(lastCommand!.id, id);
|
||||
assert.equal(lastCommand!.args.length, 1);
|
||||
assert.equal(lastCommand!.args[0], '123');
|
||||
|
||||
openerService.open(URI.parse('command:' + id).with({ query: JSON.stringify([12, true]) }));
|
||||
await openerService.open(URI.parse('command:' + id).with({ query: JSON.stringify([12, true]) }));
|
||||
assert.equal(lastCommand!.id, id);
|
||||
assert.equal(lastCommand!.args.length, 2);
|
||||
assert.equal(lastCommand!.args[0], 12);
|
||||
@@ -199,4 +200,18 @@ suite('OpenerService', function () {
|
||||
assert.equal(v1, 2);
|
||||
assert.equal(v2, 0);
|
||||
});
|
||||
|
||||
test('matchesScheme', function () {
|
||||
assert.ok(matchesScheme('https://microsoft.com', 'https'));
|
||||
assert.ok(matchesScheme('http://microsoft.com', 'http'));
|
||||
assert.ok(matchesScheme('hTTPs://microsoft.com', 'https'));
|
||||
assert.ok(matchesScheme('httP://microsoft.com', 'http'));
|
||||
assert.ok(matchesScheme(URI.parse('https://microsoft.com'), 'https'));
|
||||
assert.ok(matchesScheme(URI.parse('http://microsoft.com'), 'http'));
|
||||
assert.ok(matchesScheme(URI.parse('hTTPs://microsoft.com'), 'https'));
|
||||
assert.ok(matchesScheme(URI.parse('httP://microsoft.com'), 'http'));
|
||||
assert.ok(!matchesScheme(URI.parse('https://microsoft.com'), 'http'));
|
||||
assert.ok(!matchesScheme(URI.parse('htt://microsoft.com'), 'http'));
|
||||
assert.ok(!matchesScheme(URI.parse('z://microsoft.com'), 'http'));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -86,7 +86,7 @@ suite('MinimapCharRenderer', () => {
|
||||
imageData.data[4 * i + 2] = background.b;
|
||||
imageData.data[4 * i + 3] = 255;
|
||||
}
|
||||
renderer.renderChar(imageData, 0, 0, 'd'.charCodeAt(0), color, background, false);
|
||||
renderer.renderChar(imageData, 0, 0, 'd'.charCodeAt(0), color, background, 2, false);
|
||||
|
||||
let actual: number[] = [];
|
||||
for (let i = 0; i < imageData.data.length; i++) {
|
||||
@@ -116,7 +116,7 @@ suite('MinimapCharRenderer', () => {
|
||||
imageData.data[4 * i + 3] = 255;
|
||||
}
|
||||
|
||||
renderer.renderChar(imageData, 0, 0, 'd'.charCodeAt(0), color, background, false);
|
||||
renderer.renderChar(imageData, 0, 0, 'd'.charCodeAt(0), color, background, 1, false);
|
||||
|
||||
let actual: number[] = [];
|
||||
for (let i = 0; i < imageData.data.length; i++) {
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body style="background:black">
|
||||
<canvas id="my-canvas"></canvas>
|
||||
|
||||
<script src="../../../../loader.js"></script>
|
||||
<script>
|
||||
require.config({
|
||||
baseUrl: '../../../../../../out'
|
||||
});
|
||||
|
||||
require(['vs/editor/test/browser/view/minimapFontCreator'], function() {
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,119 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { RGBA8 } from 'vs/editor/common/core/rgba';
|
||||
import { MinimapCharRenderer } from 'vs/editor/browser/viewParts/minimap/minimapCharRenderer';
|
||||
import { Constants } from 'vs/editor/browser/viewParts/minimap/minimapCharSheet';
|
||||
import { MinimapCharRendererFactory } from 'vs/editor/browser/viewParts/minimap/minimapCharRendererFactory';
|
||||
|
||||
let sampleData = MinimapCharRendererFactory.createSampleData('monospace');
|
||||
let minimapCharRenderer1x = MinimapCharRendererFactory.createFromSampleData(sampleData.data, 1);
|
||||
let minimapCharRenderer2x = MinimapCharRendererFactory.createFromSampleData(sampleData.data, 2);
|
||||
let minimapCharRenderer4x = MinimapCharRendererFactory.createFromSampleData(sampleData.data, 4);
|
||||
let minimapCharRenderer6x = MinimapCharRendererFactory.createFromSampleData(sampleData.data, 6);
|
||||
|
||||
renderImageData(sampleData, 10, 100);
|
||||
renderMinimapCharRenderer(minimapCharRenderer1x, 400, 1);
|
||||
renderMinimapCharRenderer(minimapCharRenderer2x, 500, 2);
|
||||
renderMinimapCharRenderer(minimapCharRenderer4x, 600, 4);
|
||||
renderMinimapCharRenderer(minimapCharRenderer6x, 750, 8);
|
||||
|
||||
function createFakeImageData(width: number, height: number): ImageData {
|
||||
return {
|
||||
width: width,
|
||||
height: height,
|
||||
data: new Uint8ClampedArray(width * height * Constants.RGBA_CHANNELS_CNT)
|
||||
};
|
||||
}
|
||||
|
||||
function renderMinimapCharRenderer(minimapCharRenderer: MinimapCharRenderer, y: number, scale: number): void {
|
||||
let background = new RGBA8(0, 0, 0, 255);
|
||||
let color = new RGBA8(255, 255, 255, 255);
|
||||
|
||||
{
|
||||
let x2 = createFakeImageData(
|
||||
Constants.BASE_CHAR_WIDTH * scale * Constants.CHAR_COUNT,
|
||||
Constants.BASE_CHAR_HEIGHT * scale
|
||||
);
|
||||
// set the background color
|
||||
for (let i = 0, len = x2.data.length / 4; i < len; i++) {
|
||||
x2.data[4 * i + 0] = background.r;
|
||||
x2.data[4 * i + 1] = background.g;
|
||||
x2.data[4 * i + 2] = background.b;
|
||||
x2.data[4 * i + 3] = 255;
|
||||
}
|
||||
let dx = 0;
|
||||
for (let chCode = Constants.START_CH_CODE; chCode <= Constants.END_CH_CODE; chCode++) {
|
||||
minimapCharRenderer.renderChar(x2, dx, 0, chCode, color, background, false);
|
||||
dx += Constants.BASE_CHAR_WIDTH * scale;
|
||||
}
|
||||
renderImageData(x2, 10, y);
|
||||
}
|
||||
}
|
||||
|
||||
(function () {
|
||||
let r = 'let x2Data = [',
|
||||
offset = 0;
|
||||
for (let charIndex = 0; charIndex < Constants.CHAR_COUNT; charIndex++) {
|
||||
let charCode = charIndex + Constants.START_CH_CODE;
|
||||
r += '\n\n// ' + String.fromCharCode(charCode);
|
||||
|
||||
for (let i = 0; i < Constants.BASE_CHAR_HEIGHT * 2; i++) {
|
||||
if (i % 2 === 0) {
|
||||
r += '\n';
|
||||
}
|
||||
r += (minimapCharRenderer2x as any).charDataNormal[offset] + ',';
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
r += '\n\n]';
|
||||
console.log(r);
|
||||
})();
|
||||
|
||||
(function () {
|
||||
let r = 'let x1Data = [',
|
||||
offset = 0;
|
||||
for (let charIndex = 0; charIndex < Constants.CHAR_COUNT; charIndex++) {
|
||||
let charCode = charIndex + Constants.START_CH_CODE;
|
||||
r += '\n\n// ' + String.fromCharCode(charCode);
|
||||
|
||||
for (let i = 0; i < Constants.BASE_CHAR_HEIGHT * Constants.BASE_CHAR_WIDTH; i++) {
|
||||
r += '\n';
|
||||
r += (minimapCharRenderer1x as any).charDataNormal[offset] + ',';
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
r += '\n\n]';
|
||||
console.log(r);
|
||||
})();
|
||||
|
||||
function renderImageData(imageData: ImageData, left: number, top: number): void {
|
||||
let output = '';
|
||||
let offset = 0;
|
||||
let PX_SIZE = 15;
|
||||
for (let i = 0; i < imageData.height; i++) {
|
||||
for (let j = 0; j < imageData.width; j++) {
|
||||
let R = imageData.data[offset];
|
||||
let G = imageData.data[offset + 1];
|
||||
let B = imageData.data[offset + 2];
|
||||
let A = imageData.data[offset + 3];
|
||||
offset += 4;
|
||||
|
||||
output += `<div style="position:absolute;top:${PX_SIZE * i}px;left:${PX_SIZE *
|
||||
j}px;width:${PX_SIZE}px;height:${PX_SIZE}px;background:rgba(${R},${G},${B},${A / 256})"></div>`;
|
||||
}
|
||||
}
|
||||
|
||||
let domNode = document.createElement('div');
|
||||
domNode.style.position = 'absolute';
|
||||
domNode.style.top = top + 'px';
|
||||
domNode.style.left = left + 'px';
|
||||
domNode.style.width = imageData.width * PX_SIZE + 'px';
|
||||
domNode.style.height = imageData.height * PX_SIZE + 'px';
|
||||
domNode.style.border = '1px solid #ccc';
|
||||
domNode.style.background = '#000000';
|
||||
domNode.innerHTML = output;
|
||||
document.body.appendChild(domNode);
|
||||
}
|
||||
@@ -755,7 +755,7 @@ suite('Editor Model - TextModel', () => {
|
||||
assert.deepEqual(actual, expected, `validateRange for ${input}, got ${actual}, expected ${expected}`);
|
||||
}
|
||||
|
||||
test('combining marks', () => {
|
||||
test('grapheme breaking', () => {
|
||||
const m = TextModel.createFromString([
|
||||
'abcabc',
|
||||
'ãããããã',
|
||||
|
||||
@@ -202,4 +202,11 @@ suite('Editor Modes - Link Computer', () => {
|
||||
' http://[::1]:5000/connect/token '
|
||||
);
|
||||
});
|
||||
|
||||
test('issue #70254: bold links dont open in markdown file using editor mode with ctrl + click', () => {
|
||||
assertLink(
|
||||
'2. Navigate to **https://portal.azure.com**',
|
||||
' https://portal.azure.com '
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -6,6 +6,7 @@ import * as assert from 'assert';
|
||||
import { CharacterPair, IndentAction } from 'vs/editor/common/modes/languageConfiguration';
|
||||
import { OnEnterSupport } from 'vs/editor/common/modes/supports/onEnter';
|
||||
import { javascriptOnEnterRules } from 'vs/editor/test/common/modes/supports/javascriptOnEnterRules';
|
||||
import { EditorAutoIndentStrategy } from 'vs/editor/common/config/editorOptions';
|
||||
|
||||
suite('OnEnter', () => {
|
||||
|
||||
@@ -18,7 +19,7 @@ suite('OnEnter', () => {
|
||||
brackets: brackets
|
||||
});
|
||||
let testIndentAction = (beforeText: string, afterText: string, expected: IndentAction) => {
|
||||
let actual = support.onEnter('', beforeText, afterText);
|
||||
let actual = support.onEnter(EditorAutoIndentStrategy.Advanced, '', beforeText, afterText);
|
||||
if (expected === IndentAction.None) {
|
||||
assert.equal(actual, null);
|
||||
} else {
|
||||
@@ -48,10 +49,10 @@ suite('OnEnter', () => {
|
||||
|
||||
test('uses regExpRules', () => {
|
||||
let support = new OnEnterSupport({
|
||||
regExpRules: javascriptOnEnterRules
|
||||
onEnterRules: javascriptOnEnterRules
|
||||
});
|
||||
let testIndentAction = (oneLineAboveText: string, beforeText: string, afterText: string, expectedIndentAction: IndentAction | null, expectedAppendText: string | null, removeText: number = 0) => {
|
||||
let actual = support.onEnter(oneLineAboveText, beforeText, afterText);
|
||||
let actual = support.onEnter(EditorAutoIndentStrategy.Advanced, oneLineAboveText, beforeText, afterText);
|
||||
if (expectedIndentAction === null) {
|
||||
assert.equal(actual, null, 'isNull:' + beforeText);
|
||||
} else {
|
||||
@@ -132,4 +133,4 @@ suite('OnEnter', () => {
|
||||
testIndentAction('', ' * test() {', '', IndentAction.Indent, null, 0);
|
||||
testIndentAction(' ', ' * test() {', '', IndentAction.Indent, null, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -109,9 +109,9 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #ff0000;font-style: italic;font-weight: bold;">Ciao</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #00ff00;">hello</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #0000ff;text-decoration: underline;">world!</span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
@@ -122,9 +122,9 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #ff0000;font-style: italic;font-weight: bold;">Ciao</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #00ff00;">hello</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #0000ff;text-decoration: underline;">w</span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
@@ -135,9 +135,9 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #ff0000;font-style: italic;font-weight: bold;">Ciao</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #00ff00;">hello</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
);
|
||||
@@ -147,9 +147,9 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #ff0000;font-style: italic;font-weight: bold;">iao</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #00ff00;">hello</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
);
|
||||
@@ -158,9 +158,9 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
tokenizeLineToHTML(text, lineTokens, colorMap, 4, 11, 4, true),
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #00ff00;">hello</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
);
|
||||
@@ -170,7 +170,7 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #00ff00;">hello</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
);
|
||||
@@ -241,11 +241,11 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
tokenizeLineToHTML(text, lineTokens, colorMap, 0, 21, 4, true),
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;">  </span>',
|
||||
'<span style="color: #ff0000;font-style: italic;font-weight: bold;">Ciao</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;">   </span>',
|
||||
'<span style="color: #00ff00;">hello</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #0000ff;text-decoration: underline;">world!</span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
@@ -255,11 +255,11 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
tokenizeLineToHTML(text, lineTokens, colorMap, 0, 17, 4, true),
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;">  </span>',
|
||||
'<span style="color: #ff0000;font-style: italic;font-weight: bold;">Ciao</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;">   </span>',
|
||||
'<span style="color: #00ff00;">hello</span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #0000ff;text-decoration: underline;">wo</span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
@@ -269,7 +269,7 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
|
||||
tokenizeLineToHTML(text, lineTokens, colorMap, 0, 3, 4, true),
|
||||
[
|
||||
'<div>',
|
||||
'<span style="color: #000000;"> </span>',
|
||||
'<span style="color: #000000;">  </span>',
|
||||
'<span style="color: #ff0000;font-style: italic;font-weight: bold;">C</span>',
|
||||
'</div>'
|
||||
].join('')
|
||||
|
||||
@@ -167,9 +167,8 @@ suite('EditorSimpleWorker', () => {
|
||||
assert.ok(false);
|
||||
return;
|
||||
}
|
||||
const { suggestions } = result;
|
||||
assert.equal(suggestions.length, 1);
|
||||
assert.equal(suggestions[0].label, 'foobar');
|
||||
assert.equal(result.length, 1);
|
||||
assert.equal(result, 'foobar');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import { ModelServiceImpl } from 'vs/editor/common/services/modelServiceImpl';
|
||||
import { ITextResourcePropertiesService } from 'vs/editor/common/services/resourceConfiguration';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
|
||||
import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService';
|
||||
|
||||
const GENERATE_TESTS = false;
|
||||
|
||||
@@ -27,7 +28,7 @@ suite('ModelService', () => {
|
||||
configService.setUserConfiguration('files', { 'eol': '\n' });
|
||||
configService.setUserConfiguration('files', { 'eol': '\r\n' }, URI.file(platform.isWindows ? 'c:\\myroot' : '/myroot'));
|
||||
|
||||
modelService = new ModelServiceImpl(configService, new TestTextResourcePropertiesService(configService));
|
||||
modelService = new ModelServiceImpl(configService, new TestTextResourcePropertiesService(configService), new TestThemeService());
|
||||
});
|
||||
|
||||
teardown(() => {
|
||||
|
||||
@@ -702,12 +702,12 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
|
||||
decorationsHeight: 800,
|
||||
|
||||
contentLeft: 10,
|
||||
contentWidth: 901,
|
||||
contentWidth: 893,
|
||||
contentHeight: 800,
|
||||
|
||||
renderMinimap: RenderMinimap.Text,
|
||||
minimapLeft: 911,
|
||||
minimapWidth: 89,
|
||||
minimapLeft: 903,
|
||||
minimapWidth: 97,
|
||||
viewportColumn: 89,
|
||||
|
||||
verticalScrollbarWidth: 0,
|
||||
@@ -760,12 +760,12 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
|
||||
decorationsHeight: 800,
|
||||
|
||||
contentLeft: 10,
|
||||
contentWidth: 901,
|
||||
contentWidth: 893,
|
||||
contentHeight: 800,
|
||||
|
||||
renderMinimap: RenderMinimap.Text,
|
||||
minimapLeft: 911,
|
||||
minimapWidth: 89,
|
||||
minimapLeft: 903,
|
||||
minimapWidth: 97,
|
||||
viewportColumn: 89,
|
||||
|
||||
verticalScrollbarWidth: 0,
|
||||
@@ -818,13 +818,13 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
|
||||
decorationsHeight: 800,
|
||||
|
||||
contentLeft: 10,
|
||||
contentWidth: 943,
|
||||
contentWidth: 935,
|
||||
contentHeight: 800,
|
||||
|
||||
renderMinimap: RenderMinimap.Text,
|
||||
minimapLeft: 953,
|
||||
minimapWidth: 47,
|
||||
viewportColumn: 94,
|
||||
minimapLeft: 945,
|
||||
minimapWidth: 55,
|
||||
viewportColumn: 93,
|
||||
|
||||
verticalScrollbarWidth: 0,
|
||||
horizontalScrollbarHeight: 0,
|
||||
@@ -863,26 +863,26 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
|
||||
width: 1000,
|
||||
height: 800,
|
||||
|
||||
glyphMarginLeft: 47,
|
||||
glyphMarginLeft: 55,
|
||||
glyphMarginWidth: 0,
|
||||
glyphMarginHeight: 800,
|
||||
|
||||
lineNumbersLeft: 47,
|
||||
lineNumbersLeft: 55,
|
||||
lineNumbersWidth: 0,
|
||||
lineNumbersHeight: 800,
|
||||
|
||||
decorationsLeft: 47,
|
||||
decorationsLeft: 55,
|
||||
decorationsWidth: 10,
|
||||
decorationsHeight: 800,
|
||||
|
||||
contentLeft: 57,
|
||||
contentWidth: 943,
|
||||
contentLeft: 65,
|
||||
contentWidth: 935,
|
||||
contentHeight: 800,
|
||||
|
||||
renderMinimap: RenderMinimap.Text,
|
||||
minimapLeft: 0,
|
||||
minimapWidth: 47,
|
||||
viewportColumn: 94,
|
||||
minimapWidth: 55,
|
||||
viewportColumn: 93,
|
||||
|
||||
verticalScrollbarWidth: 0,
|
||||
horizontalScrollbarHeight: 0,
|
||||
@@ -934,12 +934,12 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
|
||||
decorationsHeight: 422,
|
||||
|
||||
contentLeft: 92,
|
||||
contentWidth: 1026,
|
||||
contentWidth: 1018,
|
||||
contentHeight: 422,
|
||||
|
||||
renderMinimap: RenderMinimap.Text,
|
||||
minimapLeft: 1104,
|
||||
minimapWidth: 83,
|
||||
minimapLeft: 1096,
|
||||
minimapWidth: 91,
|
||||
viewportColumn: 83,
|
||||
|
||||
verticalScrollbarWidth: 14,
|
||||
|
||||
@@ -3,10 +3,28 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import * as assert from 'assert';
|
||||
import { LinesLayout } from 'vs/editor/common/viewLayout/linesLayout';
|
||||
import { LinesLayout, EditorWhitespace } from 'vs/editor/common/viewLayout/linesLayout';
|
||||
|
||||
suite('Editor ViewLayout - LinesLayout', () => {
|
||||
|
||||
function insertWhitespace(linesLayout: LinesLayout, afterLineNumber: number, ordinal: number, heightInPx: number, minWidth: number): string {
|
||||
return linesLayout.changeWhitespace((accessor) => {
|
||||
return accessor.insertWhitespace(afterLineNumber, ordinal, heightInPx, minWidth);
|
||||
});
|
||||
}
|
||||
|
||||
function changeOneWhitespace(linesLayout: LinesLayout, id: string, newAfterLineNumber: number, newHeight: number): void {
|
||||
linesLayout.changeWhitespace((accessor) => {
|
||||
accessor.changeOneWhitespace(id, newAfterLineNumber, newHeight);
|
||||
});
|
||||
}
|
||||
|
||||
function removeWhitespace(linesLayout: LinesLayout, id: string): void {
|
||||
linesLayout.changeWhitespace((accessor) => {
|
||||
accessor.removeWhitespace(id);
|
||||
});
|
||||
}
|
||||
|
||||
test('LinesLayout 1', () => {
|
||||
|
||||
// Start off with 10 lines
|
||||
@@ -39,7 +57,7 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
assert.equal(linesLayout.getLineNumberAtOrAfterVerticalOffset(29), 3);
|
||||
|
||||
// Add whitespace of height 5px after 2nd line
|
||||
linesLayout.insertWhitespace(2, 0, 5, 0);
|
||||
insertWhitespace(linesLayout, 2, 0, 5, 0);
|
||||
// lines: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||
// whitespace: a(2,5)
|
||||
assert.equal(linesLayout.getLinesTotalHeight(), 105);
|
||||
@@ -63,8 +81,8 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
assert.equal(linesLayout.getLineNumberAtOrAfterVerticalOffset(105), 10);
|
||||
|
||||
// Add two more whitespaces of height 5px
|
||||
linesLayout.insertWhitespace(3, 0, 5, 0);
|
||||
linesLayout.insertWhitespace(4, 0, 5, 0);
|
||||
insertWhitespace(linesLayout, 3, 0, 5, 0);
|
||||
insertWhitespace(linesLayout, 4, 0, 5, 0);
|
||||
// lines: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||
// whitespace: a(2,5), b(3, 5), c(4, 5)
|
||||
assert.equal(linesLayout.getLinesTotalHeight(), 115);
|
||||
@@ -120,7 +138,7 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
|
||||
// Start off with 10 lines and one whitespace after line 2, of height 5
|
||||
let linesLayout = new LinesLayout(10, 1);
|
||||
let a = linesLayout.insertWhitespace(2, 0, 5, 0);
|
||||
let a = insertWhitespace(linesLayout, 2, 0, 5, 0);
|
||||
|
||||
// 10 lines
|
||||
// whitespace: - a(2,5)
|
||||
@@ -139,7 +157,7 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
// Change whitespace height
|
||||
// 10 lines
|
||||
// whitespace: - a(2,10)
|
||||
linesLayout.changeWhitespace(a, 2, 10);
|
||||
changeOneWhitespace(linesLayout, a, 2, 10);
|
||||
assert.equal(linesLayout.getLinesTotalHeight(), 20);
|
||||
assert.equal(linesLayout.getVerticalOffsetForLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getVerticalOffsetForLineNumber(2), 1);
|
||||
@@ -155,7 +173,7 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
// Change whitespace position
|
||||
// 10 lines
|
||||
// whitespace: - a(5,10)
|
||||
linesLayout.changeWhitespace(a, 5, 10);
|
||||
changeOneWhitespace(linesLayout, a, 5, 10);
|
||||
assert.equal(linesLayout.getLinesTotalHeight(), 20);
|
||||
assert.equal(linesLayout.getVerticalOffsetForLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getVerticalOffsetForLineNumber(2), 1);
|
||||
@@ -200,7 +218,7 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
|
||||
// Remove whitespace
|
||||
// 10 lines
|
||||
linesLayout.removeWhitespace(a);
|
||||
removeWhitespace(linesLayout, a);
|
||||
assert.equal(linesLayout.getLinesTotalHeight(), 10);
|
||||
assert.equal(linesLayout.getVerticalOffsetForLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getVerticalOffsetForLineNumber(2), 1);
|
||||
@@ -216,7 +234,7 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
|
||||
test('LinesLayout getLineNumberAtOrAfterVerticalOffset', () => {
|
||||
let linesLayout = new LinesLayout(10, 1);
|
||||
linesLayout.insertWhitespace(6, 0, 10, 0);
|
||||
insertWhitespace(linesLayout, 6, 0, 10, 0);
|
||||
|
||||
// 10 lines
|
||||
// whitespace: - a(6,10)
|
||||
@@ -265,7 +283,7 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
|
||||
test('LinesLayout getCenteredLineInViewport', () => {
|
||||
let linesLayout = new LinesLayout(10, 1);
|
||||
linesLayout.insertWhitespace(6, 0, 10, 0);
|
||||
insertWhitespace(linesLayout, 6, 0, 10, 0);
|
||||
|
||||
// 10 lines
|
||||
// whitespace: - a(6,10)
|
||||
@@ -348,7 +366,7 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
|
||||
test('LinesLayout getLinesViewportData 1', () => {
|
||||
let linesLayout = new LinesLayout(10, 10);
|
||||
linesLayout.insertWhitespace(6, 0, 100, 0);
|
||||
insertWhitespace(linesLayout, 6, 0, 100, 0);
|
||||
|
||||
// 10 lines
|
||||
// whitespace: - a(6,100)
|
||||
@@ -479,11 +497,10 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
assert.deepEqual(viewportData.relativeVerticalOffset, [160, 170, 180, 190]);
|
||||
});
|
||||
|
||||
|
||||
test('LinesLayout getLinesViewportData 2 & getWhitespaceViewportData', () => {
|
||||
let linesLayout = new LinesLayout(10, 10);
|
||||
let a = linesLayout.insertWhitespace(6, 0, 100, 0);
|
||||
let b = linesLayout.insertWhitespace(7, 0, 50, 0);
|
||||
let a = insertWhitespace(linesLayout, 6, 0, 100, 0);
|
||||
let b = insertWhitespace(linesLayout, 7, 0, 50, 0);
|
||||
|
||||
// 10 lines
|
||||
// whitespace: - a(6,100), b(7, 50)
|
||||
@@ -553,8 +570,8 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
|
||||
test('LinesLayout getWhitespaceAtVerticalOffset', () => {
|
||||
let linesLayout = new LinesLayout(10, 10);
|
||||
let a = linesLayout.insertWhitespace(6, 0, 100, 0);
|
||||
let b = linesLayout.insertWhitespace(7, 0, 50, 0);
|
||||
let a = insertWhitespace(linesLayout, 6, 0, 100, 0);
|
||||
let b = insertWhitespace(linesLayout, 7, 0, 50, 0);
|
||||
|
||||
let whitespace = linesLayout.getWhitespaceAtVerticalOffset(0);
|
||||
assert.equal(whitespace, null);
|
||||
@@ -592,4 +609,536 @@ suite('Editor ViewLayout - LinesLayout', () => {
|
||||
whitespace = linesLayout.getWhitespaceAtVerticalOffset(220);
|
||||
assert.equal(whitespace, null);
|
||||
});
|
||||
|
||||
test('LinesLayout', () => {
|
||||
|
||||
const linesLayout = new LinesLayout(100, 20);
|
||||
|
||||
// Insert a whitespace after line number 2, of height 10
|
||||
const a = insertWhitespace(linesLayout, 2, 0, 10, 0);
|
||||
// whitespaces: a(2, 10)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 1);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 10);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 10);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 10);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 10);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 10);
|
||||
|
||||
// Insert a whitespace again after line number 2, of height 20
|
||||
let b = insertWhitespace(linesLayout, 2, 0, 20, 0);
|
||||
// whitespaces: a(2, 10), b(2, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 2);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 10);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 10);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 30);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 30);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 30);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 30);
|
||||
|
||||
// Change last inserted whitespace height to 30
|
||||
changeOneWhitespace(linesLayout, b, 2, 30);
|
||||
// whitespaces: a(2, 10), b(2, 30)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 2);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 10);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 30);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 10);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 40);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 40);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 40);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 40);
|
||||
|
||||
// Remove last inserted whitespace
|
||||
removeWhitespace(linesLayout, b);
|
||||
// whitespaces: a(2, 10)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 1);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 10);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 10);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 10);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 10);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 10);
|
||||
|
||||
// Add a whitespace before the first line of height 50
|
||||
b = insertWhitespace(linesLayout, 0, 0, 50, 0);
|
||||
// whitespaces: b(0, 50), a(2, 10)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 2);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 10);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 50);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 60);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 60);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 60);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 60);
|
||||
|
||||
// Add a whitespace after line 4 of height 20
|
||||
insertWhitespace(linesLayout, 4, 0, 20, 0);
|
||||
// whitespaces: b(0, 50), a(2, 10), c(4, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 3);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 10);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 4);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(2), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 50);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 60);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(2), 80);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 80);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 60);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 60);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(5), 80);
|
||||
|
||||
// Add a whitespace after line 3 of height 30
|
||||
insertWhitespace(linesLayout, 3, 0, 30, 0);
|
||||
// whitespaces: b(0, 50), a(2, 10), d(3, 30), c(4, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 4);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 10);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 3);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(2), 30);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(3), 4);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(3), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 50);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 60);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(2), 90);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(3), 110);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 110);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 60);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 90);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(5), 110);
|
||||
|
||||
// Change whitespace after line 2 to height of 100
|
||||
changeOneWhitespace(linesLayout, a, 2, 100);
|
||||
// whitespaces: b(0, 50), a(2, 100), d(3, 30), c(4, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 4);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 100);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 3);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(2), 30);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(3), 4);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(3), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 50);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 150);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(2), 180);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(3), 200);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 200);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 150);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 180);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(5), 200);
|
||||
|
||||
// Remove whitespace after line 2
|
||||
removeWhitespace(linesLayout, a);
|
||||
// whitespaces: b(0, 50), d(3, 30), c(4, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 3);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 30);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 4);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(2), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 50);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 80);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(2), 100);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 100);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 80);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(5), 100);
|
||||
|
||||
// Remove whitespace before line 1
|
||||
removeWhitespace(linesLayout, b);
|
||||
// whitespaces: d(3, 30), c(4, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 2);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 30);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 4);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 30);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 50);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 30);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(5), 50);
|
||||
|
||||
// Delete line 1
|
||||
linesLayout.onLinesDeleted(1, 1);
|
||||
// whitespaces: d(2, 30), c(3, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 2);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 30);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 30);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 50);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 30);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(5), 50);
|
||||
|
||||
// Insert a line before line 1
|
||||
linesLayout.onLinesInserted(1, 1);
|
||||
// whitespaces: d(3, 30), c(4, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 2);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 30);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 4);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 30);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 50);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 30);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(5), 50);
|
||||
|
||||
// Delete line 4
|
||||
linesLayout.onLinesDeleted(4, 4);
|
||||
// whitespaces: d(3, 30), c(3, 20)
|
||||
assert.equal(linesLayout.getWhitespacesCount(), 2);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(0), 30);
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(linesLayout.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(0), 30);
|
||||
assert.equal(linesLayout.getWhitespacesAccumulatedHeight(1), 50);
|
||||
assert.equal(linesLayout.getWhitespacesTotalHeight(), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(3), 0);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(4), 50);
|
||||
assert.equal(linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(5), 50);
|
||||
});
|
||||
|
||||
test('LinesLayout findInsertionIndex', () => {
|
||||
|
||||
const makeInternalWhitespace = (afterLineNumbers: number[], ordinal: number = 0) => {
|
||||
return afterLineNumbers.map((afterLineNumber) => new EditorWhitespace('', afterLineNumber, ordinal, 0, 0));
|
||||
};
|
||||
|
||||
let arr: EditorWhitespace[];
|
||||
|
||||
arr = makeInternalWhitespace([]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 0);
|
||||
|
||||
arr = makeInternalWhitespace([1]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
|
||||
arr = makeInternalWhitespace([1, 3]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 3, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 4, 0), 2);
|
||||
|
||||
arr = makeInternalWhitespace([1, 3, 5]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 3, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 4, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 5, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 6, 0), 3);
|
||||
|
||||
arr = makeInternalWhitespace([1, 3, 5], 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 3, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 4, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 5, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 6, 0), 3);
|
||||
|
||||
arr = makeInternalWhitespace([1, 3, 5, 7]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 3, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 4, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 5, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 6, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 7, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 8, 0), 4);
|
||||
|
||||
arr = makeInternalWhitespace([1, 3, 5, 7, 9]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 3, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 4, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 5, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 6, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 7, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 8, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 9, 0), 5);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 10, 0), 5);
|
||||
|
||||
arr = makeInternalWhitespace([1, 3, 5, 7, 9, 11]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 3, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 4, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 5, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 6, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 7, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 8, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 9, 0), 5);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 10, 0), 5);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 11, 0), 6);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 12, 0), 6);
|
||||
|
||||
arr = makeInternalWhitespace([1, 3, 5, 7, 9, 11, 13]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 3, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 4, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 5, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 6, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 7, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 8, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 9, 0), 5);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 10, 0), 5);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 11, 0), 6);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 12, 0), 6);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 13, 0), 7);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 14, 0), 7);
|
||||
|
||||
arr = makeInternalWhitespace([1, 3, 5, 7, 9, 11, 13, 15]);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 0, 0), 0);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 1, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 2, 0), 1);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 3, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 4, 0), 2);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 5, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 6, 0), 3);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 7, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 8, 0), 4);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 9, 0), 5);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 10, 0), 5);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 11, 0), 6);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 12, 0), 6);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 13, 0), 7);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 14, 0), 7);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 15, 0), 8);
|
||||
assert.equal(LinesLayout.findInsertionIndex(arr, 16, 0), 8);
|
||||
});
|
||||
|
||||
test('LinesLayout changeWhitespaceAfterLineNumber & getFirstWhitespaceIndexAfterLineNumber', () => {
|
||||
const linesLayout = new LinesLayout(100, 20);
|
||||
|
||||
const a = insertWhitespace(linesLayout, 0, 0, 1, 0);
|
||||
const b = insertWhitespace(linesLayout, 7, 0, 1, 0);
|
||||
const c = insertWhitespace(linesLayout, 3, 0, 1, 0);
|
||||
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), c); // 3
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(1), 1); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(2), 1); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(3), 1); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
// Do not really move a
|
||||
changeOneWhitespace(linesLayout, a, 1, 1);
|
||||
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 1
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 1);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), c); // 3
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(1), 0); // a
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(2), 1); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(3), 1); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
|
||||
// Do not really move a
|
||||
changeOneWhitespace(linesLayout, a, 2, 1);
|
||||
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 2
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), c); // 3
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(1), 0); // a
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(2), 0); // a
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(3), 1); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
|
||||
// Change a to conflict with c => a gets placed after c
|
||||
changeOneWhitespace(linesLayout, a, 3, 1);
|
||||
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), c); // 3
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), a); // 3
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(1), 0); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(2), 0); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(3), 0); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
|
||||
// Make a no-op
|
||||
changeOneWhitespace(linesLayout, c, 3, 1);
|
||||
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), c); // 3
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), a); // 3
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(1), 0); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(2), 0); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(3), 0); // c
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
|
||||
|
||||
// Conflict c with b => c gets placed after b
|
||||
changeOneWhitespace(linesLayout, c, 7, 1);
|
||||
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 3
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), b); // 7
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(1), 7);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), c); // 7
|
||||
assert.equal(linesLayout.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(1), 0); // a
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(2), 0); // a
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(3), 0); // a
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(4), 1); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(5), 1); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(6), 1); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(7), 1); // b
|
||||
assert.equal(linesLayout.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
});
|
||||
|
||||
test('LinesLayout Bug', () => {
|
||||
const linesLayout = new LinesLayout(100, 20);
|
||||
|
||||
const a = insertWhitespace(linesLayout, 0, 0, 1, 0);
|
||||
const b = insertWhitespace(linesLayout, 7, 0, 1, 0);
|
||||
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), b); // 7
|
||||
|
||||
const c = insertWhitespace(linesLayout, 3, 0, 1, 0);
|
||||
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), c); // 3
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), b); // 7
|
||||
|
||||
const d = insertWhitespace(linesLayout, 2, 0, 1, 0);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), d); // 2
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), c); // 3
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(3), b); // 7
|
||||
|
||||
const e = insertWhitespace(linesLayout, 8, 0, 1, 0);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), d); // 2
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), c); // 3
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(3), b); // 7
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(4), e); // 8
|
||||
|
||||
const f = insertWhitespace(linesLayout, 11, 0, 1, 0);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), d); // 2
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), c); // 3
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(3), b); // 7
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(4), e); // 8
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(5), f); // 11
|
||||
|
||||
const g = insertWhitespace(linesLayout, 10, 0, 1, 0);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), d); // 2
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), c); // 3
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(3), b); // 7
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(4), e); // 8
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(5), g); // 10
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(6), f); // 11
|
||||
|
||||
const h = insertWhitespace(linesLayout, 0, 0, 1, 0);
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(1), h); // 0
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(2), d); // 2
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(3), c); // 3
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(4), b); // 7
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(5), e); // 8
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(6), g); // 10
|
||||
assert.equal(linesLayout.getIdForWhitespaceIndex(7), f); // 11
|
||||
});
|
||||
});
|
||||
|
||||
@@ -189,8 +189,8 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
createPart(48, 12),
|
||||
]);
|
||||
let expectedOutput = [
|
||||
'<span class="vs-whitespace" style="width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="mtk2">export</span>',
|
||||
'<span class="mtk3">\u00a0</span>',
|
||||
'<span class="mtk4">class</span>',
|
||||
@@ -201,8 +201,8 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
'<span class="mtk9">\u00a0</span>',
|
||||
'<span class="mtk10">//\u00a0</span>',
|
||||
'<span class="mtk11">http://test.com</span>',
|
||||
'<span class="vs-whitespace" style="width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="width:30px">\u00b7\u00b7\u00b7</span>'
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:30px">\u00b7\u00b7\u00b7</span>'
|
||||
].join('');
|
||||
let expectedOffsetsArr = [
|
||||
[0],
|
||||
@@ -867,10 +867,10 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
null,
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="mtk2">He</span>',
|
||||
'<span class="mtk3">llo\u00a0world!</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -889,12 +889,12 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
null,
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="mtk2">He</span>',
|
||||
'<span class="mtk3">llo\u00a0world!</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -913,11 +913,11 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
null,
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="mtk2">He</span>',
|
||||
'<span class="mtk3">llo\u00a0world!</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -936,15 +936,15 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
null,
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u2192\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u2192\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="mtk2">He</span>',
|
||||
'<span class="mtk3">llo\u00a0world!</span>',
|
||||
'<span class="vs-whitespace" style="width:20px">\u00b7\uffeb</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u2192\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\uffeb</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:20px">\u00b7\uffeb</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u2192\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\uffeb</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -965,13 +965,13 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
[
|
||||
'<span>',
|
||||
'<span class="">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="mtk2">He</span>',
|
||||
'<span class="mtk3">llo\u00a0world!</span>',
|
||||
'<span class="vs-whitespace" style="width:20px">\u00b7\uffeb</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u2192\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\uffeb</span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:20px">\u00b7\uffeb</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u2192\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\uffeb</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u00b7\u00b7\u00b7\u00b7</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -1016,11 +1016,11 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
[
|
||||
'<span>',
|
||||
'<span class="mtk1">it</span>',
|
||||
'<span class="vs-whitespace" style="width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="mtk1">it</span>',
|
||||
'<span class="mtk2">\u00a0</span>',
|
||||
'<span class="mtk3">it</span>',
|
||||
'<span class="vs-whitespace" style="width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:20px">\u00b7\u00b7</span>',
|
||||
'<span class="mtk3">it</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
@@ -1041,12 +1041,12 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
null,
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk0">Hel</span>',
|
||||
'<span class="mtk1">lo</span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk2">world!</span>',
|
||||
'<span class="vs-whitespace" style="width:30px">\u2192\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:30px">\u2192\u00a0\u00a0</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -1088,12 +1088,12 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
[new LineRange(0, 14)],
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk0">Hel</span>',
|
||||
'<span class="mtk1">lo</span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk2">world!</span>',
|
||||
'<span class="vs-whitespace" style="width:30px">\u2192\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:30px">\u2192\u00a0\u00a0</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -1113,7 +1113,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
[new LineRange(0, 5)],
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk0">Hel</span>',
|
||||
'<span class="mtk1">lo</span>',
|
||||
'<span class="mtk2">\u00a0world!\u00a0\u00a0\u00a0</span>',
|
||||
@@ -1137,11 +1137,11 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
[new LineRange(0, 5), new LineRange(9, 14)],
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk0">Hel</span>',
|
||||
'<span class="mtk1">lo</span>',
|
||||
'<span class="mtk2">\u00a0world!</span>',
|
||||
'<span class="vs-whitespace" style="width:30px">\u2192\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:30px">\u2192\u00a0\u00a0</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -1162,11 +1162,11 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
[new LineRange(9, 14), new LineRange(0, 5)],
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk0">Hel</span>',
|
||||
'<span class="mtk1">lo</span>',
|
||||
'<span class="mtk2">\u00a0world!</span>',
|
||||
'<span class="vs-whitespace" style="width:30px">\u2192\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:30px">\u2192\u00a0\u00a0</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
);
|
||||
@@ -1184,9 +1184,9 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
[new LineRange(0, 1), new LineRange(1, 2), new LineRange(2, 3)],
|
||||
[
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk0">*</span>',
|
||||
'<span class="vs-whitespace" style="width:10px">\u00b7</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:10px">\u00b7</span>',
|
||||
'<span class="mtk0">S</span>',
|
||||
'</span>',
|
||||
].join('')
|
||||
@@ -1293,7 +1293,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
|
||||
let expected = [
|
||||
'<span>',
|
||||
'<span class="vs-whitespace" style="width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="vs-whitespace" style="display:inline-block;width:40px">\u2192\u00a0\u00a0\u00a0</span>',
|
||||
'<span class="mtk3 before">b</span>',
|
||||
'<span class="mtk3">la</span>',
|
||||
'</span>'
|
||||
|
||||
@@ -1,558 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import * as assert from 'assert';
|
||||
import { WhitespaceComputer } from 'vs/editor/common/viewLayout/whitespaceComputer';
|
||||
|
||||
suite('Editor ViewLayout - WhitespaceComputer', () => {
|
||||
|
||||
test('WhitespaceComputer', () => {
|
||||
|
||||
let whitespaceComputer = new WhitespaceComputer();
|
||||
|
||||
// Insert a whitespace after line number 2, of height 10
|
||||
let a = whitespaceComputer.insertWhitespace(2, 0, 10, 0);
|
||||
// whitespaces: a(2, 10)
|
||||
assert.equal(whitespaceComputer.getCount(), 1);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 10);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 10);
|
||||
|
||||
// Insert a whitespace again after line number 2, of height 20
|
||||
let b = whitespaceComputer.insertWhitespace(2, 0, 20, 0);
|
||||
// whitespaces: a(2, 10), b(2, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 2);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 10);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 30);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 30);
|
||||
|
||||
// Change last inserted whitespace height to 30
|
||||
whitespaceComputer.changeWhitespaceHeight(b, 30);
|
||||
// whitespaces: a(2, 10), b(2, 30)
|
||||
assert.equal(whitespaceComputer.getCount(), 2);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 10);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 40);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 40);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 40);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 40);
|
||||
|
||||
// Remove last inserted whitespace
|
||||
whitespaceComputer.removeWhitespace(b);
|
||||
// whitespaces: a(2, 10)
|
||||
assert.equal(whitespaceComputer.getCount(), 1);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 10);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 10);
|
||||
|
||||
// Add a whitespace before the first line of height 50
|
||||
b = whitespaceComputer.insertWhitespace(0, 0, 50, 0);
|
||||
// whitespaces: b(0, 50), a(2, 10)
|
||||
assert.equal(whitespaceComputer.getCount(), 2);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 10);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 60);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 60);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 60);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 60);
|
||||
|
||||
// Add a whitespace after line 4 of height 20
|
||||
whitespaceComputer.insertWhitespace(4, 0, 20, 0);
|
||||
// whitespaces: b(0, 50), a(2, 10), c(4, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 3);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 10);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 4);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(2), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 60);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(2), 80);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 80);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 60);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 60);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(5), 80);
|
||||
|
||||
// Add a whitespace after line 3 of height 30
|
||||
whitespaceComputer.insertWhitespace(3, 0, 30, 0);
|
||||
// whitespaces: b(0, 50), a(2, 10), d(3, 30), c(4, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 4);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 10);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 3);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(2), 30);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(3), 4);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(3), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 60);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(2), 90);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(3), 110);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 110);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 60);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 90);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(5), 110);
|
||||
|
||||
// Change whitespace after line 2 to height of 100
|
||||
whitespaceComputer.changeWhitespaceHeight(a, 100);
|
||||
// whitespaces: b(0, 50), a(2, 100), d(3, 30), c(4, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 4);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 100);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 3);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(2), 30);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(3), 4);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(3), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 150);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(2), 180);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(3), 200);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 200);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 150);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 180);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(5), 200);
|
||||
|
||||
// Remove whitespace after line 2
|
||||
whitespaceComputer.removeWhitespace(a);
|
||||
// whitespaces: b(0, 50), d(3, 30), c(4, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 3);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 50);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 30);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 4);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(2), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 80);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(2), 100);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 100);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 80);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(5), 100);
|
||||
|
||||
// Remove whitespace before line 1
|
||||
whitespaceComputer.removeWhitespace(b);
|
||||
// whitespaces: d(3, 30), c(4, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 2);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 30);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 4);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 50);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(5), 50);
|
||||
|
||||
// Delete line 1
|
||||
whitespaceComputer.onLinesDeleted(1, 1);
|
||||
// whitespaces: d(2, 30), c(3, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 2);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 30);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 50);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(5), 50);
|
||||
|
||||
// Insert a line before line 1
|
||||
whitespaceComputer.onLinesInserted(1, 1);
|
||||
// whitespaces: d(3, 30), c(4, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 2);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 30);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 4);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 50);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(5), 50);
|
||||
|
||||
// Delete line 4
|
||||
whitespaceComputer.onLinesDeleted(4, 4);
|
||||
// whitespaces: d(3, 30), c(3, 20)
|
||||
assert.equal(whitespaceComputer.getCount(), 2);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(0), 30);
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(whitespaceComputer.getHeightForWhitespaceIndex(1), 20);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(0), 30);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeight(1), 50);
|
||||
assert.equal(whitespaceComputer.getTotalHeight(), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(1), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(2), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(3), 0);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(4), 50);
|
||||
assert.equal(whitespaceComputer.getAccumulatedHeightBeforeLineNumber(5), 50);
|
||||
});
|
||||
|
||||
test('WhitespaceComputer findInsertionIndex', () => {
|
||||
|
||||
let makeArray = (size: number, fillValue: number) => {
|
||||
let r: number[] = [];
|
||||
for (let i = 0; i < size; i++) {
|
||||
r[i] = fillValue;
|
||||
}
|
||||
return r;
|
||||
};
|
||||
|
||||
let arr: number[];
|
||||
let ordinals: number[];
|
||||
|
||||
arr = [];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 0);
|
||||
|
||||
arr = [1];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
|
||||
arr = [1, 3];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 3, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 4, ordinals, 0), 2);
|
||||
|
||||
arr = [1, 3, 5];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 3, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 4, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 5, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 6, ordinals, 0), 3);
|
||||
|
||||
arr = [1, 3, 5];
|
||||
ordinals = makeArray(arr.length, 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 3, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 4, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 5, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 6, ordinals, 0), 3);
|
||||
|
||||
arr = [1, 3, 5, 7];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 3, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 4, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 5, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 6, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 7, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 8, ordinals, 0), 4);
|
||||
|
||||
arr = [1, 3, 5, 7, 9];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 3, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 4, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 5, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 6, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 7, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 8, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 9, ordinals, 0), 5);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 10, ordinals, 0), 5);
|
||||
|
||||
arr = [1, 3, 5, 7, 9, 11];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 3, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 4, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 5, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 6, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 7, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 8, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 9, ordinals, 0), 5);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 10, ordinals, 0), 5);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 11, ordinals, 0), 6);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 12, ordinals, 0), 6);
|
||||
|
||||
arr = [1, 3, 5, 7, 9, 11, 13];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 3, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 4, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 5, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 6, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 7, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 8, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 9, ordinals, 0), 5);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 10, ordinals, 0), 5);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 11, ordinals, 0), 6);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 12, ordinals, 0), 6);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 13, ordinals, 0), 7);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 14, ordinals, 0), 7);
|
||||
|
||||
arr = [1, 3, 5, 7, 9, 11, 13, 15];
|
||||
ordinals = makeArray(arr.length, 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 0, ordinals, 0), 0);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 1, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 2, ordinals, 0), 1);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 3, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 4, ordinals, 0), 2);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 5, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 6, ordinals, 0), 3);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 7, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 8, ordinals, 0), 4);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 9, ordinals, 0), 5);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 10, ordinals, 0), 5);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 11, ordinals, 0), 6);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 12, ordinals, 0), 6);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 13, ordinals, 0), 7);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 14, ordinals, 0), 7);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 15, ordinals, 0), 8);
|
||||
assert.equal(WhitespaceComputer.findInsertionIndex(arr, 16, ordinals, 0), 8);
|
||||
});
|
||||
|
||||
test('WhitespaceComputer changeWhitespaceAfterLineNumber & getFirstWhitespaceIndexAfterLineNumber', () => {
|
||||
let whitespaceComputer = new WhitespaceComputer();
|
||||
|
||||
let a = whitespaceComputer.insertWhitespace(0, 0, 1, 0);
|
||||
let b = whitespaceComputer.insertWhitespace(7, 0, 1, 0);
|
||||
let c = whitespaceComputer.insertWhitespace(3, 0, 1, 0);
|
||||
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 0);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), c); // 3
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(1), 1); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(2), 1); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(3), 1); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
// Do not really move a
|
||||
whitespaceComputer.changeWhitespaceAfterLineNumber(a, 1);
|
||||
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 1
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 1);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), c); // 3
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(1), 0); // a
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(2), 1); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(3), 1); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
|
||||
// Do not really move a
|
||||
whitespaceComputer.changeWhitespaceAfterLineNumber(a, 2);
|
||||
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 2
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 2);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), c); // 3
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(1), 0); // a
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(2), 0); // a
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(3), 1); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
|
||||
// Change a to conflict with c => a gets placed after c
|
||||
whitespaceComputer.changeWhitespaceAfterLineNumber(a, 3);
|
||||
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), c); // 3
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), a); // 3
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(1), 0); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(2), 0); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(3), 0); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
|
||||
// Make a no-op
|
||||
whitespaceComputer.changeWhitespaceAfterLineNumber(c, 3);
|
||||
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), c); // 3
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), a); // 3
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 3);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), b); // 7
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(1), 0); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(2), 0); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(3), 0); // c
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(4), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(5), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(6), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(7), 2); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
|
||||
|
||||
|
||||
// Conflict c with b => c gets placed after b
|
||||
whitespaceComputer.changeWhitespaceAfterLineNumber(c, 7);
|
||||
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 3
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(0), 3);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), b); // 7
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(1), 7);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), c); // 7
|
||||
assert.equal(whitespaceComputer.getAfterLineNumberForWhitespaceIndex(2), 7);
|
||||
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(1), 0); // a
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(2), 0); // a
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(3), 0); // a
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(4), 1); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(5), 1); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(6), 1); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(7), 1); // b
|
||||
assert.equal(whitespaceComputer.getFirstWhitespaceIndexAfterLineNumber(8), -1); // --
|
||||
});
|
||||
|
||||
|
||||
test('WhitespaceComputer Bug', () => {
|
||||
let whitespaceComputer = new WhitespaceComputer();
|
||||
|
||||
let a = whitespaceComputer.insertWhitespace(0, 0, 1, 0);
|
||||
let b = whitespaceComputer.insertWhitespace(7, 0, 1, 0);
|
||||
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), b); // 7
|
||||
|
||||
let c = whitespaceComputer.insertWhitespace(3, 0, 1, 0);
|
||||
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), c); // 3
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), b); // 7
|
||||
|
||||
let d = whitespaceComputer.insertWhitespace(2, 0, 1, 0);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), d); // 2
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), c); // 3
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(3), b); // 7
|
||||
|
||||
let e = whitespaceComputer.insertWhitespace(8, 0, 1, 0);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), d); // 2
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), c); // 3
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(3), b); // 7
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(4), e); // 8
|
||||
|
||||
let f = whitespaceComputer.insertWhitespace(11, 0, 1, 0);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), d); // 2
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), c); // 3
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(3), b); // 7
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(4), e); // 8
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(5), f); // 11
|
||||
|
||||
let g = whitespaceComputer.insertWhitespace(10, 0, 1, 0);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), d); // 2
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), c); // 3
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(3), b); // 7
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(4), e); // 8
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(5), g); // 10
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(6), f); // 11
|
||||
|
||||
let h = whitespaceComputer.insertWhitespace(0, 0, 1, 0);
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), h); // 0
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), d); // 2
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(3), c); // 3
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(4), b); // 7
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(5), e); // 8
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(6), g); // 10
|
||||
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(7), f); // 11
|
||||
});
|
||||
});
|
||||
|
||||
@@ -103,16 +103,6 @@ suite('ViewModelDecorations', () => {
|
||||
|
||||
// view line 2: (1,14 -> 1,24)
|
||||
assert.deepEqual(inlineDecorations1, [
|
||||
{
|
||||
range: new Range(1, 2, 2, 1),
|
||||
inlineClassName: 'i-dec2',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
{
|
||||
range: new Range(2, 1, 2, 1),
|
||||
inlineClassName: 'a-dec2',
|
||||
type: InlineDecorationType.After
|
||||
},
|
||||
{
|
||||
range: new Range(1, 2, 2, 2),
|
||||
inlineClassName: 'i-dec3',
|
||||
@@ -124,7 +114,7 @@ suite('ViewModelDecorations', () => {
|
||||
type: InlineDecorationType.After
|
||||
},
|
||||
{
|
||||
range: new Range(1, 2, 4, 1),
|
||||
range: new Range(1, 2, 3, 13),
|
||||
inlineClassName: 'i-dec4',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
@@ -164,7 +154,7 @@ suite('ViewModelDecorations', () => {
|
||||
type: InlineDecorationType.After
|
||||
},
|
||||
{
|
||||
range: new Range(2, 1, 4, 1),
|
||||
range: new Range(2, 1, 3, 13),
|
||||
inlineClassName: 'i-dec8',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
@@ -199,7 +189,7 @@ suite('ViewModelDecorations', () => {
|
||||
type: InlineDecorationType.After
|
||||
},
|
||||
{
|
||||
range: new Range(2, 3, 4, 1),
|
||||
range: new Range(2, 3, 3, 13),
|
||||
inlineClassName: 'i-dec11',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
@@ -228,30 +218,45 @@ suite('ViewModelDecorations', () => {
|
||||
// view line 3 (24 -> 36)
|
||||
assert.deepEqual(inlineDecorations2, [
|
||||
{
|
||||
range: new Range(1, 2, 4, 1),
|
||||
range: new Range(1, 2, 3, 13),
|
||||
inlineClassName: 'i-dec4',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
{
|
||||
range: new Range(3, 13, 3, 13),
|
||||
inlineClassName: 'a-dec4',
|
||||
type: InlineDecorationType.After
|
||||
},
|
||||
{
|
||||
range: new Range(1, 2, 5, 8),
|
||||
inlineClassName: 'i-dec5',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
{
|
||||
range: new Range(2, 1, 4, 1),
|
||||
range: new Range(2, 1, 3, 13),
|
||||
inlineClassName: 'i-dec8',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
{
|
||||
range: new Range(3, 13, 3, 13),
|
||||
inlineClassName: 'a-dec8',
|
||||
type: InlineDecorationType.After
|
||||
},
|
||||
{
|
||||
range: new Range(2, 1, 5, 8),
|
||||
inlineClassName: 'i-dec9',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
{
|
||||
range: new Range(2, 3, 4, 1),
|
||||
range: new Range(2, 3, 3, 13),
|
||||
inlineClassName: 'i-dec11',
|
||||
type: InlineDecorationType.Regular
|
||||
},
|
||||
{
|
||||
range: new Range(3, 13, 3, 13),
|
||||
inlineClassName: 'a-dec11',
|
||||
type: InlineDecorationType.After
|
||||
},
|
||||
{
|
||||
range: new Range(2, 3, 5, 8),
|
||||
inlineClassName: 'i-dec12',
|
||||
|
||||
Reference in New Issue
Block a user