feat: Screwdriver v1.0.0
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import { describe, it, expect } from 'vitest'
|
||||
import { parseConflicts, resolveConflicts } from '../src/utils/git-conflict-resolver.js'
|
||||
|
||||
const CONFLICT_TEXT = `import { foo } from './foo'
|
||||
<<<<<<< HEAD
|
||||
const x = 1
|
||||
=======
|
||||
const x = 2
|
||||
>>>>>>> feature
|
||||
export { x }`
|
||||
|
||||
describe('git-conflict-resolver', () => {
|
||||
it('parses conflicts', () => {
|
||||
const conflicts = parseConflicts(CONFLICT_TEXT)
|
||||
expect(conflicts.length).toBe(1)
|
||||
expect(conflicts[0].ours).toBe('const x = 1')
|
||||
expect(conflicts[0].theirs).toBe('const x = 2')
|
||||
expect(conflicts[0].header).toBe('HEAD')
|
||||
})
|
||||
|
||||
it('auto-resolves with ours strategy', () => {
|
||||
const result = resolveConflicts(CONFLICT_TEXT, 'ours')
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.resolution).toContain('const x = 1')
|
||||
expect(result.resolution).not.toContain('<<<<<<<')
|
||||
})
|
||||
|
||||
it('auto-resolves with theirs strategy', () => {
|
||||
const result = resolveConflicts(CONFLICT_TEXT, 'theirs')
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.resolution).toContain('const x = 2')
|
||||
})
|
||||
|
||||
it('detects no conflicts', () => {
|
||||
const result = resolveConflicts('no conflict here')
|
||||
expect(result.success).toBe(false)
|
||||
expect(result.explanation).toContain('No git conflict markers')
|
||||
})
|
||||
|
||||
it('handles multiple conflicts', () => {
|
||||
const multi = `${CONFLICT_TEXT}\n\n${CONFLICT_TEXT.replace('x', 'y')}`
|
||||
const result = resolveConflicts(multi, 'ours')
|
||||
expect(result.success).toBe(true)
|
||||
expect(result.conflictCount).toBe(2)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user