UNPKG

react-diff-view

Version:

A git diff component to consume the git unified diff output.

132 lines (115 loc) 4.72 kB
import {describe, test, expect} from 'vitest'; import dedent from 'dedent'; import {parseDiff} from '../parse'; import { textLinesToHunk, insertHunk, expandFromRawCode, getCollapsedLinesCountBetween, expandCollapsedBlockBy, getChangeKey, ChangeData, HunkData, } from '../index'; const sample = dedent` diff --git a/src/__test__/index.test.jsx b/src/__test__/index.test.jsx index 643c2f0..7883597 100644 --- a/src/__test__/index.test.jsx +++ b/src/__test__/index.test.jsx @@ -21,3 +21,3 @@ describe('basic test', () => { test('App renders correctly', () => { - expect(renderer.create(<App diffText={'deff'} />).toJSON()).toMatchSnapshot(); + expect(renderer.create(<App diffText={'diff'} />).toJSON()).toMatchSnapshot(); }); `; export const sampleHunk = parseDiff(sample)[0].hunks[0]; const normalChange: ChangeData = {type: 'normal', isNormal: true, oldLineNumber: 1, newLineNumber: 1, content: ''}; const insertChange: ChangeData = {type: 'insert', isInsert: true, lineNumber: 2, content: ''}; const deleteChange: ChangeData = {type: 'delete', isDelete: true, lineNumber: 2, content: ''}; describe('textLinesToHunk', () => { test('basic', () => { const lines = ['']; expect(textLinesToHunk(lines, 0, 0)).toMatchSnapshot(); }); }); describe('insertHunk', () => { test('basic', () => { const results = insertHunk( [{changes: [normalChange], content: '', oldStart: 1, newStart: 1, oldLines: 1, newLines: 1}], {changes: [deleteChange], content: '', oldStart: 2, newStart: 2, oldLines: 1, newLines: 1} ); expect(results.length).toBe(1); expect(results[0].changes).toEqual([normalChange, deleteChange]); }); }); describe('expandFromRawCode', () => { test('basic', () => { const hunks = [sampleHunk]; expect(expandFromRawCode(hunks, '', 22, 23)).toMatchSnapshot(); }); }); describe('getCollapsedLinesCountBetween', () => { test('basic', () => { const previousHunk: HunkData = {content: '', oldStart: 1, oldLines: 2, newStart: 1, newLines: 2, changes: []}; const nextHunk: HunkData = {content: '', oldStart: 10, oldLines: 2, newStart: 10, newLines: 2, changes: []}; expect(getCollapsedLinesCountBetween(previousHunk, nextHunk)).toBe(7); }); test('minus number', () => { const previousHunk: HunkData = {content: '', oldStart: 1, oldLines: 10, newStart: 1, newLines: 2, changes: []}; const nextHunk: HunkData = {content: '', oldStart: 2, oldLines: 2, newStart: 10, newLines: 2, changes: []}; expect(getCollapsedLinesCountBetween(previousHunk, nextHunk)).toBe(-9); }); test('no previousHunk', () => { const nextHunk: HunkData = {content: '', oldStart: 2, oldLines: 2, newStart: 10, newLines: 2, changes: []}; expect(getCollapsedLinesCountBetween(null, nextHunk)).toBe(1); }); }); describe('expandCollapsedBlockBy', () => { test('basic', () => { const hunks = [sampleHunk]; expect(expandCollapsedBlockBy(hunks, '', () => false)).toMatchSnapshot(); }); test('normal hunk', () => { const hunks: HunkData[] = [ { content: '@@ -1,2 +1,2 @@', oldStart: 1, newStart: 1, oldLines: 2, newLines: 2, changes: [{ content: 'iiiiiiiiiiiiiiiiiiiiii:WQiiiiiiiiiiiiejj', type: 'normal', isNormal: true, oldLineNumber: 1, newLineNumber: 1, }, { content: 'dsds', type: 'delete', isDelete: true, lineNumber: 2, }, { content: 'dsdsds', type: 'insert', isInsert: true, lineNumber: 2, }], }, ]; const rawCode = 'iiiiiiiiiiiiiiiiiiiiii:WQiiiiiiiiiiiiejj\ndsds'; expect(expandCollapsedBlockBy(hunks, rawCode, () => false)).toMatchSnapshot(); expect(expandCollapsedBlockBy(hunks, rawCode.split('\n'), () => false)).toMatchSnapshot(); expect(expandFromRawCode(hunks, rawCode, 0, 10)).toMatchSnapshot(); }); }); describe('getChangeKey', () => { test('normal change', () => { expect(getChangeKey(normalChange)).toBe('N1'); }); test('insert change', () => { expect(getChangeKey(insertChange)).toBe('I2'); }); test('delete change', () => { expect(getChangeKey(deleteChange)).toBe('D2'); }); });