/*--------------------------------------------------------------------------------------------- * 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 ' ); 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( '', ' http://foo.bar ' ); assertLink( 'http://mylink.com', ' 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( '', ' https://go.microsoft.com/fwlink/?LinkId=166007 ' ); assertLink( 'For instructions, see https://go.microsoft.com/fwlink/?LinkId=166007.', ' 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.', ' 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 ' ); }); });