-
-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathclientIcons.test.ts
More file actions
103 lines (81 loc) · 3.46 KB
/
Copy pathclientIcons.test.ts
File metadata and controls
103 lines (81 loc) · 3.46 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import { describe, it, expect } from 'vitest';
import { resolveKnownClientKey } from '../../../apps/desktop/src/lib/clientIcons';
describe('resolveKnownClientKey', () => {
describe('exact matches', () => {
it('should resolve "cursor" to cursor', () => {
expect(resolveKnownClientKey('cursor')).toBe('cursor');
});
it('should resolve "Cursor" (case-insensitive) to cursor', () => {
expect(resolveKnownClientKey('Cursor')).toBe('cursor');
});
it('should resolve "claude" to claude', () => {
expect(resolveKnownClientKey('claude')).toBe('claude');
});
it('should resolve "Claude Desktop" to claude', () => {
expect(resolveKnownClientKey('Claude Desktop')).toBe('claude');
});
it('should resolve "vs code" to vscode', () => {
expect(resolveKnownClientKey('vs code')).toBe('vscode');
});
it('should resolve "vscode" to vscode', () => {
expect(resolveKnownClientKey('vscode')).toBe('vscode');
});
it('should resolve "Visual Studio Code" to vscode', () => {
expect(resolveKnownClientKey('Visual Studio Code')).toBe('vscode');
});
it('should resolve "windsurf" to windsurf', () => {
expect(resolveKnownClientKey('windsurf')).toBe('windsurf');
});
it('should resolve "codeium" to windsurf', () => {
expect(resolveKnownClientKey('codeium')).toBe('windsurf');
});
});
describe('prefix matches with parenthesised suffix', () => {
it('should resolve "Claude Code (mcpmux)" to claude', () => {
expect(resolveKnownClientKey('Claude Code (mcpmux)')).toBe('claude');
});
it('should resolve "Claude Desktop (some-server)" to claude', () => {
expect(resolveKnownClientKey('Claude Desktop (some-server)')).toBe('claude');
});
it('should resolve "Cursor (my-project)" to cursor', () => {
expect(resolveKnownClientKey('Cursor (my-project)')).toBe('cursor');
});
it('should resolve "VS Code (workspace)" to vscode', () => {
expect(resolveKnownClientKey('VS Code (workspace)')).toBe('vscode');
});
it('should resolve "Windsurf (test)" to windsurf', () => {
expect(resolveKnownClientKey('Windsurf (test)')).toBe('windsurf');
});
});
describe('prefix matches with space-separated suffix', () => {
it('should resolve "Claude Code v2" to claude', () => {
expect(resolveKnownClientKey('Claude Code v2')).toBe('claude');
});
it('should resolve "Cursor beta" to cursor', () => {
expect(resolveKnownClientKey('Cursor beta')).toBe('cursor');
});
});
describe('non-matching names', () => {
it('should return null for unknown client names', () => {
expect(resolveKnownClientKey('unknown-client')).toBeNull();
});
it('should return null for empty string', () => {
expect(resolveKnownClientKey('')).toBeNull();
});
it('should not match partial names without word boundary', () => {
// "claudeXYZ" should NOT match "claude" — no word boundary
expect(resolveKnownClientKey('claudeXYZ')).toBeNull();
});
it('should not match "cursorify" (no word boundary)', () => {
expect(resolveKnownClientKey('cursorify')).toBeNull();
});
});
describe('whitespace handling', () => {
it('should trim leading/trailing whitespace', () => {
expect(resolveKnownClientKey(' Cursor ')).toBe('cursor');
});
it('should handle whitespace with suffix', () => {
expect(resolveKnownClientKey(' Claude Code (mcpmux) ')).toBe('claude');
});
});
});