Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/prompts/node/test/workingCopies.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 { StringEdit, StringReplacement } from '../../../../util/vs/editor/common/core/edits/stringEdit';
9
import { OffsetRange } from '../../../../util/vs/editor/common/core/ranges/offsetRange';
10
import { WorkingCopyOriginalDocument } from '../inline/workingCopies';
11
12
suite('WorkingCopyOriginalDocument', () => {
13
14
test('should initialize with correct text and EOL sequence', () => {
15
const text = 'Hello\nWorld';
16
const doc = new WorkingCopyOriginalDocument(text);
17
assert.strictEqual(doc.transformer.getText(), doc.text);
18
19
assert.strictEqual(doc.text, text);
20
assert.strictEqual(doc.transformer.getText(), doc.text);
21
});
22
23
test('should initialize with correct EOL sequence for \\r\\n', () => {
24
const text = 'Hello\r\nWorld';
25
const doc = new WorkingCopyOriginalDocument(text);
26
assert.strictEqual(doc.text, text);
27
assert.strictEqual(doc.transformer.getText(), doc.text);
28
});
29
30
test('should apply offset edits correctly', () => {
31
const text = 'Hello\nWorld';
32
const doc = new WorkingCopyOriginalDocument(text);
33
assert.strictEqual(doc.transformer.getText(), doc.text);
34
35
const edits = new StringEdit([new StringReplacement(new OffsetRange(5, 5), ' Beautiful')]);
36
doc.applyOffsetEdits(edits);
37
assert.strictEqual(doc.text, 'Hello Beautiful\nWorld');
38
assert.strictEqual(doc.transformer.getText(), doc.text);
39
});
40
41
test('should apply multiple offset edits correctly', () => {
42
const text = 'Hello\nWorld';
43
const doc = new WorkingCopyOriginalDocument(text);
44
assert.strictEqual(doc.transformer.getText(), doc.text);
45
46
const edits = new StringEdit([
47
new StringReplacement(new OffsetRange(5, 5), ' Beautiful'),
48
new StringReplacement(new OffsetRange(18, 18), '!')
49
]);
50
doc.applyOffsetEdits(edits);
51
assert.strictEqual(doc.text, 'Hello Beautiful\nWorld!');
52
assert.strictEqual(doc.transformer.getText(), doc.text);
53
});
54
55
test('should maintain transformer state after applying edits', () => {
56
const text = 'Hello\nWorld';
57
const doc = new WorkingCopyOriginalDocument(text);
58
assert.strictEqual(doc.transformer.getText(), doc.text);
59
60
const edits = new StringEdit([new StringReplacement(new OffsetRange(5, 5), ' Beautiful')]);
61
doc.applyOffsetEdits(edits);
62
assert.strictEqual(doc.transformer.getText(), doc.text);
63
});
64
65
test('should compose applied edits correctly', () => {
66
const text = 'Hello\nWorld';
67
const doc = new WorkingCopyOriginalDocument(text);
68
assert.strictEqual(doc.transformer.getText(), doc.text);
69
70
const edits1 = new StringEdit([new StringReplacement(new OffsetRange(5, 5), ' Beautiful')]);
71
const edits2 = new StringEdit([new StringReplacement(new OffsetRange(21, 21), '!')]);
72
doc.applyOffsetEdits(edits1);
73
doc.applyOffsetEdits(edits2);
74
assert.strictEqual(doc.text, 'Hello Beautiful\nWorld!');
75
assert.strictEqual(doc.appliedEdits.replacements.length, 2);
76
assert.strictEqual(doc.transformer.getText(), doc.text);
77
});
78
79
test('should normalize EOL sequences in edits', () => {
80
const text = 'Hello\r\nWorld';
81
const doc = new WorkingCopyOriginalDocument(text);
82
assert.strictEqual(doc.transformer.getText(), doc.text);
83
84
const edits = new StringEdit([new StringReplacement(new OffsetRange(5, 5), ' Beautiful\n')]);
85
doc.applyOffsetEdits(edits);
86
assert.strictEqual(doc.text, 'Hello Beautiful\r\n\r\nWorld');
87
assert.strictEqual(doc.transformer.getText(), doc.text);
88
});
89
});
90
91