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
", } `); }); }); });