import test from 'node:test'; import assert from 'node:assert/strict'; import gitStatus from '../src/shared/git-status.cjs'; const { parsePorcelainV2 } = gitStatus; test('parses branch metadata and ordinary changes', () => { const output = [ '# branch.oid 0123456789abcdef', '# branch.head main', '# branch.upstream origin/main', '# branch.ab +2 -1', '1 .M N... 100644 100644 100644 abc def src/main.js', '1 M. N... 100644 100644 100644 abc def README.md', '? new file.txt', '' ].join('\0'); const parsed = parsePorcelainV2(output); assert.equal(parsed.branch.head, 'main'); assert.equal(parsed.branch.ahead, 2); assert.equal(parsed.branch.behind, 1); assert.equal(parsed.counts.changed, 3); assert.equal(parsed.counts.staged, 1); assert.equal(parsed.counts.untracked, 1); assert.equal(parsed.files[0].path, 'src/main.js'); }); test('parses rename records with original path', () => { const output = '2 R. N... 100644 100644 100644 abc def R100 src/new.js\0src/old.js\0'; const parsed = parsePorcelainV2(output); assert.equal(parsed.files[0].path, 'src/new.js'); assert.equal(parsed.files[0].originalPath, 'src/old.js'); assert.equal(parsed.files[0].status, 'renamed'); });