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'); }); });