This commit is contained in:
173
tests/unit/parsers.test.ts
Normal file
173
tests/unit/parsers.test.ts
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
import { TmuxParser, tmuxParser } from '../../src/parsers/tmuxParser';
|
||||||
|
import { ScreenParser, screenParser } from '../../src/parsers/screenParser';
|
||||||
|
import { iTerm2Parser, iterm2Parser } from '../../src/parsers/iterm2Parser';
|
||||||
|
import { Layout, TerminalType } from '../../src/models/types';
|
||||||
|
|
||||||
|
describe('TmuxParser', () => {
|
||||||
|
describe('isAvailable', () => {
|
||||||
|
it('should check if tmux is available', async () => {
|
||||||
|
const available = await tmuxParser.isAvailable();
|
||||||
|
expect(typeof available).toBe('boolean');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('listSessions', () => {
|
||||||
|
it('should return list of sessions', async () => {
|
||||||
|
const sessions = await tmuxParser.listSessions();
|
||||||
|
expect(Array.isArray(sessions)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('generateRestoreCommands', () => {
|
||||||
|
it('should generate commands for layout restoration', async () => {
|
||||||
|
const layout: Layout = {
|
||||||
|
version: '1.0.0',
|
||||||
|
terminalType: 'tmux' as TerminalType,
|
||||||
|
createdAt: '2024-01-01T00:00:00.000Z',
|
||||||
|
updatedAt: '2024-01-01T00:00:00.000Z',
|
||||||
|
session: {
|
||||||
|
id: 's-test',
|
||||||
|
name: 'test-session',
|
||||||
|
windows: [
|
||||||
|
{
|
||||||
|
id: 'w0',
|
||||||
|
index: 0,
|
||||||
|
name: 'main',
|
||||||
|
panes: [
|
||||||
|
{
|
||||||
|
id: 'p0',
|
||||||
|
index: 0,
|
||||||
|
layout: { x: 0, y: 0, width: 80, height: 24 },
|
||||||
|
cwd: '/home/user',
|
||||||
|
command: 'vim',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
activeWindowIndex: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const commands = await tmuxParser.generateRestoreCommands(layout, 'test-session');
|
||||||
|
expect(Array.isArray(commands)).toBe(true);
|
||||||
|
expect(commands.length).toBeGreaterThan(0);
|
||||||
|
expect(commands[0]).toContain('tmux new-session');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ScreenParser', () => {
|
||||||
|
describe('isAvailable', () => {
|
||||||
|
it('should check if screen is available', async () => {
|
||||||
|
const available = await screenParser.isAvailable();
|
||||||
|
expect(typeof available).toBe('boolean');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('listSessions', () => {
|
||||||
|
it('should return list of sessions', async () => {
|
||||||
|
const sessions = await screenParser.listSessions();
|
||||||
|
expect(Array.isArray(sessions)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('generateRestoreCommands', () => {
|
||||||
|
it('should generate commands for screen layout restoration', async () => {
|
||||||
|
const layout: Layout = {
|
||||||
|
version: '1.0.0',
|
||||||
|
terminalType: 'screen' as TerminalType,
|
||||||
|
createdAt: '2024-01-01T00:00:00.000Z',
|
||||||
|
updatedAt: '2024-01-01T00:00:00.000Z',
|
||||||
|
session: {
|
||||||
|
id: 's-test',
|
||||||
|
name: 'test-screen',
|
||||||
|
windows: [
|
||||||
|
{
|
||||||
|
id: 'w0',
|
||||||
|
index: 0,
|
||||||
|
name: 'main',
|
||||||
|
panes: [
|
||||||
|
{
|
||||||
|
id: 'p0',
|
||||||
|
index: 0,
|
||||||
|
layout: { x: 0, y: 0, width: 80, height: 24 },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
activeWindowIndex: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const commands = await screenParser.generateRestoreCommands(layout, 'test-screen');
|
||||||
|
expect(Array.isArray(commands)).toBe(true);
|
||||||
|
expect(commands[0]).toContain('screen -dmS');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('iTerm2Parser', () => {
|
||||||
|
describe('isAvailable', () => {
|
||||||
|
it('should check if iTerm2 is available', async () => {
|
||||||
|
const available = await iterm2Parser.isAvailable();
|
||||||
|
expect(typeof available).toBe('boolean');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('listProfiles', () => {
|
||||||
|
it('should return list of profiles', async () => {
|
||||||
|
const profiles = await iterm2Parser.listProfiles();
|
||||||
|
expect(Array.isArray(profiles)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('generateRestoreScript', () => {
|
||||||
|
it('should generate AppleScript for iTerm2', async () => {
|
||||||
|
const layout: Layout = {
|
||||||
|
version: '1.0.0',
|
||||||
|
terminalType: 'iterm2' as TerminalType,
|
||||||
|
createdAt: '2024-01-01T00:00:00.000Z',
|
||||||
|
updatedAt: '2024-01-01T00:00:00.000Z',
|
||||||
|
session: {
|
||||||
|
id: 's-iterm2',
|
||||||
|
name: 'iterm2',
|
||||||
|
windows: [
|
||||||
|
{
|
||||||
|
id: 'w0',
|
||||||
|
index: 0,
|
||||||
|
name: 'main',
|
||||||
|
panes: [
|
||||||
|
{
|
||||||
|
id: 'p0',
|
||||||
|
index: 0,
|
||||||
|
layout: { x: 0, y: 0, width: 80, height: 24 },
|
||||||
|
cwd: '/Users/user',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
activeWindowIndex: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const script = await iterm2Parser.generateRestoreScript(layout);
|
||||||
|
expect(typeof script).toBe('string');
|
||||||
|
expect(script).toContain('osascript');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('captureCurrentLayout', () => {
|
||||||
|
it('should capture current iTerm2 layout', async () => {
|
||||||
|
const result = await iterm2Parser.captureCurrentLayout();
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
expect(result.success).toBe(true);
|
||||||
|
if (result.data) {
|
||||||
|
expect(result.data.terminalType).toBe('iterm2');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
expect(result.success).toBe(false);
|
||||||
|
expect(result.error).toContain('macOS');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user