Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/prompt/node/test/gitBranch.spec.ts
13405 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import assert from 'assert';
7
import { suite, test } from 'vitest';
8
import { normalizeBranchName } from '../gitBranch';
9
10
suite('normalizeBranchName', () => {
11
12
test('preserves simple alphanumeric names', () => {
13
assert.strictEqual(normalizeBranchName('feature-branch'), 'feature-branch');
14
});
15
16
test('converts to lowercase', () => {
17
assert.strictEqual(normalizeBranchName('Feature-Branch'), 'feature-branch');
18
assert.strictEqual(normalizeBranchName('ABC'), 'abc');
19
});
20
21
test('strips spaces', () => {
22
assert.strictEqual(normalizeBranchName('my branch name'), 'mybranchname');
23
});
24
25
test('strips special characters', () => {
26
assert.strictEqual(normalizeBranchName('feature~branch^name'), 'featurebranchname');
27
assert.strictEqual(normalizeBranchName('name?with*wildcards'), 'namewithwildcards');
28
assert.strictEqual(normalizeBranchName('has:colon[bracket'), 'hascolonbracket');
29
});
30
31
test('strips dots, slashes, and underscores', () => {
32
assert.strictEqual(normalizeBranchName('feature/my-branch'), 'featuremy-branch');
33
assert.strictEqual(normalizeBranchName('feature.name'), 'featurename');
34
assert.strictEqual(normalizeBranchName('with_underscore'), 'withunderscore');
35
});
36
37
test('strips emojis and unicode characters', () => {
38
assert.strictEqual(normalizeBranchName('feature-🚀-launch'), 'feature--launch');
39
assert.strictEqual(normalizeBranchName('日本語branch'), 'branch');
40
assert.strictEqual(normalizeBranchName('café-feature'), 'caf-feature');
41
});
42
43
test('strips leading dashes', () => {
44
assert.strictEqual(normalizeBranchName('-feature'), 'feature');
45
assert.strictEqual(normalizeBranchName('---feature'), 'feature');
46
});
47
48
test('strips leading dots (already removed by character filter)', () => {
49
assert.strictEqual(normalizeBranchName('.hidden'), 'hidden');
50
assert.strictEqual(normalizeBranchName('..double'), 'double');
51
});
52
53
test('handles empty string input', () => {
54
assert.strictEqual(normalizeBranchName(''), '');
55
});
56
57
test('handles input that becomes empty after stripping', () => {
58
assert.strictEqual(normalizeBranchName('🚀🎉'), '');
59
assert.strictEqual(normalizeBranchName('...'), '');
60
assert.strictEqual(normalizeBranchName('---'), '');
61
});
62
63
test('handles backslashes', () => {
64
assert.strictEqual(normalizeBranchName('feature\\branch'), 'featurebranch');
65
});
66
67
test('preserves dashes in the middle', () => {
68
assert.strictEqual(normalizeBranchName('fix-bug-123'), 'fix-bug-123');
69
});
70
71
test('handles mixed valid and invalid characters', () => {
72
assert.strictEqual(normalizeBranchName('Fix: Add new feature! (#42)'), 'fixaddnewfeature42');
73
});
74
75
test('handles quoted branch names', () => {
76
// normalizeBranchName strips quotes via the character filter; generateBranchName also strips paired quotes
77
assert.strictEqual(normalizeBranchName('"my-branch"'), 'my-branch');
78
});
79
80
test('handles at-sign and curly braces', () => {
81
assert.strictEqual(normalizeBranchName('@{branch}'), 'branch');
82
assert.strictEqual(normalizeBranchName('@'), '');
83
});
84
85
test('handles trailing dash (allowed)', () => {
86
assert.strictEqual(normalizeBranchName('feature-'), 'feature-');
87
});
88
});
89
90