mirror of
https://github.com/stablyai/orca.git
synced 2026-09-25 16:02:38 +00:00
98 lines
3.3 KiB
TypeScript
98 lines
3.3 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
highlightMobileDiffLines,
|
|
resolveMobileSyntaxLanguage
|
|
} from '../session/mobile-file-syntax'
|
|
import { buildGitHubPrFileDiffLines, buildGitHubPrFileDiffPreview } from './github-pr-file-diff'
|
|
|
|
describe('buildGitHubPrFileDiffLines', () => {
|
|
it('preserves context and marks added and removed lines', () => {
|
|
expect(buildGitHubPrFileDiffLines('one\ntwo\nthree\n', 'one\ntoo\nthree\n')).toEqual([
|
|
{
|
|
key: '0:context:1:1',
|
|
kind: 'context',
|
|
oldLineNumber: 1,
|
|
newLineNumber: 1,
|
|
text: 'one'
|
|
},
|
|
{
|
|
key: '1:removed:2',
|
|
kind: 'removed',
|
|
oldLineNumber: 2,
|
|
text: 'two'
|
|
},
|
|
{
|
|
key: '2:added:2',
|
|
kind: 'added',
|
|
newLineNumber: 2,
|
|
text: 'too'
|
|
},
|
|
{
|
|
key: '3:context:3:3',
|
|
kind: 'context',
|
|
oldLineNumber: 3,
|
|
newLineNumber: 3,
|
|
text: 'three'
|
|
}
|
|
])
|
|
})
|
|
|
|
it('shows added files without a fake empty original line', () => {
|
|
expect(buildGitHubPrFileDiffLines('', 'first\nsecond')).toEqual([
|
|
{ key: '0:added:1', kind: 'added', newLineNumber: 1, text: 'first' },
|
|
{ key: '1:added:2', kind: 'added', newLineNumber: 2, text: 'second' }
|
|
])
|
|
})
|
|
|
|
it('keeps all lines for large files without exact diff truncation', () => {
|
|
const original = Array.from({ length: 500 }, (_, index) => `old-${index}`).join('\n')
|
|
const modified = Array.from({ length: 500 }, (_, index) => `new-${index}`).join('\n')
|
|
|
|
const lines = buildGitHubPrFileDiffLines(original, modified)
|
|
|
|
expect(lines).toHaveLength(1000)
|
|
expect(lines[0]).toMatchObject({ kind: 'removed', oldLineNumber: 1, text: 'old-0' })
|
|
expect(lines.at(-1)).toMatchObject({ kind: 'added', newLineNumber: 500, text: 'new-499' })
|
|
})
|
|
|
|
it('builds capped previews while preserving the exact total line count', () => {
|
|
const original = Array.from({ length: 500 }, (_, index) => `old-${index}`).join('\n')
|
|
const modified = Array.from({ length: 500 }, (_, index) => `new-${index}`).join('\n')
|
|
|
|
const preview = buildGitHubPrFileDiffPreview(original, modified, 400)
|
|
|
|
expect(preview.totalLineCount).toBe(1000)
|
|
expect(preview.lines).toHaveLength(400)
|
|
expect(preview.lines[0]).toMatchObject({ kind: 'removed', oldLineNumber: 1, text: 'old-0' })
|
|
expect(preview.lines.at(-1)).toMatchObject({
|
|
kind: 'removed',
|
|
oldLineNumber: 400,
|
|
text: 'old-399'
|
|
})
|
|
})
|
|
|
|
it('can compute the total without retaining preview rows', () => {
|
|
const modified = Array.from({ length: 20 }, (_, index) => `new-${index}`).join('\n')
|
|
|
|
const preview = buildGitHubPrFileDiffPreview('', modified, 0)
|
|
|
|
expect(preview).toEqual({ lines: [], totalLineCount: 20 })
|
|
})
|
|
|
|
it('supports mobile syntax highlighting for rendered PR diff rows', () => {
|
|
const preview = buildGitHubPrFileDiffPreview(
|
|
'const label: string = "Old"',
|
|
'const label: string = "New"'
|
|
)
|
|
|
|
const highlighted = highlightMobileDiffLines(
|
|
preview.lines,
|
|
resolveMobileSyntaxLanguage('src/App.tsx')
|
|
)
|
|
|
|
expect(highlighted[0]?.segments).toContainEqual({ text: 'const', kind: 'keyword' })
|
|
expect(highlighted[1]?.segments).toContainEqual({ text: '"New"', kind: 'string' })
|
|
expect(highlighted[1]).toMatchObject({ kind: 'added', newLineNumber: 1 })
|
|
})
|
|
})
|