Files
azuredatastudio/src/vs/editor/test/common/modes/linkComputer.test.ts

194 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*---------------------------------------------------------------------------------------------
* 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 { ILink } from 'vs/editor/common/modes';
import { ILinkComputerTarget, computeLinks } from 'vs/editor/common/modes/linkComputer';
class SimpleLinkComputerTarget implements ILinkComputerTarget {
constructor(private _lines: string[]) {
// Intentional Empty
}
public getLineCount(): number {
return this._lines.length;
}
public getLineContent(lineNumber: number): string {
return this._lines[lineNumber - 1];
}
}
function myComputeLinks(lines: string[]): ILink[] {
var target = new SimpleLinkComputerTarget(lines);
return computeLinks(target);
}
function assertLink(text: string, extractedLink: string): void {
var startColumn = 0,
endColumn = 0,
chr: string,
i = 0;
for (i = 0; i < extractedLink.length; i++) {
chr = extractedLink.charAt(i);
if (chr !== ' ' && chr !== '\t') {
startColumn = i + 1;
break;
}
}
for (i = extractedLink.length - 1; i >= 0; i--) {
chr = extractedLink.charAt(i);
if (chr !== ' ' && chr !== '\t') {
endColumn = i + 2;
break;
}
}
var r = myComputeLinks([text]);
assert.deepEqual(r, [{
range: {
startLineNumber: 1,
startColumn: startColumn,
endLineNumber: 1,
endColumn: endColumn
},
url: extractedLink.substring(startColumn - 1, endColumn - 1)
}]);
}
suite('Editor Modes - Link Computer', () => {
test('Null model', () => {
var r = computeLinks(null);
assert.deepEqual(r, []);
});
test('Parsing', () => {
assertLink(
'x = "http://foo.bar";',
' http://foo.bar '
);
assertLink(
'x = (http://foo.bar);',
' http://foo.bar '
);
assertLink(
'x = [http://foo.bar];',
' http://foo.bar '
);
assertLink(
'x = \'http://foo.bar\';',
' http://foo.bar '
);
assertLink(
'x = http://foo.bar ;',
' http://foo.bar '
);
assertLink(
'x = <http://foo.bar>;',
' http://foo.bar '
);
assertLink(
'x = {http://foo.bar};',
' http://foo.bar '
);
assertLink(
'(see http://foo.bar)',
' http://foo.bar '
);
assertLink(
'[see http://foo.bar]',
' http://foo.bar '
);
assertLink(
'{see http://foo.bar}',
' http://foo.bar '
);
assertLink(
'<see http://foo.bar>',
' http://foo.bar '
);
assertLink(
'<url>http://mylink.com</url>',
' http://mylink.com '
);
assertLink(
'// Click here to learn more. https://go.microsoft.com/fwlink/?LinkID=513275&clcid=0x409',
' https://go.microsoft.com/fwlink/?LinkID=513275&clcid=0x409'
);
assertLink(
'// Click here to learn more. https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx',
' https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx'
);
assertLink(
'// https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Scripts/selectNodeVersion.js',
' https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Scripts/selectNodeVersion.js'
);
assertLink(
'<!-- !!! Do not remove !!! WebContentRef(link:https://go.microsoft.com/fwlink/?LinkId=166007, area:Admin, updated:2015, nextUpdate:2016, tags:SqlServer) !!! Do not remove !!! -->',
' https://go.microsoft.com/fwlink/?LinkId=166007 '
);
assertLink(
'For instructions, see https://go.microsoft.com/fwlink/?LinkId=166007.</value>',
' https://go.microsoft.com/fwlink/?LinkId=166007 '
);
assertLink(
'For instructions, see https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx.</value>',
' https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx '
);
assertLink(
'x = "https://en.wikipedia.org/wiki/Zürich";',
' https://en.wikipedia.org/wiki/Zürich '
);
assertLink(
'請參閱 http://go.microsoft.com/fwlink/?LinkId=761051。',
' http://go.microsoft.com/fwlink/?LinkId=761051 '
);
assertLink(
'(請參閱 http://go.microsoft.com/fwlink/?LinkId=761051',
' http://go.microsoft.com/fwlink/?LinkId=761051 '
);
assertLink(
'x = "file:///foo.bar";',
' file:///foo.bar '
);
assertLink(
'x = "file://c:/foo.bar";',
' file://c:/foo.bar '
);
assertLink(
'x = "file://shares/foo.bar";',
' file://shares/foo.bar '
);
assertLink(
'x = "file://shäres/foo.bar";',
' file://shäres/foo.bar '
);
assertLink(
'Some text, then http://www.bing.com.',
' http://www.bing.com '
);
assertLink(
'let url = `http://***/_api/web/lists/GetByTitle(\'Teambuildingaanvragen\')/items`;',
' http://***/_api/web/lists/GetByTitle(\'Teambuildingaanvragen\')/items '
);
});
});