Path: blob/main/extensions/markdown-language-features/src/test/copyFile.test.ts
3292 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 * as assert from 'assert';6import 'mocha';7import * as vscode from 'vscode';8import { resolveCopyDestination } from '../languageFeatures/copyFiles/copyFiles';91011suite('resolveCopyDestination', () => {1213test('Relative destinations should resolve next to document', async () => {14const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');1516{17const dest = resolveCopyDestination(documentUri, 'img.png', '${fileName}', () => vscode.Uri.parse('test://projects/project/'));18assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');19}20{21const dest = resolveCopyDestination(documentUri, 'img.png', './${fileName}', () => vscode.Uri.parse('test://projects/project/'));22assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');23}24{25const dest = resolveCopyDestination(documentUri, 'img.png', '../${fileName}', () => vscode.Uri.parse('test://projects/project/'));26assert.strictEqual(dest.toString(), 'test://projects/project/img.png');27}28});2930test('Destination starting with / should go to workspace root', async () => {31const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');32const dest = resolveCopyDestination(documentUri, 'img.png', '/${fileName}', () => vscode.Uri.parse('test://projects/project/'));3334assert.strictEqual(dest.toString(), 'test://projects/project/img.png');35});3637test('If there is no workspace root, / should resolve to document dir', async () => {38const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');39const dest = resolveCopyDestination(documentUri, 'img.png', '/${fileName}', () => undefined);4041assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');42});4344test('If path ends in /, we should automatically add the fileName', async () => {45{46const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');47const dest = resolveCopyDestination(documentUri, 'img.png', 'images/', () => vscode.Uri.parse('test://projects/project/'));48assert.strictEqual(dest.toString(), 'test://projects/project/sub/images/img.png');49}50{51const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');52const dest = resolveCopyDestination(documentUri, 'img.png', './', () => vscode.Uri.parse('test://projects/project/'));53assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');54}55{56const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');57const dest = resolveCopyDestination(documentUri, 'img.png', '/', () => vscode.Uri.parse('test://projects/project/'));5859assert.strictEqual(dest.toString(), 'test://projects/project/img.png');60}61});6263test('Basic transform', async () => {64const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');65const dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/.png/.gif/}', () => undefined);6667assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.gif');68});6970test('Transforms should support capture groups', async () => {71const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');72const dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/(.+)\\.(.+)/$2.$1/}', () => undefined);7374assert.strictEqual(dest.toString(), 'test://projects/project/sub/png.img');75});7677test('Should support escaping snippet variables ', async () => {78const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');7980// Escape leading '$'81assert.strictEqual(82resolveCopyDestination(documentUri, 'img.png', '\\${fileName}', () => undefined).toString(true),83'test://projects/project/sub/${fileName}');8485// Escape closing '}'86assert.strictEqual(87resolveCopyDestination(documentUri, 'img.png', '${fileName\\}', () => undefined).toString(true),88'test://projects/project/sub/${fileName\\}');89});9091test('Transforms should support escaped slashes', async () => {92const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');93const dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/(.+)/x\\/y/}.${fileExtName}', () => undefined);9495assert.strictEqual(dest.toString(), 'test://projects/project/sub/x/y.png');96});97});9899100