Path: blob/main/extensions/copilot/src/extension/prompt/node/test/gitBranch.spec.ts
13405 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { suite, test } from 'vitest';7import { normalizeBranchName } from '../gitBranch';89suite('normalizeBranchName', () => {1011test('preserves simple alphanumeric names', () => {12assert.strictEqual(normalizeBranchName('feature-branch'), 'feature-branch');13});1415test('converts to lowercase', () => {16assert.strictEqual(normalizeBranchName('Feature-Branch'), 'feature-branch');17assert.strictEqual(normalizeBranchName('ABC'), 'abc');18});1920test('strips spaces', () => {21assert.strictEqual(normalizeBranchName('my branch name'), 'mybranchname');22});2324test('strips special characters', () => {25assert.strictEqual(normalizeBranchName('feature~branch^name'), 'featurebranchname');26assert.strictEqual(normalizeBranchName('name?with*wildcards'), 'namewithwildcards');27assert.strictEqual(normalizeBranchName('has:colon[bracket'), 'hascolonbracket');28});2930test('strips dots, slashes, and underscores', () => {31assert.strictEqual(normalizeBranchName('feature/my-branch'), 'featuremy-branch');32assert.strictEqual(normalizeBranchName('feature.name'), 'featurename');33assert.strictEqual(normalizeBranchName('with_underscore'), 'withunderscore');34});3536test('strips emojis and unicode characters', () => {37assert.strictEqual(normalizeBranchName('feature-🚀-launch'), 'feature--launch');38assert.strictEqual(normalizeBranchName('日本語branch'), 'branch');39assert.strictEqual(normalizeBranchName('café-feature'), 'caf-feature');40});4142test('strips leading dashes', () => {43assert.strictEqual(normalizeBranchName('-feature'), 'feature');44assert.strictEqual(normalizeBranchName('---feature'), 'feature');45});4647test('strips leading dots (already removed by character filter)', () => {48assert.strictEqual(normalizeBranchName('.hidden'), 'hidden');49assert.strictEqual(normalizeBranchName('..double'), 'double');50});5152test('handles empty string input', () => {53assert.strictEqual(normalizeBranchName(''), '');54});5556test('handles input that becomes empty after stripping', () => {57assert.strictEqual(normalizeBranchName('🚀🎉'), '');58assert.strictEqual(normalizeBranchName('...'), '');59assert.strictEqual(normalizeBranchName('---'), '');60});6162test('handles backslashes', () => {63assert.strictEqual(normalizeBranchName('feature\\branch'), 'featurebranch');64});6566test('preserves dashes in the middle', () => {67assert.strictEqual(normalizeBranchName('fix-bug-123'), 'fix-bug-123');68});6970test('handles mixed valid and invalid characters', () => {71assert.strictEqual(normalizeBranchName('Fix: Add new feature! (#42)'), 'fixaddnewfeature42');72});7374test('handles quoted branch names', () => {75// normalizeBranchName strips quotes via the character filter; generateBranchName also strips paired quotes76assert.strictEqual(normalizeBranchName('"my-branch"'), 'my-branch');77});7879test('handles at-sign and curly braces', () => {80assert.strictEqual(normalizeBranchName('@{branch}'), 'branch');81assert.strictEqual(normalizeBranchName('@'), '');82});8384test('handles trailing dash (allowed)', () => {85assert.strictEqual(normalizeBranchName('feature-'), 'feature-');86});87});888990