Path: blob/main/src/vs/workbench/contrib/output/test/browser/outputLinkProvider.test.ts
4780 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { URI } from '../../../../../base/common/uri.js';7import { isMacintosh, isLinux, isWindows } from '../../../../../base/common/platform.js';8import { OutputLinkComputer } from '../../common/outputLinkComputer.js';9import { TestContextService } from '../../../../test/common/workbenchTestServices.js';10import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/test/common/utils.js';1112suite('OutputLinkProvider', () => {1314function toOSPath(p: string): string {15if (isMacintosh || isLinux) {16return p.replace(/\\/g, '/');17}1819return p;20}2122test('OutputLinkProvider - Link detection', function () {23const rootFolder = isWindows ? URI.file('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala') :24URI.file('C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala');2526const patterns = OutputLinkComputer.createPatterns(rootFolder);2728const contextService = new TestContextService();2930let line = toOSPath('Foo bar');31let result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);32assert.strictEqual(result.length, 0);3334// Example: at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts35line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts in');36result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);37assert.strictEqual(result.length, 1);38assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString());39assert.strictEqual(result[0].range.startColumn, 5);40assert.strictEqual(result[0].range.endColumn, 84);4142// Example: at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts:33643line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts:336 in');44result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);45assert.strictEqual(result.length, 1);46assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#336');47assert.strictEqual(result[0].range.startColumn, 5);48assert.strictEqual(result[0].range.endColumn, 88);4950// Example: at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts:336:951line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts:336:9 in');52result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);53assert.strictEqual(result.length, 1);54assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#336,9');55assert.strictEqual(result[0].range.startColumn, 5);56assert.strictEqual(result[0].range.endColumn, 90);5758line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts:336:9 in');59result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);60assert.strictEqual(result.length, 1);61assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#336,9');62assert.strictEqual(result[0].range.startColumn, 5);63assert.strictEqual(result[0].range.endColumn, 90);6465// Example: at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts>dir66line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts>dir in');67result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);68assert.strictEqual(result.length, 1);69assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString());70assert.strictEqual(result[0].range.startColumn, 5);71assert.strictEqual(result[0].range.endColumn, 84);7273// Example: at [C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts:336:9]74line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts:336:9] in');75result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);76assert.strictEqual(result.length, 1);77assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#336,9');78assert.strictEqual(result[0].range.startColumn, 5);79assert.strictEqual(result[0].range.endColumn, 90);8081// Example: at [C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts]82line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts] in');83result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);84assert.strictEqual(result.length, 1);85assert.strictEqual(result[0].url, contextService.toResource('/Game.ts]').toString());8687// Example: C:\Users\someone\AppData\Local\Temp\_monacodata_9888\workspaces\express\server.js on line 888line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts on line 8');89result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);90assert.strictEqual(result.length, 1);91assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#8');92assert.strictEqual(result[0].range.startColumn, 1);93assert.strictEqual(result[0].range.endColumn, 90);9495// Example: C:\Users\someone\AppData\Local\Temp\_monacodata_9888\workspaces\express\server.js on line 8, column 1396line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts on line 8, column 13');97result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);98assert.strictEqual(result.length, 1);99assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#8,13');100assert.strictEqual(result[0].range.startColumn, 1);101assert.strictEqual(result[0].range.endColumn, 101);102103line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts on LINE 8, COLUMN 13');104result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);105assert.strictEqual(result.length, 1);106assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#8,13');107assert.strictEqual(result[0].range.startColumn, 1);108assert.strictEqual(result[0].range.endColumn, 101);109110// Example: C:\Users\someone\AppData\Local\Temp\_monacodata_9888\workspaces\express\server.js:line 8111line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts:line 8');112result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);113assert.strictEqual(result.length, 1);114assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#8');115assert.strictEqual(result[0].range.startColumn, 1);116assert.strictEqual(result[0].range.endColumn, 87);117118// Example: at File.put (C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Game.ts)119line = toOSPath(' at File.put (C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Game.ts)');120result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);121assert.strictEqual(result.length, 1);122assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString());123assert.strictEqual(result[0].range.startColumn, 15);124assert.strictEqual(result[0].range.endColumn, 94);125126// Example: at File.put (C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Game.ts:278)127line = toOSPath(' at File.put (C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Game.ts:278)');128result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);129assert.strictEqual(result.length, 1);130assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#278');131assert.strictEqual(result[0].range.startColumn, 15);132assert.strictEqual(result[0].range.endColumn, 98);133134// Example: at File.put (C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Game.ts:278:34)135line = toOSPath(' at File.put (C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Game.ts:278:34)');136result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);137assert.strictEqual(result.length, 1);138assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#278,34');139assert.strictEqual(result[0].range.startColumn, 15);140assert.strictEqual(result[0].range.endColumn, 101);141142line = toOSPath(' at File.put (C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Game.ts:278:34)');143result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);144assert.strictEqual(result.length, 1);145assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString() + '#278,34');146assert.strictEqual(result[0].range.startColumn, 15);147assert.strictEqual(result[0].range.endColumn, 101);148149// Example: C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Features.ts(45): error150line = toOSPath('C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/lib/something/Features.ts(45): error');151result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);152assert.strictEqual(result.length, 1);153assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45');154assert.strictEqual(result[0].range.startColumn, 1);155assert.strictEqual(result[0].range.endColumn, 102);156157// Example: C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Features.ts (45,18): error158line = toOSPath('C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/lib/something/Features.ts (45): error');159result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);160assert.strictEqual(result.length, 1);161assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45');162assert.strictEqual(result[0].range.startColumn, 1);163assert.strictEqual(result[0].range.endColumn, 103);164165// Example: C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Features.ts(45,18): error166line = toOSPath('C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/lib/something/Features.ts(45,18): error');167result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);168assert.strictEqual(result.length, 1);169assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45,18');170assert.strictEqual(result[0].range.startColumn, 1);171assert.strictEqual(result[0].range.endColumn, 105);172173line = toOSPath('C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/lib/something/Features.ts(45,18): error');174result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);175assert.strictEqual(result.length, 1);176assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45,18');177assert.strictEqual(result[0].range.startColumn, 1);178assert.strictEqual(result[0].range.endColumn, 105);179180// Example: C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Features.ts (45,18): error181line = toOSPath('C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/lib/something/Features.ts (45,18): error');182result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);183assert.strictEqual(result.length, 1);184assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45,18');185assert.strictEqual(result[0].range.startColumn, 1);186assert.strictEqual(result[0].range.endColumn, 106);187188line = toOSPath('C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/lib/something/Features.ts (45,18): error');189result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);190assert.strictEqual(result.length, 1);191assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45,18');192assert.strictEqual(result[0].range.startColumn, 1);193assert.strictEqual(result[0].range.endColumn, 106);194195// Example: C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Features.ts(45): error196line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\lib\\something\\Features.ts(45): error');197result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);198assert.strictEqual(result.length, 1);199assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45');200assert.strictEqual(result[0].range.startColumn, 1);201assert.strictEqual(result[0].range.endColumn, 102);202203// Example: C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Features.ts (45,18): error204line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\lib\\something\\Features.ts (45): error');205result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);206assert.strictEqual(result.length, 1);207assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45');208assert.strictEqual(result[0].range.startColumn, 1);209assert.strictEqual(result[0].range.endColumn, 103);210211// Example: C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Features.ts(45,18): error212line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\lib\\something\\Features.ts(45,18): error');213result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);214assert.strictEqual(result.length, 1);215assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45,18');216assert.strictEqual(result[0].range.startColumn, 1);217assert.strictEqual(result[0].range.endColumn, 105);218219line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\lib\\something\\Features.ts(45,18): error');220result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);221assert.strictEqual(result.length, 1);222assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45,18');223assert.strictEqual(result[0].range.startColumn, 1);224assert.strictEqual(result[0].range.endColumn, 105);225226// Example: C:/Users/someone/AppData/Local/Temp/_monacodata_9888/workspaces/mankala/Features.ts (45,18): error227line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\lib\\something\\Features.ts (45,18): error');228result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);229assert.strictEqual(result.length, 1);230assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45,18');231assert.strictEqual(result[0].range.startColumn, 1);232assert.strictEqual(result[0].range.endColumn, 106);233234line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\lib\\something\\Features.ts (45,18): error');235result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);236assert.strictEqual(result.length, 1);237assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features.ts').toString() + '#45,18');238assert.strictEqual(result[0].range.startColumn, 1);239assert.strictEqual(result[0].range.endColumn, 106);240241// Example: C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\lib\\something\\Features Special.ts (45,18): error.242line = toOSPath('C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\lib\\something\\Features Special.ts (45,18): error');243result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);244assert.strictEqual(result.length, 1);245assert.strictEqual(result[0].url, contextService.toResource('/lib/something/Features Special.ts').toString() + '#45,18');246assert.strictEqual(result[0].range.startColumn, 1);247assert.strictEqual(result[0].range.endColumn, 114);248249// Example: at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts.250line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts. in');251result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);252assert.strictEqual(result.length, 1);253assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString());254assert.strictEqual(result[0].range.startColumn, 5);255assert.strictEqual(result[0].range.endColumn, 84);256257// Example: at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game258line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game in');259result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);260assert.strictEqual(result.length, 1);261262// Example: at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game\\263line = toOSPath(' at C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game\\ in');264result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);265assert.strictEqual(result.length, 1);266267// Example: at "C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts"268line = toOSPath(' at "C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts" in');269result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);270assert.strictEqual(result.length, 1);271assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString());272assert.strictEqual(result[0].range.startColumn, 6);273assert.strictEqual(result[0].range.endColumn, 85);274275// Example: at 'C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts'276line = toOSPath(' at \'C:\\Users\\someone\\AppData\\Local\\Temp\\_monacodata_9888\\workspaces\\mankala\\Game.ts\' in');277result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);278assert.strictEqual(result.length, 1);279assert.strictEqual(result[0].url, contextService.toResource('/Game.ts').toString());280assert.strictEqual(result[0].range.startColumn, 6);281assert.strictEqual(result[0].range.endColumn, 85);282});283284test('OutputLinkProvider - #106847', function () {285const rootFolder = isWindows ? URI.file('C:\\Users\\username\\Desktop\\test-ts') :286URI.file('C:/Users/username/Desktop');287288const patterns = OutputLinkComputer.createPatterns(rootFolder);289290const contextService = new TestContextService();291292const line = toOSPath('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa C:\\Users\\username\\Desktop\\test-ts\\prj.conf C:\\Users\\username\\Desktop\\test-ts\\prj.conf C:\\Users\\username\\Desktop\\test-ts\\prj.conf');293const result = OutputLinkComputer.detectLinks(line, 1, patterns, contextService);294assert.strictEqual(result.length, 3);295296for (const res of result) {297assert.ok(res.range.startColumn > 0 && res.range.endColumn > 0);298}299});300301ensureNoDisposablesAreLeakedInTestSuite();302});303304305