223 lines
12 KiB
JavaScript
223 lines
12 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const assert = require("assert");
|
|
const path_1 = require("path");
|
|
const paths_1 = require("../src/languageservice/utils/paths");
|
|
const vscode_uri_1 = require("vscode-uri");
|
|
class TestWorkspace {
|
|
constructor(workspaceFolders, workspaceRoot) {
|
|
this.folders = workspaceFolders;
|
|
this.root = vscode_uri_1.URI.parse(workspaceRoot);
|
|
}
|
|
resolve(relPath) {
|
|
return (0, paths_1.relativeToAbsolutePath)(this.folders, this.root, relPath);
|
|
}
|
|
}
|
|
const ws1 = new TestWorkspace([
|
|
{
|
|
uri: 'file:///home/aFolder/',
|
|
name: 'aFolder',
|
|
},
|
|
], 'file:///home/aFolder/');
|
|
const ws2 = new TestWorkspace([
|
|
{
|
|
uri: 'file:///usr/testuser/projects/workspace/folder-1/',
|
|
name: 'folder-1',
|
|
},
|
|
{
|
|
uri: 'file:///usr/testuser/projects/workspace/folder-2/',
|
|
name: 'folder-2',
|
|
},
|
|
{
|
|
uri: 'file:///usr/testuser/projects/workspace/folder-3/',
|
|
name: 'folder-3',
|
|
},
|
|
], 'file:///usr/testuser/projects/workspace/');
|
|
const ws3 = new TestWorkspace([
|
|
{
|
|
uri: 'file:///c%3A/Users/testuser/dev/carrots',
|
|
name: 'carrots',
|
|
},
|
|
{
|
|
uri: 'file:///c%3A/Users/testuser/dev/potatoes',
|
|
name: 'potatoes',
|
|
},
|
|
], 'file:///c%3A/Users/testuser/dev/potatoes');
|
|
const ws4 = new TestWorkspace([
|
|
{
|
|
uri: 'file:///c%3A/Users/testuser/dev/test',
|
|
name: 'test',
|
|
},
|
|
{
|
|
uri: 'file:///c%3A/Users/testuser/dev/test2',
|
|
name: 'test2',
|
|
},
|
|
], 'file:///c%3A/Users/testuser/dev/test2');
|
|
const checkBadPath = (path) => {
|
|
it('Rejects "' + path + '"', () => {
|
|
assert(!(0, paths_1.isRelativePath)(path));
|
|
});
|
|
};
|
|
const checkGoodPath = (path, expect1, expect2, expect3) => {
|
|
describe('Relative path = "' + path + '"', () => {
|
|
it('Recognises relative path', () => {
|
|
assert((0, paths_1.isRelativePath)(path));
|
|
});
|
|
it('Resolves relative path in single-root workspace', () => {
|
|
assert.equal(ws1.resolve(path), expect1);
|
|
});
|
|
it('Resolves relative path in multi-root workspace', () => {
|
|
assert.equal(ws2.resolve(path), expect2);
|
|
});
|
|
it('Resolves relative path in multi-root nested workspace', () => {
|
|
assert.equal(ws3.resolve(path), expect3);
|
|
});
|
|
});
|
|
};
|
|
describe('File path tests', () => {
|
|
describe('Recognises not relative paths', () => {
|
|
checkBadPath((0, path_1.join)('/', 'file.json'));
|
|
checkBadPath((0, path_1.join)('/', 'absolutepath', 'file.json.'));
|
|
checkBadPath((0, path_1.join)('//', 'notrelativepath', 'file.json'));
|
|
checkBadPath((0, path_1.join)('C:', 'notrelativepath', 'file.json'));
|
|
checkBadPath((0, path_1.join)('directory.json', '/'));
|
|
checkBadPath((0, path_1.join)('.', 'dir', 'subdir', '/'));
|
|
});
|
|
describe('Recognises and correctly resolves relative paths', () => {
|
|
checkGoodPath('file.json', 'file:///home/aFolder/file.json', 'file:///usr/testuser/projects/workspace/file.json', 'file:///c%3A/Users/testuser/dev/potatoes/file.json');
|
|
checkGoodPath('file.long.extension.json', 'file:///home/aFolder/file.long.extension.json', 'file:///usr/testuser/projects/workspace/file.long.extension.json', 'file:///c%3A/Users/testuser/dev/potatoes/file.long.extension.json');
|
|
checkGoodPath((0, path_1.join)('.', 'file.json'), 'file:///home/aFolder/file.json', 'file:///usr/testuser/projects/workspace/file.json', 'file:///c%3A/Users/testuser/dev/potatoes/file.json');
|
|
checkGoodPath((0, path_1.join)('.', 'folder', 'file.json'), 'file:///home/aFolder/folder/file.json', 'file:///usr/testuser/projects/workspace/folder/file.json', 'file:///c%3A/Users/testuser/dev/potatoes/folder/file.json');
|
|
checkGoodPath((0, path_1.join)('.', 'long', 'path', 'to', 'file.json'), 'file:///home/aFolder/long/path/to/file.json', 'file:///usr/testuser/projects/workspace/long/path/to/file.json', 'file:///c%3A/Users/testuser/dev/potatoes/long/path/to/file.json');
|
|
checkGoodPath((0, path_1.join)('..', 'file.json'), 'file:///home/file.json', 'file:///usr/testuser/projects/file.json', 'file:///c%3A/Users/testuser/dev/file.json');
|
|
checkGoodPath((0, path_1.join)('.', 'relativepath', '..', 'file.json'), 'file:///home/aFolder/file.json', 'file:///usr/testuser/projects/workspace/file.json', 'file:///c%3A/Users/testuser/dev/potatoes/file.json');
|
|
checkGoodPath((0, path_1.join)('..', '..', 'relative', 'path', 'file.json'), 'file:///relative/path/file.json', 'file:///usr/testuser/relative/path/file.json', 'file:///c%3A/Users/testuser/relative/path/file.json');
|
|
checkGoodPath((0, path_1.join)('..', '..', 'relative', '@path', 'file.json'), 'file:///relative/%40path/file.json', 'file:///usr/testuser/relative/%40path/file.json', 'file:///c%3A/Users/testuser/relative/%40path/file.json');
|
|
describe('Relative path = a workspace folder', () => {
|
|
const path1 = (0, path_1.join)('aFolder', 'file.json');
|
|
const path2 = (0, path_1.join)('folder-2', 'file.json');
|
|
const path3 = (0, path_1.join)('carrots', 'file.json');
|
|
const path4 = (0, path_1.join)('test', 'test.json');
|
|
it('Recognises relative path "' + path1 + '"', () => {
|
|
assert((0, paths_1.isRelativePath)(path1));
|
|
});
|
|
it('Resolves "' + path1 + '" in single-root workspace', () => {
|
|
assert.equal(ws1.resolve(path1), 'file:///home/aFolder/file.json');
|
|
});
|
|
it('Resolves "' + path2 + '" in multi-root workspace', () => {
|
|
assert.equal(ws2.resolve(path2), 'file:///usr/testuser/projects/workspace/folder-2/file.json');
|
|
});
|
|
it('Resolves "' + path3 + '" in multi-root nested workspace', () => {
|
|
assert.equal(ws3.resolve(path3), 'file:///c%3A/Users/testuser/dev/carrots/file.json');
|
|
});
|
|
it('Resolves "' + path4 + '" in multi-root nested workspace', () => {
|
|
assert.equal(ws4.resolve(path4), 'file:///c%3A/Users/testuser/dev/test/test.json');
|
|
});
|
|
});
|
|
describe('Path with mixed delimiters (Windows only)', () => {
|
|
const path = 'some/strange\\but/functional\\path\\file.json';
|
|
it('Recognises relative path "' + path + '"', function () {
|
|
if (process.platform !== 'win32') {
|
|
this.skip();
|
|
}
|
|
else {
|
|
assert((0, paths_1.isRelativePath)(path));
|
|
}
|
|
});
|
|
it('Resolves "' + path + '" in single-root workspace', function () {
|
|
if (process.platform !== 'win32') {
|
|
this.skip();
|
|
}
|
|
else {
|
|
assert.equal(ws1.resolve(path), 'file:///home/aFolder/some/strange/but/functional/path/file.json');
|
|
}
|
|
});
|
|
it('Resolves "' + path + '" in multi-root workspace', function () {
|
|
if (process.platform !== 'win32') {
|
|
this.skip();
|
|
}
|
|
else {
|
|
assert.equal(ws2.resolve(path), 'file:///usr/testuser/projects/workspace/some/strange/but/functional/path/file.json');
|
|
}
|
|
});
|
|
it('Resolves "' + path + '" in multi-root nested workspace', function () {
|
|
if (process.platform !== 'win32') {
|
|
this.skip();
|
|
}
|
|
else {
|
|
assert.equal(ws3.resolve(path), 'file:///c%3A/Users/testuser/dev/potatoes/some/strange/but/functional/path/file.json');
|
|
}
|
|
});
|
|
});
|
|
describe('Tests for workspaceFoldersChanged', () => {
|
|
it('workspaceFolders are added correctly', () => {
|
|
const newWorkspaceFolders = (0, paths_1.workspaceFoldersChanged)(ws2.folders, {
|
|
added: [
|
|
{
|
|
name: 'folder-4',
|
|
uri: 'file:///usr/testuser/projects/workspace/folder-4/',
|
|
},
|
|
],
|
|
removed: [],
|
|
});
|
|
assert.equal(newWorkspaceFolders.length, 4);
|
|
assert.equal(newWorkspaceFolders[0].name, 'folder-1');
|
|
assert.equal(newWorkspaceFolders[0].uri, 'file:///usr/testuser/projects/workspace/folder-1/');
|
|
assert.equal(newWorkspaceFolders[1].name, 'folder-2');
|
|
assert.equal(newWorkspaceFolders[1].uri, 'file:///usr/testuser/projects/workspace/folder-2/');
|
|
assert.equal(newWorkspaceFolders[2].name, 'folder-3');
|
|
assert.equal(newWorkspaceFolders[2].uri, 'file:///usr/testuser/projects/workspace/folder-3/');
|
|
assert.equal(newWorkspaceFolders[3].name, 'folder-4');
|
|
assert.equal(newWorkspaceFolders[3].uri, 'file:///usr/testuser/projects/workspace/folder-4/');
|
|
});
|
|
it('workspaceFolders are not added if duplicate uri', () => {
|
|
const newWorkspaceFolders = (0, paths_1.workspaceFoldersChanged)(ws2.folders, {
|
|
added: [
|
|
{
|
|
name: 'folder-3',
|
|
uri: 'file:///usr/testuser/projects/workspace/folder-3/',
|
|
},
|
|
],
|
|
removed: [],
|
|
});
|
|
assert.equal(newWorkspaceFolders.length, 3);
|
|
assert.equal(newWorkspaceFolders[0].name, 'folder-1');
|
|
assert.equal(newWorkspaceFolders[0].uri, 'file:///usr/testuser/projects/workspace/folder-1/');
|
|
assert.equal(newWorkspaceFolders[1].name, 'folder-2');
|
|
assert.equal(newWorkspaceFolders[1].uri, 'file:///usr/testuser/projects/workspace/folder-2/');
|
|
assert.equal(newWorkspaceFolders[2].name, 'folder-3');
|
|
assert.equal(newWorkspaceFolders[2].uri, 'file:///usr/testuser/projects/workspace/folder-3/');
|
|
});
|
|
it('workspaceFolders are removed correctly', () => {
|
|
const newWorkspaceFolders = (0, paths_1.workspaceFoldersChanged)(ws2.folders, {
|
|
added: [],
|
|
removed: [
|
|
{
|
|
name: 'folder-3',
|
|
uri: 'file:///usr/testuser/projects/workspace/folder-3/',
|
|
},
|
|
],
|
|
});
|
|
assert.equal(newWorkspaceFolders.length, 2);
|
|
assert.equal(newWorkspaceFolders[0].name, 'folder-1');
|
|
assert.equal(newWorkspaceFolders[0].uri, 'file:///usr/testuser/projects/workspace/folder-1/');
|
|
assert.equal(newWorkspaceFolders[1].name, 'folder-2');
|
|
assert.equal(newWorkspaceFolders[1].uri, 'file:///usr/testuser/projects/workspace/folder-2/');
|
|
});
|
|
it('workspaceFolders empty event does nothing', () => {
|
|
const newWorkspaceFolders = (0, paths_1.workspaceFoldersChanged)(ws2.folders, {
|
|
added: [],
|
|
removed: [],
|
|
});
|
|
assert.equal(newWorkspaceFolders.length, 3);
|
|
assert.equal(newWorkspaceFolders[0].name, 'folder-1');
|
|
assert.equal(newWorkspaceFolders[0].uri, 'file:///usr/testuser/projects/workspace/folder-1/');
|
|
assert.equal(newWorkspaceFolders[1].name, 'folder-2');
|
|
assert.equal(newWorkspaceFolders[1].uri, 'file:///usr/testuser/projects/workspace/folder-2/');
|
|
assert.equal(newWorkspaceFolders[2].name, 'folder-3');
|
|
assert.equal(newWorkspaceFolders[2].uri, 'file:///usr/testuser/projects/workspace/folder-3/');
|
|
});
|
|
});
|
|
});
|
|
});
|
|
//# sourceMappingURL=paths.test.js.map
|