98 lines
2.8 KiB
TypeScript
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')
|