Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/markdown-language-features/src/test/copyFile.test.ts
3292 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import * as assert from 'assert';
7
import 'mocha';
8
import * as vscode from 'vscode';
9
import { resolveCopyDestination } from '../languageFeatures/copyFiles/copyFiles';
10
11
12
suite('resolveCopyDestination', () => {
13
14
test('Relative destinations should resolve next to document', async () => {
15
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
16
17
{
18
const dest = resolveCopyDestination(documentUri, 'img.png', '${fileName}', () => vscode.Uri.parse('test://projects/project/'));
19
assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');
20
}
21
{
22
const dest = resolveCopyDestination(documentUri, 'img.png', './${fileName}', () => vscode.Uri.parse('test://projects/project/'));
23
assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');
24
}
25
{
26
const dest = resolveCopyDestination(documentUri, 'img.png', '../${fileName}', () => vscode.Uri.parse('test://projects/project/'));
27
assert.strictEqual(dest.toString(), 'test://projects/project/img.png');
28
}
29
});
30
31
test('Destination starting with / should go to workspace root', async () => {
32
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
33
const dest = resolveCopyDestination(documentUri, 'img.png', '/${fileName}', () => vscode.Uri.parse('test://projects/project/'));
34
35
assert.strictEqual(dest.toString(), 'test://projects/project/img.png');
36
});
37
38
test('If there is no workspace root, / should resolve to document dir', async () => {
39
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
40
const dest = resolveCopyDestination(documentUri, 'img.png', '/${fileName}', () => undefined);
41
42
assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');
43
});
44
45
test('If path ends in /, we should automatically add the fileName', async () => {
46
{
47
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
48
const dest = resolveCopyDestination(documentUri, 'img.png', 'images/', () => vscode.Uri.parse('test://projects/project/'));
49
assert.strictEqual(dest.toString(), 'test://projects/project/sub/images/img.png');
50
}
51
{
52
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
53
const dest = resolveCopyDestination(documentUri, 'img.png', './', () => vscode.Uri.parse('test://projects/project/'));
54
assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.png');
55
}
56
{
57
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
58
const dest = resolveCopyDestination(documentUri, 'img.png', '/', () => vscode.Uri.parse('test://projects/project/'));
59
60
assert.strictEqual(dest.toString(), 'test://projects/project/img.png');
61
}
62
});
63
64
test('Basic transform', async () => {
65
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
66
const dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/.png/.gif/}', () => undefined);
67
68
assert.strictEqual(dest.toString(), 'test://projects/project/sub/img.gif');
69
});
70
71
test('Transforms should support capture groups', async () => {
72
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
73
const dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/(.+)\\.(.+)/$2.$1/}', () => undefined);
74
75
assert.strictEqual(dest.toString(), 'test://projects/project/sub/png.img');
76
});
77
78
test('Should support escaping snippet variables ', async () => {
79
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
80
81
// Escape leading '$'
82
assert.strictEqual(
83
resolveCopyDestination(documentUri, 'img.png', '\\${fileName}', () => undefined).toString(true),
84
'test://projects/project/sub/${fileName}');
85
86
// Escape closing '}'
87
assert.strictEqual(
88
resolveCopyDestination(documentUri, 'img.png', '${fileName\\}', () => undefined).toString(true),
89
'test://projects/project/sub/${fileName\\}');
90
});
91
92
test('Transforms should support escaped slashes', async () => {
93
const documentUri = vscode.Uri.parse('test://projects/project/sub/readme.md');
94
const dest = resolveCopyDestination(documentUri, 'img.png', '${fileName/(.+)/x\\/y/}.${fileExtName}', () => undefined);
95
96
assert.strictEqual(dest.toString(), 'test://projects/project/sub/x/y.png');
97
});
98
});
99
100