69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
import { describe, expect, test } from 'bun:test';
|
|||
|
|
import { resolveWorkspaceFolders } from './workspaceResolver.ts';
|
||
|
|
|
||
|
|
const ALPHA = { name: 'alpha', uri: { fsPath: '/work/alpha' } };
|
||
|
|
const BRAVO = { name: 'Bravo', uri: { fsPath: '/work/bravo' } };
|
||
|
|
const CHARLIE = { name: 'Charlie', uri: { fsPath: '/work/charlie' } };
|
||
|
|
const ALPHA_DUP = { name: 'alpha-dup', uri: { fsPath: '/work/alpha' } };
|
||
|
|
const ALPHA_WITH_TRAILING = { name: 'alpha', uri: { fsPath: '/work/alpha///' } };
|
||
|
|
const BRAVO_WITH_TRAILING = { name: 'bravo', uri: { fsPath: '/work/bravo//' } };
|
||
|
|
|
||
|
|
describe('resolveWorkspaceFolders', () => {
|
||
|
|
describe('when the input is empty', () => {
|
||
|
|
test('returns an empty list without throwing', () => {
|
||
|
|
expect(resolveWorkspaceFolders([])).toEqual([]);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('when a single folder is provided', () => {
|
||
|
|
test('preserves its name and path', () => {
|
||
|
|
expect(resolveWorkspaceFolders([ALPHA])).toEqual([
|
||
|
|
{ name: 'alpha', path: '/work/alpha' },
|
||
|
|
]);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('when multiple folders are provided', () => {
|
||
|
|
test('returns them sorted alphabetically by name, case-insensitive', () => {
|
||
|
|
const result = resolveWorkspaceFolders([CHARLIE, ALPHA, BRAVO]);
|
||
|
|
|
||
|
|
expect(result.map((entry) => entry.name)).toEqual([
|
||
|
|
'alpha',
|
||
|
|
'Bravo',
|
||
|
|
'Charlie',
|
||
|
|
]);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('when folders share the same path', () => {
|
||
|
|
test('keeps only the first occurrence and discards duplicates by path', () => {
|
||
|
|
const result = resolveWorkspaceFolders([ALPHA, ALPHA_DUP, BRAVO]);
|
||
|
|
|
||
|
|
expect(result).toEqual([
|
||
|
|
{ name: 'alpha', path: '/work/alpha' },
|
||
|
|
{ name: 'Bravo', path: '/work/bravo' },
|
||
|
|
]);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('when paths contain trailing separators', () => {
|
||
|
|
test('strips them from every returned path', () => {
|
||
|
|
const result = resolveWorkspaceFolders([
|
||
|
|
ALPHA_WITH_TRAILING,
|
||
|
|
BRAVO_WITH_TRAILING,
|
||
|
|
]);
|
||
|
|
|
||
|
|
expect(result).toEqual([
|
||
|
|
{ name: 'alpha', path: '/work/alpha' },
|
||
|
|
{ name: 'bravo', path: '/work/bravo' },
|
||
|
|
]);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('treats paths that differ only by trailing separators as the same folder', () => {
|
||
|
|
const result = resolveWorkspaceFolders([ALPHA_WITH_TRAILING, ALPHA_DUP]);
|
||
|
|
|
||
|
|
expect(result).toEqual([{ name: 'alpha', path: '/work/alpha' }]);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|