diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/highlighted-additions-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/change-variable-name-highlighted-additions-suggestion-dark.png similarity index 100% rename from vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/highlighted-additions-suggestion-dark.png rename to vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/change-variable-name-highlighted-additions-suggestion-dark.png diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/highlighted-additions-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/change-variable-name-highlighted-additions-suggestion-light.png similarity index 100% rename from vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/highlighted-additions-suggestion-light.png rename to vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/change-variable-name-highlighted-additions-suggestion-light.png diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/highlighted-unified-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/change-variable-name-highlighted-unified-suggestion-dark.png similarity index 100% rename from vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/highlighted-unified-suggestion-dark.png rename to vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/change-variable-name-highlighted-unified-suggestion-dark.png diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/highlighted-unified-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/change-variable-name-highlighted-unified-suggestion-light.png similarity index 100% rename from vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/highlighted-unified-suggestion-light.png rename to vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/change-variable-name-highlighted-unified-suggestion-light.png diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-additions-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-additions-suggestion-dark.png new file mode 100644 index 000000000000..905cfbed015c Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-additions-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-additions-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-additions-suggestion-light.png new file mode 100644 index 000000000000..866f48a037c9 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-additions-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-unified-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-unified-suggestion-dark.png new file mode 100644 index 000000000000..e7c6fa8f9e66 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-unified-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-unified-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-unified-suggestion-light.png new file mode 100644 index 000000000000..73d8fb54b009 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/complex-diff-highlighted-unified-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-additions-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-additions-suggestion-dark.png new file mode 100644 index 000000000000..967faa758197 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-additions-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-additions-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-additions-suggestion-light.png new file mode 100644 index 000000000000..770629ae2812 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-additions-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-unified-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-unified-suggestion-dark.png new file mode 100644 index 000000000000..dde3445724a7 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-unified-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-unified-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-unified-suggestion-light.png new file mode 100644 index 000000000000..9e411352583b Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/mixed-additions-and-deletions-highlighted-unified-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-additions-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-additions-suggestion-dark.png new file mode 100644 index 000000000000..c6b5283ecd1f Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-additions-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-additions-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-additions-suggestion-light.png new file mode 100644 index 000000000000..cc7ab3c04199 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-additions-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-unified-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-unified-suggestion-dark.png new file mode 100644 index 000000000000..cbe50d02fdac Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-unified-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-unified-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-unified-suggestion-light.png new file mode 100644 index 000000000000..d452601b9667 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/multiple-lines-added-highlighted-unified-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-additions-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-additions-suggestion-dark.png new file mode 100644 index 000000000000..ffab77008a1f Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-additions-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-additions-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-additions-suggestion-light.png new file mode 100644 index 000000000000..49fdbd7f407d Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-additions-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-unified-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-unified-suggestion-dark.png new file mode 100644 index 000000000000..681dbd90dec9 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-unified-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-unified-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-unified-suggestion-light.png new file mode 100644 index 000000000000..96879725b465 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/no-highlighting-unified-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-additions-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-additions-suggestion-dark.png new file mode 100644 index 000000000000..1ecbbe028883 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-additions-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-additions-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-additions-suggestion-light.png new file mode 100644 index 000000000000..d08400f8ea85 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-additions-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-unified-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-unified-suggestion-dark.png new file mode 100644 index 000000000000..9de709d19744 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-unified-suggestion-dark.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-unified-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-unified-suggestion-light.png new file mode 100644 index 000000000000..fa5f2ff4d3b1 Binary files /dev/null and b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/single-line-added-highlighted-unified-suggestion-light.png differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-additions-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-additions-suggestion-dark.png deleted file mode 100644 index e527ec8b4f51..000000000000 Binary files a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-additions-suggestion-dark.png and /dev/null differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-additions-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-additions-suggestion-light.png deleted file mode 100644 index 8fa0bc8e76c2..000000000000 Binary files a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-additions-suggestion-light.png and /dev/null differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-unified-suggestion-dark.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-unified-suggestion-dark.png deleted file mode 100644 index 3b72647c9392..000000000000 Binary files a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-unified-suggestion-dark.png and /dev/null differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-unified-suggestion-light.png b/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-unified-suggestion-light.png deleted file mode 100644 index 7930929d12ef..000000000000 Binary files a/vscode/src/autoedits/renderer/image-gen/test/__image_snapshots__/unhighlighted-unified-suggestion-light.png and /dev/null differ diff --git a/vscode/src/autoedits/renderer/image-gen/test/index.test.ts b/vscode/src/autoedits/renderer/image-gen/test/index.test.ts index 35a0ff9e36d1..b0dbbdaccaf6 100644 --- a/vscode/src/autoedits/renderer/image-gen/test/index.test.ts +++ b/vscode/src/autoedits/renderer/image-gen/test/index.test.ts @@ -4,7 +4,7 @@ import { type DiffMode, generateSuggestionAsImage, initImageSuggestionService } import { document } from '../../../../completions/test-helpers' import { mockLocalStorage } from '../../../../services/LocalStorageProvider' import type { DecorationInfo } from '../../decorators/base' -import { MOCK_DIFF } from './mock-diff' +import { MIXED_ADDITIONS_AND_DELETIONS, MOCK_DIFFS } from './mock-diff' expect.extend({ toMatchImageSnapshot }) @@ -40,62 +40,59 @@ async function generateImageForTest( } describe('generateSuggestionAsImage', () => { - describe('addition diff', () => { - it('generates correct images, with correct highlighting applied, from a set of tokens', async () => { - const { darkBuffer, lightBuffer } = await generateImageForTest( - MOCK_DIFF, - 'typescript', - 'additions' - ) + describe.each(MOCK_DIFFS)('$name diff', ({ name, diff, lang }) => { + it('addition diff visual output', async () => { + const { darkBuffer, lightBuffer } = await generateImageForTest(diff, lang, 'additions') expect(lightBuffer).toMatchImageSnapshot({ - customSnapshotIdentifier: 'highlighted-additions-suggestion-light', + customSnapshotIdentifier: `${name}-highlighted-additions-suggestion-light`, }) expect(darkBuffer).toMatchImageSnapshot({ - customSnapshotIdentifier: 'highlighted-additions-suggestion-dark', + customSnapshotIdentifier: `${name}-highlighted-additions-suggestion-dark`, }) }) - it('generates correct images, with correct highlighting applied, from a set of tokens in a language that does not have supported highlighting', async () => { - const { darkBuffer, lightBuffer } = await generateImageForTest( - MOCK_DIFF, - 'non-existent-language', - 'additions' - ) + it('unified diff visual output', async () => { + const { darkBuffer, lightBuffer } = await generateImageForTest(diff, lang, 'unified') expect(lightBuffer).toMatchImageSnapshot({ - customSnapshotIdentifier: 'unhighlighted-additions-suggestion-light', + customSnapshotIdentifier: `${name}-highlighted-unified-suggestion-light`, }) expect(darkBuffer).toMatchImageSnapshot({ - customSnapshotIdentifier: 'unhighlighted-additions-suggestion-dark', + customSnapshotIdentifier: `${name}-highlighted-unified-suggestion-dark`, }) }) }) - describe('unfied diff', () => { - it('generates correct images, with correct highlighting applied, from a set of tokens', async () => { + describe('no syntax highlighting', () => { + // We want to avoid duplicating the tests (and images) for cases with no highlighting, as it is a small + // change that isn't required to be tested for a bunch of different diffs. + // Use a single diff for this case. + const exampleDiff = MIXED_ADDITIONS_AND_DELETIONS.diff + + it('addition diff visual output', async () => { const { darkBuffer, lightBuffer } = await generateImageForTest( - MOCK_DIFF, - 'typescript', - 'unified' + exampleDiff, + 'non-existent-language', + 'additions' ) expect(lightBuffer).toMatchImageSnapshot({ - customSnapshotIdentifier: 'highlighted-unified-suggestion-light', + customSnapshotIdentifier: 'no-highlighting-additions-suggestion-light', }) expect(darkBuffer).toMatchImageSnapshot({ - customSnapshotIdentifier: 'highlighted-unified-suggestion-dark', + customSnapshotIdentifier: 'no-highlighting-additions-suggestion-dark', }) }) - it('generates correct images, with correct highlighting applied, from a set of tokens in a language that does not have supported highlighting', async () => { + it('unified diff visual output', async () => { const { darkBuffer, lightBuffer } = await generateImageForTest( - MOCK_DIFF, + exampleDiff, 'non-existent-language', 'unified' ) expect(lightBuffer).toMatchImageSnapshot({ - customSnapshotIdentifier: 'unhighlighted-unified-suggestion-light', + customSnapshotIdentifier: 'no-highlighting-unified-suggestion-light', }) expect(darkBuffer).toMatchImageSnapshot({ - customSnapshotIdentifier: 'unhighlighted-unified-suggestion-dark', + customSnapshotIdentifier: 'no-highlighting-unified-suggestion-dark', }) }) }) diff --git a/vscode/src/autoedits/renderer/image-gen/test/mock-diff.ts b/vscode/src/autoedits/renderer/image-gen/test/mock-diff.ts index aab888b8a5a8..0d52fae21dbe 100644 --- a/vscode/src/autoedits/renderer/image-gen/test/mock-diff.ts +++ b/vscode/src/autoedits/renderer/image-gen/test/mock-diff.ts @@ -1,366 +1,1040 @@ import * as vscode from 'vscode' import type { DecorationInfo } from '../../decorators/base' -export const MOCK_DIFF = { - modifiedLines: [ - { - id: '27ab660c-39e1-4c41-ab16-8927f444bc1a', - type: 'modified', - originalLineNumber: 18, - modifiedLineNumber: 18, - oldText: ' for index in range(len(arr1)):', - newText: ' for currentIndex in range(len(arr1)):', - changes: [ - { - id: '813d06d3-50f7-49fe-a6f3-3d01191c13a6', - type: 'unchanged', - text: ' ', - originalRange: new vscode.Range(18, 0, 18, 4), - modifiedRange: new vscode.Range(18, 0, 18, 4), - }, - { - id: '232d724d-22c2-45b7-b82f-226bc7fb72da', - type: 'unchanged', - text: 'for', - originalRange: new vscode.Range(18, 4, 18, 7), - modifiedRange: new vscode.Range(18, 4, 18, 7), - }, - { - id: '9b44b869-c7b4-49e4-9d83-c544054f6374', - type: 'unchanged', - text: ' ', - originalRange: new vscode.Range(18, 7, 18, 8), - modifiedRange: new vscode.Range(18, 7, 18, 8), - }, - { - id: '80421f8b-0788-441c-bb18-a5cac6d0a9e1', - type: 'delete', - text: 'index', - originalRange: new vscode.Range(18, 8, 18, 13), - modifiedRange: new vscode.Range(18, 8, 18, 8), - }, - { - id: '55196eda-46b0-440b-ad63-5f5e682394bd', - type: 'insert', - text: 'currentIndex', - originalRange: new vscode.Range(18, 13, 18, 13), - modifiedRange: new vscode.Range(18, 8, 18, 20), - }, - { - id: 'e6f2e54c-feba-4998-b292-51ab1bd4360f', - type: 'unchanged', - text: ' ', - originalRange: new vscode.Range(18, 13, 18, 14), - modifiedRange: new vscode.Range(18, 20, 18, 21), - }, - { - id: '35a13471-c329-435e-92b2-08fd960f9e2d', - type: 'unchanged', - text: 'in', - originalRange: new vscode.Range(18, 14, 18, 16), - modifiedRange: new vscode.Range(18, 21, 18, 23), - }, - { - id: 'b49dc374-4186-4c96-8477-8936718bf6b2', - type: 'unchanged', - text: ' ', - originalRange: new vscode.Range(18, 16, 18, 17), - modifiedRange: new vscode.Range(18, 23, 18, 24), - }, - { - id: '82959fd5-d40b-41fe-b7e0-89693d564e9a', - type: 'unchanged', - text: 'range', - originalRange: new vscode.Range(18, 17, 18, 22), - modifiedRange: new vscode.Range(18, 24, 18, 29), - }, - { - id: 'd8781c1e-6d57-4582-99cc-b4172ccd959e', - type: 'unchanged', - text: '(', - originalRange: new vscode.Range(18, 22, 18, 23), - modifiedRange: new vscode.Range(18, 29, 18, 30), - }, - { - id: '8be7c3ad-5b23-4f70-88cf-e004e40af101', - type: 'unchanged', - text: 'len', - originalRange: new vscode.Range(18, 23, 18, 26), - modifiedRange: new vscode.Range(18, 30, 18, 33), - }, - { - id: '4e462eaa-70a1-48f4-a641-e24e80522532', - type: 'unchanged', - text: '(', - originalRange: new vscode.Range(18, 26, 18, 27), - modifiedRange: new vscode.Range(18, 33, 18, 34), - }, - { - id: '76416f32-b058-4004-91f4-eda5d7c897cc', - type: 'unchanged', - text: 'arr1', - originalRange: new vscode.Range(18, 27, 18, 31), - modifiedRange: new vscode.Range(18, 34, 18, 38), - }, - { - id: '7efe6c92-83a6-4d24-9483-2a237a658568', - type: 'unchanged', - text: ')', - originalRange: new vscode.Range(18, 31, 18, 32), - modifiedRange: new vscode.Range(18, 38, 18, 39), - }, - { - id: '18ed0a00-6af1-47ec-9159-e8844634a60e', - type: 'unchanged', - text: ')', - originalRange: new vscode.Range(18, 32, 18, 33), - modifiedRange: new vscode.Range(18, 39, 18, 40), - }, - { - id: '14d9a3a8-7285-4b87-b83c-a1c9a0e3c8d6', - type: 'unchanged', - text: ':', - originalRange: new vscode.Range(18, 33, 18, 34), - modifiedRange: new vscode.Range(18, 40, 18, 41), - }, - ], - }, - { - id: '5c13f3ea-c150-4b1e-ba48-f91228bc339a', - type: 'modified', - originalLineNumber: 19, - modifiedLineNumber: 19, - oldText: ' print(arr1[index])', - newText: ' print(arr1[currentIndex])', - changes: [ - { - id: '7e3d3e1d-ea94-4f6b-b8f2-95bcda8a1b58', - type: 'unchanged', - text: ' ', - originalRange: new vscode.Range(19, 0, 19, 8), - modifiedRange: new vscode.Range(19, 0, 19, 8), - }, - { - id: '4dd91c5b-c311-4ca1-b948-ea069bedf719', - type: 'unchanged', - text: 'print', - originalRange: new vscode.Range(19, 8, 19, 13), - modifiedRange: new vscode.Range(19, 8, 19, 13), - }, - { - id: '08790ecc-f417-4280-8048-cefc2ac24414', - type: 'unchanged', - text: '(', - originalRange: new vscode.Range(19, 13, 19, 14), - modifiedRange: new vscode.Range(19, 13, 19, 14), - }, - { - id: '701b4c26-231a-4963-b7a2-f33dcb7d1cfc', - type: 'unchanged', - text: 'arr1', - originalRange: new vscode.Range(19, 14, 19, 18), - modifiedRange: new vscode.Range(19, 14, 19, 18), - }, - { - id: '0d1f7344-12bb-4cfb-92ad-be6768a82156', - type: 'unchanged', - text: '[', - originalRange: new vscode.Range(19, 18, 19, 19), - modifiedRange: new vscode.Range(19, 18, 19, 19), - }, - { - id: '8483e4ce-2e07-4aa7-b10e-128a6bfa2c53', - type: 'delete', - text: 'index', - originalRange: new vscode.Range(19, 19, 19, 24), - modifiedRange: new vscode.Range(19, 19, 19, 19), - }, - { - id: 'e83ff538-104d-47d9-bd8f-c9b664343c0c', - type: 'insert', - text: 'currentIndex', - originalRange: new vscode.Range(19, 24, 19, 24), - modifiedRange: new vscode.Range(19, 19, 19, 31), - }, - { - id: '7c6641ab-b142-4ce9-a64c-fd1349464d6d', - type: 'unchanged', - text: ']', - originalRange: new vscode.Range(19, 24, 19, 25), - modifiedRange: new vscode.Range(19, 31, 19, 32), - }, - { - id: '0e6a1fa6-8342-447e-a3c7-7da3416147e5', - type: 'unchanged', - text: ')', - originalRange: new vscode.Range(19, 25, 19, 26), - modifiedRange: new vscode.Range(19, 32, 19, 33), - }, - ], - }, - { - id: 'db96ee03-96e1-42b5-b8a4-cdbd6f99725f', - type: 'modified', - originalLineNumber: 20, - modifiedLineNumber: 20, - oldText: ' print(arr2[index])', - newText: ' print(arr2[currentIndex])', - changes: [ - { - id: '3851a66c-42eb-4e38-b4f9-e0b7f4e1fc75', - type: 'unchanged', - text: ' ', - originalRange: new vscode.Range(20, 0, 20, 8), - modifiedRange: new vscode.Range(20, 0, 20, 8), - }, - { - id: 'e98889e5-085c-4792-9640-a26fca392c04', - type: 'unchanged', - text: 'print', - originalRange: new vscode.Range(20, 8, 20, 13), - modifiedRange: new vscode.Range(20, 8, 20, 13), - }, - { - id: 'ff31c177-5a4b-4456-8c9f-082ea96dc6f6', - type: 'unchanged', - text: '(', - originalRange: new vscode.Range(20, 13, 20, 14), - modifiedRange: new vscode.Range(20, 13, 20, 14), - }, - { - id: '55c2e1c0-f54c-4962-a312-33a7cd2a4359', - type: 'unchanged', - text: 'arr2', - originalRange: new vscode.Range(20, 14, 20, 18), - modifiedRange: new vscode.Range(20, 14, 20, 18), - }, - { - id: 'a850a25a-a418-4bfa-b829-6bed5e3d7063', - type: 'unchanged', - text: '[', - originalRange: new vscode.Range(20, 18, 20, 19), - modifiedRange: new vscode.Range(20, 18, 20, 19), - }, - { - id: 'bdf8c605-61d3-4efc-80e8-b9b3f77a5890', - type: 'delete', - text: 'index', - originalRange: new vscode.Range(20, 19, 20, 24), - modifiedRange: new vscode.Range(20, 19, 20, 19), - }, - { - id: '9584598a-841f-4d1e-91da-db810811398b', - type: 'insert', - text: 'currentIndex', - originalRange: new vscode.Range(20, 24, 20, 24), - modifiedRange: new vscode.Range(20, 19, 20, 31), - }, - { - id: '2a56c977-1cad-4a9f-99e1-f926d0edc220', - type: 'unchanged', - text: ']', - originalRange: new vscode.Range(20, 24, 20, 25), - modifiedRange: new vscode.Range(20, 31, 20, 32), - }, - { - id: 'ce8f7fda-618d-4d23-b3d5-a126d3d89cdd', - type: 'unchanged', - text: ')', - originalRange: new vscode.Range(20, 25, 20, 26), - modifiedRange: new vscode.Range(20, 32, 20, 33), - }, - ], - }, - { - id: 'fa4dbbbb-57eb-4095-87df-c50800ef6b4b', - type: 'modified', - originalLineNumber: 21, - modifiedLineNumber: 21, - oldText: ' print(arr3[index])', - newText: ' print(arr3[currentIndex])', - changes: [ - { - id: 'e97c990b-9cfe-498e-8a98-25a8f7ea9f12', - type: 'unchanged', - text: ' ', - originalRange: new vscode.Range(21, 0, 21, 8), - modifiedRange: new vscode.Range(21, 0, 21, 8), - }, - { - id: '521c7dce-dfc2-42b9-b1d2-92cfacf8bb12', - type: 'unchanged', - text: 'print', - originalRange: new vscode.Range(21, 8, 21, 13), - modifiedRange: new vscode.Range(21, 8, 21, 13), - }, - { - id: '0ce674b2-16ee-45ba-8c7b-e082a3d07f11', - type: 'unchanged', - text: '(', - originalRange: new vscode.Range(21, 13, 21, 14), - modifiedRange: new vscode.Range(21, 13, 21, 14), - }, - { - id: '1c116c10-c106-40ef-b08e-9f454c345d47', - type: 'unchanged', - text: 'arr3', - originalRange: new vscode.Range(21, 14, 21, 18), - modifiedRange: new vscode.Range(21, 14, 21, 18), - }, - { - id: 'fccd84bd-63c5-448a-93e7-1f9154d91bd2', - type: 'unchanged', - text: '[', - originalRange: new vscode.Range(21, 18, 21, 19), - modifiedRange: new vscode.Range(21, 18, 21, 19), - }, - { - id: 'eb09604a-fb56-49ed-979b-20b7a46673c3', - type: 'delete', - text: 'index', - originalRange: new vscode.Range(21, 19, 21, 24), - modifiedRange: new vscode.Range(21, 19, 21, 19), - }, - { - id: '61b87a58-961e-49c9-950c-d71fbfe05ee5', - type: 'insert', - text: 'currentIndex', - originalRange: new vscode.Range(21, 24, 21, 24), - modifiedRange: new vscode.Range(21, 19, 21, 31), - }, - { - id: 'adef5cc1-826c-4a72-88d0-c73c6d8096ea', - type: 'unchanged', - text: ']', - originalRange: new vscode.Range(21, 24, 21, 25), - modifiedRange: new vscode.Range(21, 31, 21, 32), - }, - { - id: '8debbe29-6615-4d30-a30a-fe513de5ad8b', - type: 'unchanged', - text: ')', - originalRange: new vscode.Range(21, 25, 21, 26), - modifiedRange: new vscode.Range(21, 32, 21, 33), - }, - ], - }, - ], - removedLines: [], - addedLines: [], - unchangedLines: [ - { - id: 'fac65cfd-3fa4-4bec-b312-d7e82e19e806', - type: 'unchanged', - originalLineNumber: 17, - modifiedLineNumber: 17, - text: 'def debug(arr1, arr2, arr3):', - }, - { - id: '2b74d3e9-3f2b-4466-9686-cb5c11fefd64', - type: 'unchanged', - originalLineNumber: 22, - modifiedLineNumber: 22, - text: '', - }, - ], -} satisfies DecorationInfo +interface MockDiffFixture { + // Used for naming screenshots + name: string + // Used for syntax highlighting. + // Should match + lang: string + // Diff that will be visually rendered + diff: DecorationInfo +} + +/** + * Diff that shows multiple modified lines + */ +const CHANGE_VARIABLE_NAME = { + name: 'change-variable-name', + lang: 'typescript', + diff: { + modifiedLines: [ + { + id: '27ab660c-39e1-4c41-ab16-8927f444bc1a', + type: 'modified', + originalLineNumber: 18, + modifiedLineNumber: 18, + oldText: ' for index in range(len(arr1)):', + newText: ' for currentIndex in range(len(arr1)):', + changes: [ + { + id: '813d06d3-50f7-49fe-a6f3-3d01191c13a6', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(18, 0, 18, 4), + modifiedRange: new vscode.Range(18, 0, 18, 4), + }, + { + id: '232d724d-22c2-45b7-b82f-226bc7fb72da', + type: 'unchanged', + text: 'for', + originalRange: new vscode.Range(18, 4, 18, 7), + modifiedRange: new vscode.Range(18, 4, 18, 7), + }, + { + id: '9b44b869-c7b4-49e4-9d83-c544054f6374', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(18, 7, 18, 8), + modifiedRange: new vscode.Range(18, 7, 18, 8), + }, + { + id: '80421f8b-0788-441c-bb18-a5cac6d0a9e1', + type: 'delete', + text: 'index', + originalRange: new vscode.Range(18, 8, 18, 13), + modifiedRange: new vscode.Range(18, 8, 18, 8), + }, + { + id: '55196eda-46b0-440b-ad63-5f5e682394bd', + type: 'insert', + text: 'currentIndex', + originalRange: new vscode.Range(18, 13, 18, 13), + modifiedRange: new vscode.Range(18, 8, 18, 20), + }, + { + id: 'e6f2e54c-feba-4998-b292-51ab1bd4360f', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(18, 13, 18, 14), + modifiedRange: new vscode.Range(18, 20, 18, 21), + }, + { + id: '35a13471-c329-435e-92b2-08fd960f9e2d', + type: 'unchanged', + text: 'in', + originalRange: new vscode.Range(18, 14, 18, 16), + modifiedRange: new vscode.Range(18, 21, 18, 23), + }, + { + id: 'b49dc374-4186-4c96-8477-8936718bf6b2', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(18, 16, 18, 17), + modifiedRange: new vscode.Range(18, 23, 18, 24), + }, + { + id: '82959fd5-d40b-41fe-b7e0-89693d564e9a', + type: 'unchanged', + text: 'range', + originalRange: new vscode.Range(18, 17, 18, 22), + modifiedRange: new vscode.Range(18, 24, 18, 29), + }, + { + id: 'd8781c1e-6d57-4582-99cc-b4172ccd959e', + type: 'unchanged', + text: '(', + originalRange: new vscode.Range(18, 22, 18, 23), + modifiedRange: new vscode.Range(18, 29, 18, 30), + }, + { + id: '8be7c3ad-5b23-4f70-88cf-e004e40af101', + type: 'unchanged', + text: 'len', + originalRange: new vscode.Range(18, 23, 18, 26), + modifiedRange: new vscode.Range(18, 30, 18, 33), + }, + { + id: '4e462eaa-70a1-48f4-a641-e24e80522532', + type: 'unchanged', + text: '(', + originalRange: new vscode.Range(18, 26, 18, 27), + modifiedRange: new vscode.Range(18, 33, 18, 34), + }, + { + id: '76416f32-b058-4004-91f4-eda5d7c897cc', + type: 'unchanged', + text: 'arr1', + originalRange: new vscode.Range(18, 27, 18, 31), + modifiedRange: new vscode.Range(18, 34, 18, 38), + }, + { + id: '7efe6c92-83a6-4d24-9483-2a237a658568', + type: 'unchanged', + text: ')', + originalRange: new vscode.Range(18, 31, 18, 32), + modifiedRange: new vscode.Range(18, 38, 18, 39), + }, + { + id: '18ed0a00-6af1-47ec-9159-e8844634a60e', + type: 'unchanged', + text: ')', + originalRange: new vscode.Range(18, 32, 18, 33), + modifiedRange: new vscode.Range(18, 39, 18, 40), + }, + { + id: '14d9a3a8-7285-4b87-b83c-a1c9a0e3c8d6', + type: 'unchanged', + text: ':', + originalRange: new vscode.Range(18, 33, 18, 34), + modifiedRange: new vscode.Range(18, 40, 18, 41), + }, + ], + }, + { + id: '5c13f3ea-c150-4b1e-ba48-f91228bc339a', + type: 'modified', + originalLineNumber: 19, + modifiedLineNumber: 19, + oldText: ' print(arr1[index])', + newText: ' print(arr1[currentIndex])', + changes: [ + { + id: '7e3d3e1d-ea94-4f6b-b8f2-95bcda8a1b58', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(19, 0, 19, 8), + modifiedRange: new vscode.Range(19, 0, 19, 8), + }, + { + id: '4dd91c5b-c311-4ca1-b948-ea069bedf719', + type: 'unchanged', + text: 'print', + originalRange: new vscode.Range(19, 8, 19, 13), + modifiedRange: new vscode.Range(19, 8, 19, 13), + }, + { + id: '08790ecc-f417-4280-8048-cefc2ac24414', + type: 'unchanged', + text: '(', + originalRange: new vscode.Range(19, 13, 19, 14), + modifiedRange: new vscode.Range(19, 13, 19, 14), + }, + { + id: '701b4c26-231a-4963-b7a2-f33dcb7d1cfc', + type: 'unchanged', + text: 'arr1', + originalRange: new vscode.Range(19, 14, 19, 18), + modifiedRange: new vscode.Range(19, 14, 19, 18), + }, + { + id: '0d1f7344-12bb-4cfb-92ad-be6768a82156', + type: 'unchanged', + text: '[', + originalRange: new vscode.Range(19, 18, 19, 19), + modifiedRange: new vscode.Range(19, 18, 19, 19), + }, + { + id: '8483e4ce-2e07-4aa7-b10e-128a6bfa2c53', + type: 'delete', + text: 'index', + originalRange: new vscode.Range(19, 19, 19, 24), + modifiedRange: new vscode.Range(19, 19, 19, 19), + }, + { + id: 'e83ff538-104d-47d9-bd8f-c9b664343c0c', + type: 'insert', + text: 'currentIndex', + originalRange: new vscode.Range(19, 24, 19, 24), + modifiedRange: new vscode.Range(19, 19, 19, 31), + }, + { + id: '7c6641ab-b142-4ce9-a64c-fd1349464d6d', + type: 'unchanged', + text: ']', + originalRange: new vscode.Range(19, 24, 19, 25), + modifiedRange: new vscode.Range(19, 31, 19, 32), + }, + { + id: '0e6a1fa6-8342-447e-a3c7-7da3416147e5', + type: 'unchanged', + text: ')', + originalRange: new vscode.Range(19, 25, 19, 26), + modifiedRange: new vscode.Range(19, 32, 19, 33), + }, + ], + }, + { + id: 'db96ee03-96e1-42b5-b8a4-cdbd6f99725f', + type: 'modified', + originalLineNumber: 20, + modifiedLineNumber: 20, + oldText: ' print(arr2[index])', + newText: ' print(arr2[currentIndex])', + changes: [ + { + id: '3851a66c-42eb-4e38-b4f9-e0b7f4e1fc75', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(20, 0, 20, 8), + modifiedRange: new vscode.Range(20, 0, 20, 8), + }, + { + id: 'e98889e5-085c-4792-9640-a26fca392c04', + type: 'unchanged', + text: 'print', + originalRange: new vscode.Range(20, 8, 20, 13), + modifiedRange: new vscode.Range(20, 8, 20, 13), + }, + { + id: 'ff31c177-5a4b-4456-8c9f-082ea96dc6f6', + type: 'unchanged', + text: '(', + originalRange: new vscode.Range(20, 13, 20, 14), + modifiedRange: new vscode.Range(20, 13, 20, 14), + }, + { + id: '55c2e1c0-f54c-4962-a312-33a7cd2a4359', + type: 'unchanged', + text: 'arr2', + originalRange: new vscode.Range(20, 14, 20, 18), + modifiedRange: new vscode.Range(20, 14, 20, 18), + }, + { + id: 'a850a25a-a418-4bfa-b829-6bed5e3d7063', + type: 'unchanged', + text: '[', + originalRange: new vscode.Range(20, 18, 20, 19), + modifiedRange: new vscode.Range(20, 18, 20, 19), + }, + { + id: 'bdf8c605-61d3-4efc-80e8-b9b3f77a5890', + type: 'delete', + text: 'index', + originalRange: new vscode.Range(20, 19, 20, 24), + modifiedRange: new vscode.Range(20, 19, 20, 19), + }, + { + id: '9584598a-841f-4d1e-91da-db810811398b', + type: 'insert', + text: 'currentIndex', + originalRange: new vscode.Range(20, 24, 20, 24), + modifiedRange: new vscode.Range(20, 19, 20, 31), + }, + { + id: '2a56c977-1cad-4a9f-99e1-f926d0edc220', + type: 'unchanged', + text: ']', + originalRange: new vscode.Range(20, 24, 20, 25), + modifiedRange: new vscode.Range(20, 31, 20, 32), + }, + { + id: 'ce8f7fda-618d-4d23-b3d5-a126d3d89cdd', + type: 'unchanged', + text: ')', + originalRange: new vscode.Range(20, 25, 20, 26), + modifiedRange: new vscode.Range(20, 32, 20, 33), + }, + ], + }, + { + id: 'fa4dbbbb-57eb-4095-87df-c50800ef6b4b', + type: 'modified', + originalLineNumber: 21, + modifiedLineNumber: 21, + oldText: ' print(arr3[index])', + newText: ' print(arr3[currentIndex])', + changes: [ + { + id: 'e97c990b-9cfe-498e-8a98-25a8f7ea9f12', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(21, 0, 21, 8), + modifiedRange: new vscode.Range(21, 0, 21, 8), + }, + { + id: '521c7dce-dfc2-42b9-b1d2-92cfacf8bb12', + type: 'unchanged', + text: 'print', + originalRange: new vscode.Range(21, 8, 21, 13), + modifiedRange: new vscode.Range(21, 8, 21, 13), + }, + { + id: '0ce674b2-16ee-45ba-8c7b-e082a3d07f11', + type: 'unchanged', + text: '(', + originalRange: new vscode.Range(21, 13, 21, 14), + modifiedRange: new vscode.Range(21, 13, 21, 14), + }, + { + id: '1c116c10-c106-40ef-b08e-9f454c345d47', + type: 'unchanged', + text: 'arr3', + originalRange: new vscode.Range(21, 14, 21, 18), + modifiedRange: new vscode.Range(21, 14, 21, 18), + }, + { + id: 'fccd84bd-63c5-448a-93e7-1f9154d91bd2', + type: 'unchanged', + text: '[', + originalRange: new vscode.Range(21, 18, 21, 19), + modifiedRange: new vscode.Range(21, 18, 21, 19), + }, + { + id: 'eb09604a-fb56-49ed-979b-20b7a46673c3', + type: 'delete', + text: 'index', + originalRange: new vscode.Range(21, 19, 21, 24), + modifiedRange: new vscode.Range(21, 19, 21, 19), + }, + { + id: '61b87a58-961e-49c9-950c-d71fbfe05ee5', + type: 'insert', + text: 'currentIndex', + originalRange: new vscode.Range(21, 24, 21, 24), + modifiedRange: new vscode.Range(21, 19, 21, 31), + }, + { + id: 'adef5cc1-826c-4a72-88d0-c73c6d8096ea', + type: 'unchanged', + text: ']', + originalRange: new vscode.Range(21, 24, 21, 25), + modifiedRange: new vscode.Range(21, 31, 21, 32), + }, + { + id: '8debbe29-6615-4d30-a30a-fe513de5ad8b', + type: 'unchanged', + text: ')', + originalRange: new vscode.Range(21, 25, 21, 26), + modifiedRange: new vscode.Range(21, 32, 21, 33), + }, + ], + }, + ], + removedLines: [], + addedLines: [], + unchangedLines: [], + }, +} satisfies MockDiffFixture + +/** + * Diff that shows a single addition line + */ +const SINGLE_LINE_ADDED = { + name: 'single-line-added', + lang: 'python', + diff: { + modifiedLines: [], + removedLines: [], + addedLines: [ + { + id: '8b9ea475-fc3e-4d49-8d97-cc89d7103aca', + type: 'added', + modifiedLineNumber: 79, + text: ' "created_at": self.created_at.isoformat(),', + }, + ], + unchangedLines: [ + { + id: '99f87750-5d3f-456b-bfc6-02d2452cb51b', + type: 'unchanged', + originalLineNumber: 77, + modifiedLineNumber: 77, + text: ' "name": self.name,', + }, + { + id: 'eef73253-856f-452b-b037-74be1559b55d', + type: 'unchanged', + originalLineNumber: 78, + modifiedLineNumber: 78, + text: ' "email": self.email,', + }, + { + id: '567a08c2-0459-4e3a-bd72-d3efaab933d8', + type: 'unchanged', + originalLineNumber: 79, + modifiedLineNumber: 80, + text: ' }', + }, + ], + }, +} satisfies MockDiffFixture + +/** + * Diff that shows multiple added lines, including one line that is marked as "modified" but + * should be visually treated as an addition as there are no deletions. + */ +const MULTIPLE_LINES_ADDED = { + name: 'multiple-lines-added', + lang: 'javascript', + diff: { + modifiedLines: [ + { + id: '3a4ba8ce-8e43-40a1-a883-377bfb63c926', + type: 'modified', + originalLineNumber: 27, + modifiedLineNumber: 27, + oldText: ' const ', + newText: ' const onClick = () => {', + changes: [ + { + id: '3bd7686b-3508-4119-a610-4f3a0d2098c6', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(27, 0, 27, 2), + modifiedRange: new vscode.Range(27, 0, 27, 2), + }, + { + id: '4b68f944-cdad-4632-82e1-0f11a1b648a5', + type: 'unchanged', + text: 'const', + originalRange: new vscode.Range(27, 2, 27, 7), + modifiedRange: new vscode.Range(27, 2, 27, 7), + }, + { + id: '55d250be-babe-4c71-8c35-6dca42cdb433', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(27, 7, 27, 8), + modifiedRange: new vscode.Range(27, 7, 27, 8), + }, + { + id: '045c6a4b-de2e-466e-9380-2b89d25014ea', + type: 'insert', + text: 'onClick = () => {', + originalRange: new vscode.Range(27, 8, 27, 8), + modifiedRange: new vscode.Range(27, 8, 27, 25), + }, + ], + }, + ], + removedLines: [], + addedLines: [ + { + id: '559d3082-5b0e-4b78-9090-2c9eb92d6879', + type: 'added', + modifiedLineNumber: 28, + text: ' console.log("Clicked");', + }, + { + id: '94ba5b05-55b4-43b5-b78d-3a5fded16b82', + type: 'added', + modifiedLineNumber: 29, + text: ' }', + }, + ], + unchangedLines: [ + { + id: 'c9e9d8af-f000-4fc3-ab3d-9426514f4151', + type: 'unchanged', + originalLineNumber: 26, + modifiedLineNumber: 26, + text: 'export const Home = () => {', + }, + ], + }, +} satisfies MockDiffFixture + +export const MIXED_ADDITIONS_AND_DELETIONS = { + name: 'mixed-additions-and-deletions', + lang: 'typescript', + diff: { + modifiedLines: [ + { + id: 'bd7a9471-3c5a-43d7-b5b3-76eb080502e5', + type: 'modified', + originalLineNumber: 38, + modifiedLineNumber: 38, + oldText: ' top 10px left 10px fixed', + newText: " top: '10px',", + changes: [ + { + id: '13696ddf-e2c6-4a6c-b356-4d584e7fbe20', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(38, 0, 38, 8), + modifiedRange: new vscode.Range(38, 0, 38, 8), + }, + { + id: '70451fe0-0c90-4953-a015-8d1996aed92d', + type: 'unchanged', + text: 'top', + originalRange: new vscode.Range(38, 8, 38, 11), + modifiedRange: new vscode.Range(38, 8, 38, 11), + }, + { + id: '545a5a30-20c9-455a-827f-be9e870e4450', + type: 'delete', + text: ' 10px left', + originalRange: new vscode.Range(38, 11, 38, 21), + modifiedRange: new vscode.Range(38, 11, 38, 11), + }, + { + id: '683e1ff0-e724-425e-8c00-110a15953ada', + type: 'insert', + text: ':', + originalRange: new vscode.Range(38, 21, 38, 21), + modifiedRange: new vscode.Range(38, 11, 38, 12), + }, + { + id: 'c49a00f5-219d-4dcc-bf82-ad42b6491d57', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(38, 21, 38, 22), + modifiedRange: new vscode.Range(38, 12, 38, 13), + }, + { + id: '9402ca9b-7e09-4002-ad79-1aea9b7decff', + type: 'insert', + text: "'", + originalRange: new vscode.Range(38, 22, 38, 22), + modifiedRange: new vscode.Range(38, 13, 38, 14), + }, + { + id: 'ee99a580-544b-4c5c-abc2-338937626fc9', + type: 'unchanged', + text: '10px', + originalRange: new vscode.Range(38, 22, 38, 26), + modifiedRange: new vscode.Range(38, 14, 38, 18), + }, + { + id: 'e374f80b-a83e-4818-85bc-57403e6aea58', + type: 'delete', + text: ' fixed', + originalRange: new vscode.Range(38, 26, 38, 32), + modifiedRange: new vscode.Range(38, 18, 38, 18), + }, + { + id: 'dcb92d8f-dcf9-470e-8e1e-f4504a57625f', + type: 'insert', + text: "',", + originalRange: new vscode.Range(38, 32, 38, 32), + modifiedRange: new vscode.Range(38, 18, 38, 20), + }, + ], + }, + ], + removedLines: [], + addedLines: [ + { + id: '3a5f7128-b239-4c66-b3c3-55e80f8abebe', + type: 'added', + modifiedLineNumber: 39, + text: " left: '10px',", + }, + { + id: 'a797e0c0-c1aa-4b04-8c41-8e3a559e70c1', + type: 'added', + modifiedLineNumber: 40, + text: " position: 'fixed',", + }, + ], + unchangedLines: [], + }, +} satisfies MockDiffFixture + +/** + * A complex diff consisting of: + * 1. Added lines + * 2. Removed lines + * 3. Modified lines + * 4. Unchanged lines _inbetween_ the above lines + */ +const COMPLEX_DIFF = { + name: 'complex-diff', + lang: 'typescript', + diff: { + modifiedLines: [ + { + id: '79454ddf-6fd3-4874-b6a9-afa0a04c6852', + type: 'modified', + originalLineNumber: 50, + modifiedLineNumber: 50, + oldText: + 'function addCoupleToGroups(personOne: Person, personTwo: Person, groups: Group[]): Group[] {', + newText: + 'function addCoupleToGroups(coupleA: Person, coupleB: Person, groups: Group[]): Group[] {', + changes: [ + { + id: 'c66ac4d3-ebc1-4aa8-9d9a-48ce1f2451a0', + type: 'unchanged', + text: 'function', + originalRange: new vscode.Range(50, 0, 50, 8), + modifiedRange: new vscode.Range(50, 0, 50, 8), + }, + { + id: '5fcdbca4-0a03-475f-9cf7-35ec1445584b', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(50, 8, 50, 9), + modifiedRange: new vscode.Range(50, 8, 50, 9), + }, + { + id: '548cfe27-e8cc-45e9-aa6a-af82800f4cf8', + type: 'unchanged', + text: 'addCoupleToGroups', + originalRange: new vscode.Range(50, 9, 50, 26), + modifiedRange: new vscode.Range(50, 9, 50, 26), + }, + { + id: '3187c635-3004-4d61-99cd-12d6d3f86a6f', + type: 'unchanged', + text: '(', + originalRange: new vscode.Range(50, 26, 50, 27), + modifiedRange: new vscode.Range(50, 26, 50, 27), + }, + { + id: 'b8eaa687-1138-496c-b8b0-bc668b0f53b2', + type: 'delete', + text: 'personOne', + originalRange: new vscode.Range(50, 27, 50, 36), + modifiedRange: new vscode.Range(50, 27, 50, 27), + }, + { + id: 'b135c35f-b0a2-4a6a-b08a-b1d09368cd48', + type: 'insert', + text: 'coupleA', + originalRange: new vscode.Range(50, 36, 50, 36), + modifiedRange: new vscode.Range(50, 27, 50, 34), + }, + { + id: 'f8c00eee-56f8-44d0-9d54-07d52fccdbdd', + type: 'unchanged', + text: ':', + originalRange: new vscode.Range(50, 36, 50, 37), + modifiedRange: new vscode.Range(50, 34, 50, 35), + }, + { + id: '6ba9271f-881b-4f0e-9592-7fc47f63288e', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(50, 37, 50, 38), + modifiedRange: new vscode.Range(50, 35, 50, 36), + }, + { + id: '3e4874bd-c349-401b-9871-fed92c183db2', + type: 'unchanged', + text: 'Person', + originalRange: new vscode.Range(50, 38, 50, 44), + modifiedRange: new vscode.Range(50, 36, 50, 42), + }, + { + id: '661c598a-d614-46fc-8e39-59f8d1331537', + type: 'unchanged', + text: ',', + originalRange: new vscode.Range(50, 44, 50, 45), + modifiedRange: new vscode.Range(50, 42, 50, 43), + }, + { + id: 'b8464da0-96da-462c-8f1c-ad2b31e68309', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(50, 45, 50, 46), + modifiedRange: new vscode.Range(50, 43, 50, 44), + }, + { + id: '91a19a47-3036-4604-8481-f6225537b803', + type: 'delete', + text: 'personTwo', + originalRange: new vscode.Range(50, 46, 50, 55), + modifiedRange: new vscode.Range(50, 44, 50, 44), + }, + { + id: 'c081cdeb-cb78-4375-8440-0a533cce23e4', + type: 'insert', + text: 'coupleB', + originalRange: new vscode.Range(50, 55, 50, 55), + modifiedRange: new vscode.Range(50, 44, 50, 51), + }, + { + id: '2472e461-9214-4691-a8c5-8596e3c44709', + type: 'unchanged', + text: ':', + originalRange: new vscode.Range(50, 55, 50, 56), + modifiedRange: new vscode.Range(50, 51, 50, 52), + }, + { + id: '71c70c82-671f-4e75-8583-d62c663b10e4', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(50, 56, 50, 57), + modifiedRange: new vscode.Range(50, 52, 50, 53), + }, + { + id: '63be7b49-494e-419c-b2b0-5fe75cd7da4d', + type: 'unchanged', + text: 'Person', + originalRange: new vscode.Range(50, 57, 50, 63), + modifiedRange: new vscode.Range(50, 53, 50, 59), + }, + { + id: '094114e2-8122-4f19-aa4e-dad91df1a1ab', + type: 'unchanged', + text: ',', + originalRange: new vscode.Range(50, 63, 50, 64), + modifiedRange: new vscode.Range(50, 59, 50, 60), + }, + { + id: 'a9554de1-ccba-4288-a716-b8bfc83ca40f', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(50, 64, 50, 65), + modifiedRange: new vscode.Range(50, 60, 50, 61), + }, + { + id: '3cfe9769-2da5-4051-8885-5e72d9483edc', + type: 'unchanged', + text: 'groups', + originalRange: new vscode.Range(50, 65, 50, 71), + modifiedRange: new vscode.Range(50, 61, 50, 67), + }, + { + id: 'a52aa0d7-96e2-4fed-a651-9f6e6a75dd7a', + type: 'unchanged', + text: ':', + originalRange: new vscode.Range(50, 71, 50, 72), + modifiedRange: new vscode.Range(50, 67, 50, 68), + }, + { + id: 'eafa11e7-c76b-41b9-a7fa-e46b9c6e52ed', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(50, 72, 50, 73), + modifiedRange: new vscode.Range(50, 68, 50, 69), + }, + { + id: '027cb1b7-4cc1-4eab-b3c2-39f26b9afefc', + type: 'unchanged', + text: 'Group', + originalRange: new vscode.Range(50, 73, 50, 78), + modifiedRange: new vscode.Range(50, 69, 50, 74), + }, + { + id: '9e905bda-5af7-4e66-a0e4-bb4f07f64dd5', + type: 'unchanged', + text: '[', + originalRange: new vscode.Range(50, 78, 50, 79), + modifiedRange: new vscode.Range(50, 74, 50, 75), + }, + { + id: '6c9d062c-300d-4465-958e-5436364a6bca', + type: 'unchanged', + text: ']', + originalRange: new vscode.Range(50, 79, 50, 80), + modifiedRange: new vscode.Range(50, 75, 50, 76), + }, + { + id: 'b8b5e481-2d75-4033-9e76-dc694343c9e2', + type: 'unchanged', + text: ')', + originalRange: new vscode.Range(50, 80, 50, 81), + modifiedRange: new vscode.Range(50, 76, 50, 77), + }, + { + id: '9b569812-18bf-466d-a108-0f8aeefe3a92', + type: 'unchanged', + text: ':', + originalRange: new vscode.Range(50, 81, 50, 82), + modifiedRange: new vscode.Range(50, 77, 50, 78), + }, + { + id: '9d9655b0-c63c-4f40-81d8-f44569006776', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(50, 82, 50, 83), + modifiedRange: new vscode.Range(50, 78, 50, 79), + }, + { + id: 'fb5c7b00-8028-43ed-8943-b6c789075302', + type: 'unchanged', + text: 'Group', + originalRange: new vscode.Range(50, 83, 50, 88), + modifiedRange: new vscode.Range(50, 79, 50, 84), + }, + { + id: '2b512784-5633-4d07-95cc-aeebb2da621b', + type: 'unchanged', + text: '[', + originalRange: new vscode.Range(50, 88, 50, 89), + modifiedRange: new vscode.Range(50, 84, 50, 85), + }, + { + id: 'adc733bd-b107-419b-9e06-e8c613f9514d', + type: 'unchanged', + text: ']', + originalRange: new vscode.Range(50, 89, 50, 90), + modifiedRange: new vscode.Range(50, 85, 50, 86), + }, + { + id: '4b1adcb2-60df-4243-b40b-09fe5ef031e1', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(50, 90, 50, 91), + modifiedRange: new vscode.Range(50, 86, 50, 87), + }, + { + id: 'd2fe40c9-d48b-4d13-96ce-da5609c4e66b', + type: 'unchanged', + text: '{', + originalRange: new vscode.Range(50, 91, 50, 92), + modifiedRange: new vscode.Range(50, 87, 50, 88), + }, + ], + }, + { + id: 'eea0fbed-ec48-48eb-ad03-eca3e37b4e3d', + type: 'modified', + originalLineNumber: 53, + modifiedLineNumber: 52, + oldText: ' group.members.push(personOne, personTwo)', + newText: ' group.members.push(coupleA, coupleB)', + changes: [ + { + id: '4b57486a-fef3-47d1-a5fd-c9e4df2053a0', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(53, 0, 53, 8), + modifiedRange: new vscode.Range(52, 0, 52, 8), + }, + { + id: '167763ae-3d41-46a3-9a6b-6140271b746c', + type: 'unchanged', + text: 'group', + originalRange: new vscode.Range(53, 8, 53, 13), + modifiedRange: new vscode.Range(52, 8, 52, 13), + }, + { + id: '4c30ed86-960d-4d63-a63c-8ea6b5906ece', + type: 'unchanged', + text: '.', + originalRange: new vscode.Range(53, 13, 53, 14), + modifiedRange: new vscode.Range(52, 13, 52, 14), + }, + { + id: 'a79c5bd6-4733-48f7-b4ba-0949537a313f', + type: 'unchanged', + text: 'members', + originalRange: new vscode.Range(53, 14, 53, 21), + modifiedRange: new vscode.Range(52, 14, 52, 21), + }, + { + id: 'c3e0606f-7400-43f9-8e75-124133ae43f6', + type: 'unchanged', + text: '.', + originalRange: new vscode.Range(53, 21, 53, 22), + modifiedRange: new vscode.Range(52, 21, 52, 22), + }, + { + id: '1129ff8f-3735-454f-8442-8c1b7576594e', + type: 'unchanged', + text: 'push', + originalRange: new vscode.Range(53, 22, 53, 26), + modifiedRange: new vscode.Range(52, 22, 52, 26), + }, + { + id: 'cc7811d7-7dc8-453c-a429-70c4ab7fa598', + type: 'unchanged', + text: '(', + originalRange: new vscode.Range(53, 26, 53, 27), + modifiedRange: new vscode.Range(52, 26, 52, 27), + }, + { + id: 'ea996b88-0cf3-4073-a96d-0168af9982c6', + type: 'delete', + text: 'personOne', + originalRange: new vscode.Range(53, 27, 53, 36), + modifiedRange: new vscode.Range(52, 27, 52, 27), + }, + { + id: 'b7bc0798-ce5d-4a28-8eb6-dc9227c92af8', + type: 'insert', + text: 'coupleA', + originalRange: new vscode.Range(53, 36, 53, 36), + modifiedRange: new vscode.Range(52, 27, 52, 34), + }, + { + id: '9d293ff8-ae89-4b73-b7ca-bba05bd2618e', + type: 'unchanged', + text: ',', + originalRange: new vscode.Range(53, 36, 53, 37), + modifiedRange: new vscode.Range(52, 34, 52, 35), + }, + { + id: '4d1e2e08-2ac1-4f53-8af8-8c8d15e5084c', + type: 'unchanged', + text: ' ', + originalRange: new vscode.Range(53, 37, 53, 38), + modifiedRange: new vscode.Range(52, 35, 52, 36), + }, + { + id: 'cae18132-d35a-4475-b61e-ff639c52e601', + type: 'delete', + text: 'personTwo', + originalRange: new vscode.Range(53, 38, 53, 47), + modifiedRange: new vscode.Range(52, 36, 52, 36), + }, + { + id: 'f3f31adb-15f4-4426-89cb-c873eac254d3', + type: 'insert', + text: 'coupleB', + originalRange: new vscode.Range(53, 47, 53, 47), + modifiedRange: new vscode.Range(52, 36, 52, 43), + }, + { + id: 'd486b473-865b-4e2e-bf99-6fe8559fac58', + type: 'unchanged', + text: ')', + originalRange: new vscode.Range(53, 47, 53, 48), + modifiedRange: new vscode.Range(52, 43, 52, 44), + }, + ], + }, + ], + removedLines: [ + { + id: '374ed7e5-ae4f-4c99-aa48-50e776ff7548', + type: 'removed', + originalLineNumber: 51, + text: ' console.log(`Adding ${personOne.name} and ${personTwo.name} to groups`)', + }, + ], + addedLines: [ + { + id: '535d8f21-d8d1-4f06-8971-fff431301141', + type: 'added', + modifiedLineNumber: 53, + text: " console.log('Added couple to group', group.name)", + }, + ], + unchangedLines: [ + { + id: 'ab89cbd6-71dc-45a8-8052-f6405030e3b7', + type: 'unchanged', + originalLineNumber: 45, + modifiedLineNumber: 45, + text: 'interface Person {', + }, + { + id: '974863fc-75ca-4c53-9f5b-00aa3bdbc3e2', + type: 'unchanged', + originalLineNumber: 46, + modifiedLineNumber: 46, + text: ' name: string', + }, + { + id: '479e1a9e-7161-41c9-9632-ead8536d9bc3', + type: 'unchanged', + originalLineNumber: 47, + modifiedLineNumber: 47, + text: ' age: number', + }, + { + id: '26393e8a-eaa1-4cf6-96ba-87c837a38dae', + type: 'unchanged', + originalLineNumber: 48, + modifiedLineNumber: 48, + text: '}', + }, + { + id: '83d4726f-f65f-4623-aae5-1a0ebe28991c', + type: 'unchanged', + originalLineNumber: 49, + modifiedLineNumber: 49, + text: '', + }, + { + id: '84834c6e-5c97-4fa6-a728-0ee2095afa59', + type: 'unchanged', + originalLineNumber: 52, + modifiedLineNumber: 51, + text: ' for (const group of groups) {', + }, + { + id: '31c8fb15-c9f5-4177-8c9f-cc4ec12c6230', + type: 'unchanged', + originalLineNumber: 54, + modifiedLineNumber: 54, + text: ' }', + }, + { + id: '3d8300ee-4b71-4e6c-9ad6-3031103d1ecc', + type: 'unchanged', + originalLineNumber: 55, + modifiedLineNumber: 55, + text: ' return groups', + }, + { + id: '3e31ed06-9bbb-4e65-b74a-7b46db393727', + type: 'unchanged', + originalLineNumber: 56, + modifiedLineNumber: 56, + text: '}', + }, + { + id: 'e0b2fc1b-c179-4914-b6b7-b09e97f23773', + type: 'unchanged', + originalLineNumber: 57, + modifiedLineNumber: 57, + text: '', + }, + ], + }, +} satisfies MockDiffFixture + +export const MOCK_DIFFS = [ + CHANGE_VARIABLE_NAME, + SINGLE_LINE_ADDED, + MULTIPLE_LINES_ADDED, + MIXED_ADDITIONS_AND_DELETIONS, + COMPLEX_DIFF, +]