import SideBySideRenderer from '../side-by-side-renderer'; import HoganJsUtils from '../hoganjs-utils'; import { LineType, DiffLine, DiffFile, LineMatchingType } from '../types'; import { CSSLineClass } from '../render-utils'; describe('SideBySideRenderer', () => { describe('generateEmptyDiff', () => { it('should return an empty diff', () => { const hoganUtils = new HoganJsUtils({}); const sideBySideRenderer = new SideBySideRenderer(hoganUtils, {}); const fileHtml = sideBySideRenderer.generateEmptyDiff(); expect(fileHtml).toMatchInlineSnapshot(` Object { "left": "
File without changes
", "right": "", } `); }); }); describe('generateSideBySideFileHtml', () => { it('should generate lines with the right prefixes', () => { const hoganUtils = new HoganJsUtils({}); const sideBySideRenderer = new SideBySideRenderer(hoganUtils, {}); const file: DiffFile = { isGitDiff: true, blocks: [ { lines: [ { content: ' context', type: LineType.CONTEXT, oldNumber: 19, newNumber: 19, }, { content: '-removed', type: LineType.DELETE, oldNumber: 20, newNumber: undefined, }, { content: '+added', type: LineType.INSERT, oldNumber: undefined, newNumber: 20, }, { content: '+another added', type: LineType.INSERT, oldNumber: undefined, newNumber: 21, }, ], oldStartLine: 19, newStartLine: 19, header: '@@ -19,7 +19,7 @@', }, ], deletedLines: 1, addedLines: 2, checksumBefore: 'fc56817', checksumAfter: 'e8e7e49', mode: '100644', oldName: 'coverage.init', language: 'init', newName: 'coverage.init', isCombined: false, }; const fileHtml = sideBySideRenderer.generateFileHtml(file); expect(fileHtml).toMatchInlineSnapshot(` Object { "left": "
@@ -19,7 +19,7 @@
19
  context
20
- removed
 
", "right": "
19
  context
20
+ added
21
+ another added
", } `); }); }); describe('generateSingleLineHtml', () => { it('should work for insertions', () => { const hoganUtils = new HoganJsUtils({}); const sideBySideRenderer = new SideBySideRenderer(hoganUtils, {}); const fileHtml = sideBySideRenderer.generateLineHtml(undefined, { type: CSSLineClass.INSERTS, prefix: '+', content: 'test', number: 30, }); expect(fileHtml).toMatchInlineSnapshot(` Object { "left": "
 
", "right": " 30
+ test
", } `); }); it('should work for deletions', () => { const hoganUtils = new HoganJsUtils({}); const sideBySideRenderer = new SideBySideRenderer(hoganUtils, {}); const fileHtml = sideBySideRenderer.generateLineHtml( { type: CSSLineClass.DELETES, prefix: '-', content: 'test', number: 30, }, undefined, ); expect(fileHtml).toMatchInlineSnapshot(` Object { "left": " 30
- test
", "right": "
 
", } `); }); }); describe('generateSideBySideJsonHtml', () => { it('should work for list of files', () => { const exampleJson: DiffFile[] = [ { blocks: [ { lines: [ { content: '-test', type: LineType.DELETE, oldNumber: 1, newNumber: undefined, }, { content: '+test1r', type: LineType.INSERT, oldNumber: undefined, newNumber: 1, }, ], oldStartLine: 1, oldStartLine2: undefined, newStartLine: 1, header: '@@ -1 +1 @@', }, ], deletedLines: 1, addedLines: 1, checksumBefore: '0000001', checksumAfter: '0ddf2ba', oldName: 'sample', language: 'txt', newName: 'sample', isCombined: false, isGitDiff: true, }, ]; const hoganUtils = new HoganJsUtils({}); const sideBySideRenderer = new SideBySideRenderer(hoganUtils, { matching: LineMatchingType.LINES }); const html = sideBySideRenderer.render(exampleJson); expect(html).toMatchInlineSnapshot(` "
sample CHANGED
@@ -1 +1 @@
1
- test
1
+ test1r
" `); }); it('should work for files without blocks', () => { const exampleJson: DiffFile[] = [ { blocks: [], oldName: 'sample', language: 'js', newName: 'sample', isCombined: false, addedLines: 0, deletedLines: 0, isGitDiff: false, }, ]; const hoganUtils = new HoganJsUtils({}); const sideBySideRenderer = new SideBySideRenderer(hoganUtils, {}); const html = sideBySideRenderer.render(exampleJson); expect(html).toMatchInlineSnapshot(` "
sample CHANGED
File without changes
" `); }); }); describe('processLines', () => { it('should process file lines', () => { const oldLines: DiffLine[] = [ { content: '-test', type: LineType.DELETE, oldNumber: 1, newNumber: undefined, }, ]; const newLines: DiffLine[] = [ { content: '+test1r', type: LineType.INSERT, oldNumber: undefined, newNumber: 1, }, ]; const hoganUtils = new HoganJsUtils({}); const sideBySideRenderer = new SideBySideRenderer(hoganUtils, { matching: LineMatchingType.LINES }); const html = sideBySideRenderer.processChangedLines(false, oldLines, newLines); expect(html).toMatchInlineSnapshot(` Object { "left": " 1
- test
", "right": " 1
+ test1r
", } `); }); }); });