mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-14 12:11:43 +01:00
561 lines
33 KiB
TypeScript
561 lines
33 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
'use strict';
|
|
|
|
import * as assert from 'assert';
|
|
import {WhitespaceComputer} from 'vs/editor/common/viewLayout/whitespaceComputer';
|
|
|
|
suite('Editor ViewLayout - WhitespaceComputer', () => {
|
|
|
|
test('WhitespaceComputer', () => {
|
|
|
|
var whitespaceComputer = new WhitespaceComputer();
|
|
|
|
// Insert a whitespace after line number 2, of height 10
|
|
var a = whitespaceComputer.insertWhitespace(2, 0, 10);
|
|
// 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
|
|
var b = whitespaceComputer.insertWhitespace(2, 0, 20);
|
|
// 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.changeWhitespace(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);
|
|
// 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);
|
|
// 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);
|
|
// 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.changeWhitespace(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.onModelLinesDeleted(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.onModelLinesInserted(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.onModelLinesDeleted(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', () => {
|
|
|
|
var makeArray = (size:number, fillValue:number) => {
|
|
var r:number[] = [];
|
|
for (var i = 0; i < size; i++) {
|
|
r[i] = fillValue;
|
|
}
|
|
return r;
|
|
};
|
|
|
|
var arr:number[];
|
|
var 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 changeAfterLineNumberForWhitespace & getFirstWhitespaceIndexAfterLineNumber', () => {
|
|
var whitespaceComputer = new WhitespaceComputer();
|
|
|
|
var a = whitespaceComputer.insertWhitespace(0, 0, 1);
|
|
var b = whitespaceComputer.insertWhitespace(7, 0, 1);
|
|
var c = whitespaceComputer.insertWhitespace(3, 0, 1);
|
|
|
|
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.changeAfterLineNumberForWhitespace(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.changeAfterLineNumberForWhitespace(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.changeAfterLineNumberForWhitespace(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.changeAfterLineNumberForWhitespace(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.changeAfterLineNumberForWhitespace(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', () => {
|
|
var whitespaceComputer = new WhitespaceComputer();
|
|
|
|
var a = whitespaceComputer.insertWhitespace(0, 0, 1);
|
|
var b = whitespaceComputer.insertWhitespace(7, 0, 1);
|
|
|
|
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
|
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), b); // 7
|
|
|
|
var c = whitespaceComputer.insertWhitespace(3, 0, 1);
|
|
|
|
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(0), a); // 0
|
|
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(1), c); // 3
|
|
assert.equal(whitespaceComputer.getIdForWhitespaceIndex(2), b); // 7
|
|
|
|
var d = whitespaceComputer.insertWhitespace(2, 0, 1);
|
|
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
|
|
|
|
var e = whitespaceComputer.insertWhitespace(8, 0, 1);
|
|
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
|
|
|
|
var f = whitespaceComputer.insertWhitespace(11, 0, 1);
|
|
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
|
|
|
|
var g = whitespaceComputer.insertWhitespace(10, 0, 1);
|
|
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
|
|
|
|
var h = whitespaceComputer.insertWhitespace(0, 0, 1);
|
|
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
|
|
});
|
|
});
|
|
|