Files
ycode/scripts/artifact-diff-regression.ts

98 lines
2.8 KiB
TypeScript

import assert from 'node:assert/strict'
import {
diffSidesFromCurrentFile,
diffSidesFromUnifiedDiff,
parseDiffContent,
resolveCachedDiffSides
} from '../src/renderer/src/workbuddy/artifacts/diff-content'
const diff = [
'diff --git a/file.txt b/file.txt',
'index 1234567..abcdef0 100644',
'--- a/file.txt',
'+++ b/file.txt',
'@@ -1,3 +1,3 @@',
' before',
'-old value',
'+new value',
' after'
].join('\n')
assert.deepEqual(parseDiffContent(diff), {
original: 'before\nold value\nafter',
modified: 'before\nnew value\nafter'
})
assert.deepEqual(parseDiffContent(undefined), { original: '', modified: '' })
assert.equal(resolveCachedDiffSides(undefined, diff), undefined)
assert.deepEqual(diffSidesFromCurrentFile('current file', 'added'), { original: '', modified: 'current file' })
assert.deepEqual(diffSidesFromCurrentFile('removed file', 'deleted'), { original: 'removed file', modified: '' })
assert.deepEqual(resolveCachedDiffSides('current file', undefined, 'added'), { original: '', modified: 'current file' })
assert.deepEqual(resolveCachedDiffSides('removed file', undefined, 'deleted'), { original: 'removed file', modified: '' })
const cached = diffSidesFromUnifiedDiff('before\nnew value\nafter', diff)
assert.deepEqual(cached, {
original: 'before\nold value\nafter',
modified: 'before\nnew value\nafter',
exactDiff: diff
})
assert.deepEqual(resolveCachedDiffSides('before\nnew value\nafter', diff), cached)
const bareHunk = '@@ -1 +1 @@\n-old\n+new'
assert.deepEqual(diffSidesFromUnifiedDiff('new', bareHunk), {
original: 'old',
modified: 'new',
exactDiff: bareHunk
})
const shiftedHunk = '@@ -1 +1 @@\n-old\n+new'
assert.deepEqual(diffSidesFromUnifiedDiff('prefix\nnew\nsuffix', shiftedHunk), {
original: 'prefix\nold\nsuffix',
modified: 'prefix\nnew\nsuffix',
exactDiff: shiftedHunk
})
const multipleHunks = [
'--- a/file.txt',
'+++ b/file.txt',
'@@ -2,3 +2,3 @@',
' b',
'-c',
'+C',
' d',
'@@ -6,2 +6,2 @@',
' f',
'-g',
'+G'
].join('\n')
assert.equal(
diffSidesFromUnifiedDiff('a\nb\nC\nd\ne\nf\nG', multipleHunks).original,
'a\nb\nc\nd\ne\nf\ng'
)
assert.equal(
diffSidesFromUnifiedDiff('before\r\nnew value\r\nafter\r\n', diff).original,
'before\r\nold value\r\nafter\r\n'
)
const noFinalNewline = [
'--- a/file.txt',
'+++ b/file.txt',
'@@ -1 +1 @@',
'-old',
'\\ No newline at end of file',
'+new',
'\\ No newline at end of file'
].join('\n')
assert.deepEqual(diffSidesFromUnifiedDiff('new', noFinalNewline), {
original: 'old',
modified: 'new',
exactDiff: noFinalNewline
})
const mismatchedCache = diffSidesFromUnifiedDiff('unrelated cached content', diff)
assert.deepEqual(mismatchedCache, {
original: 'before\nold value\nafter',
modified: 'unrelated cached content'
})
console.log('Artifact diff recovery regression checks passed')