mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-06 09:35:41 -05:00
Merge from master
This commit is contained in:
@@ -2,17 +2,16 @@
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { renderViewLine2 as renderViewLine, RenderLineInput, CharacterMapping } from 'vs/editor/common/viewLayout/viewLineRenderer';
|
||||
import { ViewLineToken, ViewLineTokens } from 'vs/editor/test/common/core/viewLineToken';
|
||||
import { CharCode } from 'vs/base/common/charCode';
|
||||
import * as strings from 'vs/base/common/strings';
|
||||
import { IViewLineTokens } from 'vs/editor/common/core/lineTokens';
|
||||
import { MetadataConsts } from 'vs/editor/common/modes';
|
||||
import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations';
|
||||
import { CharacterMapping, RenderLineInput, renderViewLine2 as renderViewLine } from 'vs/editor/common/viewLayout/viewLineRenderer';
|
||||
import { InlineDecorationType } from 'vs/editor/common/viewModel/viewModel';
|
||||
import { IViewLineTokens } from 'vs/editor/common/core/lineTokens';
|
||||
import * as strings from 'vs/base/common/strings';
|
||||
import { ViewLineToken, ViewLineTokens } from 'vs/editor/test/common/core/viewLineToken';
|
||||
|
||||
function createViewLineTokens(viewLineTokens: ViewLineToken[]): IViewLineTokens {
|
||||
return new ViewLineTokens(viewLineTokens);
|
||||
@@ -29,6 +28,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
function assertCharacterReplacement(lineContent: string, tabSize: number, expected: string, expectedCharOffsetInPart: number[][], expectedPartLengts: number[]): void {
|
||||
let _actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
strings.isBasicASCII(lineContent),
|
||||
@@ -77,6 +77,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
function assertParts(lineContent: string, tabSize: number, parts: ViewLineToken[], expected: string, expectedCharOffsetInPart: number[][], expectedPartLengts: number[]): void {
|
||||
let _actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
true,
|
||||
@@ -115,6 +116,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
test('overflow', () => {
|
||||
let _actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
'Hello world!',
|
||||
false,
|
||||
true,
|
||||
@@ -218,6 +220,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
|
||||
let _actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
true,
|
||||
@@ -279,6 +282,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
|
||||
let _actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
true,
|
||||
@@ -340,6 +344,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
|
||||
let _actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
true,
|
||||
@@ -378,6 +383,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
|
||||
let _actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
false,
|
||||
@@ -407,6 +413,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
let lineParts = createViewLineTokens([createPart(lineText.length, 1)]);
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
true,
|
||||
@@ -506,6 +513,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
let lineParts = createViewLineTokens([createPart(lineText.length, 1)]);
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
true,
|
||||
@@ -529,7 +537,9 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
'101 chars',
|
||||
_lineText.substr(0, 101),
|
||||
[
|
||||
'<span class="mtk1">This\u00a0is\u00a0just\u00a0a\u00a0long\u00a0line\u00a0that\u00a0contains\u00a0very\u00a0interesting\u00a0text.\u00a0This\u00a0is\u00a0just\u00a0a\u00a0long\u00a0line\u00a0that\u00a0contains\u00a0</span>',
|
||||
'<span class="mtk1">This\u00a0is\u00a0just\u00a0a\u00a0long\u00a0line\u00a0that\u00a0contains\u00a0very\u00a0</span>',
|
||||
'<span class="mtk1">interesting\u00a0text.\u00a0This\u00a0is\u00a0just\u00a0a\u00a0long\u00a0line\u00a0that\u00a0</span>',
|
||||
'<span class="mtk1">contains\u00a0</span>',
|
||||
]
|
||||
);
|
||||
}
|
||||
@@ -541,6 +551,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
let lineParts = createViewLineTokens([createPart(lineText.length, 1)]);
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
false,
|
||||
@@ -569,6 +580,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
];
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
false,
|
||||
@@ -613,6 +625,7 @@ suite('viewLineRenderer.renderLine', () => {
|
||||
].join('');
|
||||
|
||||
let _actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
lineText,
|
||||
false,
|
||||
@@ -696,6 +709,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
function testCreateLineParts(fontIsMonospace: boolean, lineContent: string, tokens: ViewLineToken[], fauxIndentLength: number, renderWhitespace: 'none' | 'boundary' | 'all', expected: string): void {
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
fontIsMonospace,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
true,
|
||||
@@ -720,6 +734,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
true,
|
||||
@@ -749,6 +764,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
let lineContent = '\'let url = `http://***/_api/web/lists/GetByTitle(\\\'Teambuildingaanvragen\\\')/items`;\'';
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
@@ -1016,6 +1032,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
test('createLineParts can handle unsorted inline decorations', () => {
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
'Hello world',
|
||||
false,
|
||||
true,
|
||||
@@ -1059,6 +1076,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
true,
|
||||
@@ -1090,6 +1108,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
true,
|
||||
@@ -1122,6 +1141,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
true,
|
||||
@@ -1149,6 +1169,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
test('issue #37208: Collapsing bullet point containing emoji in Markdown document results in [??] character', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
' 1. 🙏',
|
||||
false,
|
||||
@@ -1178,6 +1199,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
test('issue #37401: Allow both before and after decorations on empty line', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
'',
|
||||
false,
|
||||
@@ -1209,6 +1231,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
test('issue #38935: GitLens end-of-line blame no longer rendering', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
'\t}',
|
||||
false,
|
||||
@@ -1241,6 +1264,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
test('issue #22832: Consider fullwidth characters when rendering tabs', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
'asd = "擦"\t\t#asd',
|
||||
false,
|
||||
@@ -1269,6 +1293,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
test('issue #22832: Consider fullwidth characters when rendering tabs (render whitespace)', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
'asd = "擦"\t\t#asd',
|
||||
false,
|
||||
@@ -1303,6 +1328,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
test('issue #22352: COMBINING ACUTE ACCENT (U+0301)', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
'12345689012345678901234568901234567890123456890abába',
|
||||
false,
|
||||
@@ -1331,6 +1357,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
test('issue #22352: Partially Broken Complex Script Rendering of Tamil', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
' JoyShareல் பின்தொடர்ந்து, விடீயோ, ஜோக்குகள், அனிமேசன், நகைச்சுவை படங்கள் மற்றும் செய்திகளை பெறுவீர்',
|
||||
false,
|
||||
@@ -1349,20 +1376,19 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
|
||||
let expected = [
|
||||
'<span>',
|
||||
'<span class="mtk3">\u00a0JoyShareல்\u00a0பின்தொடர்ந்து,\u00a0விடீயோ,\u00a0ஜோக்குகள்,\u00a0அனிமேசன்,\u00a0நகைச்சுவை\u00a0படங்கள்\u00a0மற்றும்\u00a0செய்திகளை\u00a0பெறுவீர்</span>',
|
||||
'<span class="mtk3">\u00a0JoyShareல்\u00a0பின்தொடர்ந்து,\u00a0விடீயோ,\u00a0ஜோக்குகள்,\u00a0</span>',
|
||||
'<span class="mtk3">அனிமேசன்,\u00a0நகைச்சுவை\u00a0படங்கள்\u00a0மற்றும்\u00a0செய்திகளை\u00a0</span>',
|
||||
'<span class="mtk3">பெறுவீர்</span>',
|
||||
'</span>'
|
||||
].join('');
|
||||
|
||||
let _expected = expected.split('').map(c => c.charCodeAt(0));
|
||||
let _actual = actual.html.split('').map(c => c.charCodeAt(0));
|
||||
assert.deepEqual(_actual, _expected);
|
||||
|
||||
assert.deepEqual(actual.html, expected);
|
||||
});
|
||||
|
||||
test('issue #42700: Hindi characters are not being rendered properly', () => {
|
||||
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
' वो ऐसा क्या है जो हमारे अंदर भी है और बाहर भी है। जिसकी वजह से हम सब हैं। जिसने इस सृष्टि की रचना की है।',
|
||||
false,
|
||||
@@ -1381,7 +1407,9 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
|
||||
let expected = [
|
||||
'<span>',
|
||||
'<span class="mtk3">\u00a0वो\u00a0ऐसा\u00a0क्या\u00a0है\u00a0जो\u00a0हमारे\u00a0अंदर\u00a0भी\u00a0है\u00a0और\u00a0बाहर\u00a0भी\u00a0है।\u00a0जिसकी\u00a0वजह\u00a0से\u00a0हम\u00a0सब\u00a0हैं।\u00a0जिसने\u00a0इस\u00a0सृष्टि\u00a0की\u00a0रचना\u00a0की\u00a0है।</span>',
|
||||
'<span class="mtk3">\u00a0वो\u00a0ऐसा\u00a0क्या\u00a0है\u00a0जो\u00a0हमारे\u00a0अंदर\u00a0भी\u00a0है\u00a0और\u00a0बाहर\u00a0भी\u00a0है।\u00a0</span>',
|
||||
'<span class="mtk3">जिसकी\u00a0वजह\u00a0से\u00a0हम\u00a0सब\u00a0हैं।\u00a0जिसने\u00a0इस\u00a0सृष्टि\u00a0की\u00a0रचना\u00a0की\u00a0</span>',
|
||||
'<span class="mtk3">है।</span>',
|
||||
'</span>'
|
||||
].join('');
|
||||
|
||||
@@ -1390,6 +1418,7 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
|
||||
test('issue #38123: editor.renderWhitespace: "boundary" renders whitespace at line wrap point when line is wrapped', () => {
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
true,
|
||||
true,
|
||||
'This is a long line which never uses more than two spaces. ',
|
||||
true,
|
||||
@@ -1415,9 +1444,70 @@ suite('viewLineRenderer.renderLine 2', () => {
|
||||
assert.deepEqual(actual.html, expected);
|
||||
});
|
||||
|
||||
test('issue #33525: Long line with ligatures takes a long time to paint decorations', () => {
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
false,
|
||||
'append data to append data to append data to append data to append data to append data to append data to append data to append data to append data to append data to append data to append data to',
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
0,
|
||||
createViewLineTokens([createPart(194, 3)]),
|
||||
[],
|
||||
4,
|
||||
10,
|
||||
10000,
|
||||
'none',
|
||||
false,
|
||||
true
|
||||
));
|
||||
|
||||
let expected = [
|
||||
'<span>',
|
||||
'<span class="mtk3">append\u00a0data\u00a0to\u00a0append\u00a0data\u00a0to\u00a0append\u00a0data\u00a0to\u00a0</span>',
|
||||
'<span class="mtk3">append\u00a0data\u00a0to\u00a0append\u00a0data\u00a0to\u00a0append\u00a0data\u00a0to\u00a0</span>',
|
||||
'<span class="mtk3">append\u00a0data\u00a0to\u00a0append\u00a0data\u00a0to\u00a0append\u00a0data\u00a0to\u00a0</span>',
|
||||
'<span class="mtk3">append\u00a0data\u00a0to\u00a0append\u00a0data\u00a0to\u00a0append\u00a0data\u00a0to\u00a0</span>',
|
||||
'<span class="mtk3">append\u00a0data\u00a0to</span>',
|
||||
'</span>'
|
||||
].join('');
|
||||
|
||||
assert.deepEqual(actual.html, expected);
|
||||
});
|
||||
|
||||
test('issue #33525: Long line with ligatures takes a long time to paint decorations - not possible', () => {
|
||||
let actual = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
false,
|
||||
'appenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatato',
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
0,
|
||||
createViewLineTokens([createPart(194, 3)]),
|
||||
[],
|
||||
4,
|
||||
10,
|
||||
10000,
|
||||
'none',
|
||||
false,
|
||||
true
|
||||
));
|
||||
|
||||
let expected = [
|
||||
'<span>',
|
||||
'<span class="mtk3">appenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatatoappenddatato</span>',
|
||||
'</span>'
|
||||
].join('');
|
||||
|
||||
assert.deepEqual(actual.html, expected);
|
||||
});
|
||||
|
||||
function createTestGetColumnOfLinePartOffset(lineContent: string, tabSize: number, parts: ViewLineToken[], expectedPartLengths: number[]): (partIndex: number, partLength: number, offset: number, expected: number) => void {
|
||||
let renderLineOutput = renderViewLine(new RenderLineInput(
|
||||
false,
|
||||
true,
|
||||
lineContent,
|
||||
false,
|
||||
true,
|
||||
|
||||
Reference in New Issue
Block a user