Path: blob/main/extensions/copilot/src/extension/prompts/node/test/workingCopies.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 { StringEdit, StringReplacement } from '../../../../util/vs/editor/common/core/edits/stringEdit';8import { OffsetRange } from '../../../../util/vs/editor/common/core/ranges/offsetRange';9import { WorkingCopyOriginalDocument } from '../inline/workingCopies';1011suite('WorkingCopyOriginalDocument', () => {1213test('should initialize with correct text and EOL sequence', () => {14const text = 'Hello\nWorld';15const doc = new WorkingCopyOriginalDocument(text);16assert.strictEqual(doc.transformer.getText(), doc.text);1718assert.strictEqual(doc.text, text);19assert.strictEqual(doc.transformer.getText(), doc.text);20});2122test('should initialize with correct EOL sequence for \\r\\n', () => {23const text = 'Hello\r\nWorld';24const doc = new WorkingCopyOriginalDocument(text);25assert.strictEqual(doc.text, text);26assert.strictEqual(doc.transformer.getText(), doc.text);27});2829test('should apply offset edits correctly', () => {30const text = 'Hello\nWorld';31const doc = new WorkingCopyOriginalDocument(text);32assert.strictEqual(doc.transformer.getText(), doc.text);3334const edits = new StringEdit([new StringReplacement(new OffsetRange(5, 5), ' Beautiful')]);35doc.applyOffsetEdits(edits);36assert.strictEqual(doc.text, 'Hello Beautiful\nWorld');37assert.strictEqual(doc.transformer.getText(), doc.text);38});3940test('should apply multiple offset edits correctly', () => {41const text = 'Hello\nWorld';42const doc = new WorkingCopyOriginalDocument(text);43assert.strictEqual(doc.transformer.getText(), doc.text);4445const edits = new StringEdit([46new StringReplacement(new OffsetRange(5, 5), ' Beautiful'),47new StringReplacement(new OffsetRange(18, 18), '!')48]);49doc.applyOffsetEdits(edits);50assert.strictEqual(doc.text, 'Hello Beautiful\nWorld!');51assert.strictEqual(doc.transformer.getText(), doc.text);52});5354test('should maintain transformer state after applying edits', () => {55const text = 'Hello\nWorld';56const doc = new WorkingCopyOriginalDocument(text);57assert.strictEqual(doc.transformer.getText(), doc.text);5859const edits = new StringEdit([new StringReplacement(new OffsetRange(5, 5), ' Beautiful')]);60doc.applyOffsetEdits(edits);61assert.strictEqual(doc.transformer.getText(), doc.text);62});6364test('should compose applied edits correctly', () => {65const text = 'Hello\nWorld';66const doc = new WorkingCopyOriginalDocument(text);67assert.strictEqual(doc.transformer.getText(), doc.text);6869const edits1 = new StringEdit([new StringReplacement(new OffsetRange(5, 5), ' Beautiful')]);70const edits2 = new StringEdit([new StringReplacement(new OffsetRange(21, 21), '!')]);71doc.applyOffsetEdits(edits1);72doc.applyOffsetEdits(edits2);73assert.strictEqual(doc.text, 'Hello Beautiful\nWorld!');74assert.strictEqual(doc.appliedEdits.replacements.length, 2);75assert.strictEqual(doc.transformer.getText(), doc.text);76});7778test('should normalize EOL sequences in edits', () => {79const text = 'Hello\r\nWorld';80const doc = new WorkingCopyOriginalDocument(text);81assert.strictEqual(doc.transformer.getText(), doc.text);8283const edits = new StringEdit([new StringReplacement(new OffsetRange(5, 5), ' Beautiful\n')]);84doc.applyOffsetEdits(edits);85assert.strictEqual(doc.text, 'Hello Beautiful\r\n\r\nWorld');86assert.strictEqual(doc.transformer.getText(), doc.text);87});88});899091