66 lines
2.5 KiB
TypeScript
66 lines
2.5 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
closeDocument,
|
|
noDocuments,
|
|
openedIds,
|
|
pinDocument,
|
|
previewDocument,
|
|
selectDocument,
|
|
} from './documents';
|
|
|
|
// The owner's complaint (2) in executable form: five single clicks must leave ONE tab in the row.
|
|
describe('the VS Code tab model', () => {
|
|
it('five single clicks give exactly one preview tab', () => {
|
|
let documents = noDocuments;
|
|
for (const id of ['ch_1', 'ch_2', 'ch_3', 'ch_4', 'ch_5']) {
|
|
documents = previewDocument(documents, id);
|
|
}
|
|
expect(openedIds(documents)).toEqual(['ch_5']);
|
|
expect(documents.active).toBe('ch_5');
|
|
});
|
|
|
|
it('pinning makes the preview permanent, the next click opens a new one beside it', () => {
|
|
let documents = previewDocument(noDocuments, 'ch_1');
|
|
documents = pinDocument(documents, 'ch_1');
|
|
expect(documents.preview).toBeNull();
|
|
|
|
documents = previewDocument(documents, 'ch_2');
|
|
expect(openedIds(documents)).toEqual(['ch_1', 'ch_2']);
|
|
expect(documents.preview).toBe('ch_2');
|
|
|
|
// And the next single click replaces ONLY the preview, leaving the pinned one alone.
|
|
documents = previewDocument(documents, 'ch_3');
|
|
expect(openedIds(documents)).toEqual(['ch_1', 'ch_3']);
|
|
});
|
|
|
|
it('a click on an already pinned tab selects it and does not start a preview', () => {
|
|
let documents = pinDocument(previewDocument(noDocuments, 'ch_1'), 'ch_1');
|
|
documents = previewDocument(documents, 'ch_2');
|
|
documents = previewDocument(documents, 'ch_1');
|
|
expect(documents.active).toBe('ch_1');
|
|
expect(documents.preview).toBe('ch_2');
|
|
});
|
|
|
|
it('closing the selected tab moves the selection to the neighbour on the right', () => {
|
|
let documents = noDocuments;
|
|
for (const id of ['a', 'b', 'c']) documents = pinDocument(documents, id);
|
|
documents = selectDocument(documents, 'b');
|
|
documents = closeDocument(documents, 'b');
|
|
expect(documents.active).toBe('c');
|
|
expect(openedIds(documents)).toEqual(['a', 'c']);
|
|
});
|
|
|
|
it('closing the last tab leaves the centre empty rather than selected into nowhere', () => {
|
|
const documents = closeDocument(previewDocument(noDocuments, 'ch_1'), 'ch_1');
|
|
expect(openedIds(documents)).toEqual([]);
|
|
expect(documents.active).toBe('');
|
|
});
|
|
|
|
it('closing a tab that is NOT selected does not move the selection', () => {
|
|
let documents = noDocuments;
|
|
for (const id of ['a', 'b']) documents = pinDocument(documents, id);
|
|
const after = closeDocument(documents, 'a');
|
|
expect(after.active).toBe('b');
|
|
});
|
|
});
|