forked from NoeFabris/opencode-antigravity-auth
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathansi.test.ts
More file actions
80 lines (67 loc) · 2.44 KB
/
Copy pathansi.test.ts
File metadata and controls
80 lines (67 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import { describe, it, expect } from 'vitest';
import { parseKey, isTTY, ANSI } from './ansi';
describe('ansi', () => {
describe('parseKey', () => {
it('parses arrow up sequences', () => {
expect(parseKey(Buffer.from('\x1b[A'))).toBe('up');
expect(parseKey(Buffer.from('\x1bOA'))).toBe('up');
});
it('parses arrow down sequences', () => {
expect(parseKey(Buffer.from('\x1b[B'))).toBe('down');
expect(parseKey(Buffer.from('\x1bOB'))).toBe('down');
});
it('parses enter key (CR and LF)', () => {
expect(parseKey(Buffer.from('\r'))).toBe('enter');
expect(parseKey(Buffer.from('\n'))).toBe('enter');
});
it('parses Ctrl+C as escape', () => {
expect(parseKey(Buffer.from('\x03'))).toBe('escape');
});
it('parses bare escape as escape-start', () => {
expect(parseKey(Buffer.from('\x1b'))).toBe('escape-start');
});
it('returns null for unknown keys', () => {
expect(parseKey(Buffer.from('a'))).toBe(null);
expect(parseKey(Buffer.from('1'))).toBe(null);
expect(parseKey(Buffer.from(' '))).toBe(null);
expect(parseKey(Buffer.from('\t'))).toBe(null);
});
it('returns null for partial escape sequences', () => {
expect(parseKey(Buffer.from('\x1b['))).toBe(null);
expect(parseKey(Buffer.from('\x1bO'))).toBe(null);
});
it('returns null for other arrow keys', () => {
expect(parseKey(Buffer.from('\x1b[C'))).toBe(null);
expect(parseKey(Buffer.from('\x1b[D'))).toBe(null);
});
});
describe('ANSI codes', () => {
it('has cursor control codes', () => {
expect(ANSI.hide).toBe('\x1b[?25l');
expect(ANSI.show).toBe('\x1b[?25h');
expect(ANSI.clearLine).toBe('\x1b[2K');
});
it('generates cursor movement codes', () => {
expect(ANSI.up(1)).toBe('\x1b[1A');
expect(ANSI.up(5)).toBe('\x1b[5A');
expect(ANSI.down(1)).toBe('\x1b[1B');
expect(ANSI.down(3)).toBe('\x1b[3B');
});
it('has color codes', () => {
expect(ANSI.cyan).toBe('\x1b[36m');
expect(ANSI.green).toBe('\x1b[32m');
expect(ANSI.red).toBe('\x1b[31m');
expect(ANSI.yellow).toBe('\x1b[33m');
expect(ANSI.reset).toBe('\x1b[0m');
});
it('has style codes', () => {
expect(ANSI.dim).toBe('\x1b[2m');
expect(ANSI.bold).toBe('\x1b[1m');
});
});
describe('isTTY', () => {
it('returns boolean', () => {
expect(typeof isTTY()).toBe('boolean');
});
});
});