const SideBySidePrinter = require("../side-by-side-printer.js").SideBySidePrinter; describe("SideBySidePrinter", function() { describe("generateEmptyDiff", function() { it("should return an empty diff", function() { const sideBySidePrinter = new SideBySidePrinter({}); const fileHtml = sideBySidePrinter.generateEmptyDiff(); const expectedRight = ""; const expectedLeft = "\n" + ' \n' + '
\n' + " File without changes\n" + "
\n" + " \n" + ""; expect(expectedRight).toEqual(fileHtml.right); expect(expectedLeft).toEqual(fileHtml.left); }); }); describe("generateSideBySideFileHtml", function() { it("should generate lines with the right prefixes", function() { const sideBySidePrinter = new SideBySidePrinter({}); const file = { blocks: [ { lines: [ { content: " context", type: "d2h-cntx", oldNumber: 19, newNumber: 19 }, { content: "-removed", type: "d2h-del", oldNumber: 20, newNumber: null }, { content: "+added", type: "d2h-ins", oldNumber: null, newNumber: 20 }, { content: "+another added", type: "d2h-ins", oldNumber: null, newNumber: 21 } ], oldStartLine: "19", newStartLine: "19", header: "@@ -19,7 +19,7 @@" } ], deletedLines: 1, addedLines: 1, checksumBefore: "fc56817", checksumAfter: "e8e7e49", mode: "100644", oldName: "coverage.init", language: "init", newName: "coverage.init", isCombined: false }; const fileHtml = sideBySidePrinter.generateSideBySideFileHtml(file); const expectedLeft = "\n" + ' \n' + ' \n' + '
@@ -19,7 +19,7 @@
\n' + " \n" + "\n" + ' \n' + " 19\n" + " \n" + ' \n' + '
\n' + '  \n' + ' context\n' + "
\n" + " \n" + "\n" + ' \n' + " 20\n" + " \n" + ' \n' + '
\n' + ' -\n' + ' removed\n' + "
\n" + " \n" + "\n" + ' \n' + " " + "\n" + " \n" + ' \n' + '
\n' + '  \n' + '  \n' + "
\n" + " \n" + ""; const expectedRight = "\n" + ' \n' + ' \n' + '
\n' + " \n" + "\n" + ' \n' + " 19\n" + " \n" + ' \n' + '
\n' + '  \n' + ' context\n' + "
\n" + " \n" + "\n" + ' \n' + " 20\n" + " \n" + ' \n' + '
\n' + ' +\n' + ' added\n' + "
\n" + " \n" + "\n" + ' \n' + " 21\n" + " \n" + ' \n' + '
\n' + ' +\n' + ' another added\n' + "
\n" + " \n" + ""; expect(expectedLeft).toEqual(fileHtml.left); expect(expectedRight).toEqual(fileHtml.right); }); }); describe("generateSingleLineHtml", function() { it("should work for insertions", function() { const diffParser = require("../diff-parser.js").DiffParser; const sideBySidePrinter = new SideBySidePrinter({}); const fileHtml = sideBySidePrinter.generateSingleLineHtml(false, diffParser.LINE_TYPE.INSERTS, 30, "test", "+"); const expected = "\n" + ' \n' + " 30\n" + " \n" + ' \n' + '
\n' + ' +\n' + ' test\n' + "
\n" + " \n" + ""; expect(expected).toEqual(fileHtml); }); it("should work for deletions", function() { const diffParser = require("../diff-parser.js").DiffParser; const sideBySidePrinter = new SideBySidePrinter({}); const fileHtml = sideBySidePrinter.generateSingleLineHtml(false, diffParser.LINE_TYPE.DELETES, 30, "test", "-"); const expected = "\n" + ' \n' + " 30\n" + " \n" + ' \n' + '
\n' + ' -\n' + ' test\n' + "
\n" + " \n" + ""; expect(expected).toEqual(fileHtml); }); }); describe("generateSideBySideJsonHtml", function() { it("should work for list of files", function() { const exampleJson = [ { blocks: [ { lines: [ { content: "-test", type: "d2h-del", oldNumber: 1, newNumber: null }, { content: "+test1r", type: "d2h-ins", oldNumber: null, newNumber: 1 } ], oldStartLine: "1", oldStartLine2: null, newStartLine: "1", header: "@@ -1 +1 @@" } ], deletedLines: 1, addedLines: 1, checksumBefore: "0000001", checksumAfter: "0ddf2ba", oldName: "sample", language: undefined, newName: "sample", isCombined: false } ]; const sideBySidePrinter = new SideBySidePrinter({ matching: "lines" }); const html = sideBySidePrinter.generateSideBySideJsonHtml(exampleJson); const expected = '
\n' + '
\n' + '
\n' + ' \n' + ' sample\n' + ' CHANGED\n' + "
\n" + '
\n' + '
\n' + '
\n' + ' \n' + ' \n' + " \n" + ' \n' + ' \n" + "\n" + ' \n" + ' \n" + "\n" + " \n" + "
\n' + '
@@ -1 +1 @@
\n' + "
\n' + " 1\n" + " \n' + '
\n' + ' -\n' + ' test\n' + "
\n" + "
\n" + "
\n" + "
\n" + '
\n' + '
\n' + ' \n' + ' \n' + " \n" + ' \n' + ' \n" + "\n" + ' \n" + ' \n" + "\n" + " \n" + "
\n' + '
\n' + "
\n' + " 1\n" + " \n' + '
\n' + ' +\n' + ' test1r\n' + "
\n" + "
\n" + "
\n" + "
\n" + "
\n" + "
\n" + "
"; expect(expected).toEqual(html); }); it("should work for files without blocks", function() { const exampleJson = [ { blocks: [], oldName: "sample", language: "js", newName: "sample", isCombined: false } ]; const sideBySidePrinter = new SideBySidePrinter(); const html = sideBySidePrinter.generateSideBySideJsonHtml(exampleJson); const expected = '
\n' + '
\n' + '
\n' + ' \n' + ' sample\n' + ' CHANGED\n' + "
\n" + '
\n' + '
\n' + '
\n' + ' \n' + ' \n' + " \n" + ' \n" + "\n" + " \n" + "
\n' + '
\n' + " File without changes\n" + "
\n" + "
\n" + "
\n" + "
\n" + '
\n' + '
\n' + ' \n' + ' \n' + " \n" + " \n" + "
\n" + "
\n" + "
\n" + "
\n" + "
\n" + "
"; expect(expected).toEqual(html); }); }); describe("processLines", function() { it("should process file lines", function() { const oldLines = [ { content: "-test", type: "d2h-del", oldNumber: 1, newNumber: null } ]; const newLines = [ { content: "+test1r", type: "d2h-ins", oldNumber: null, newNumber: 1 } ]; const sideBySidePrinter = new SideBySidePrinter({ matching: "lines" }); const html = sideBySidePrinter.processLines(false, oldLines, newLines); const expectedLeft = "\n" + ' \n' + " 1\n" + " \n" + ' \n' + '
\n' + ' -\n' + ' test\n' + "
\n" + " \n" + ""; const expectedRight = "\n" + ' \n' + " 1\n" + " \n" + ' \n' + '
\n' + ' +\n' + ' test1r\n' + "
\n" + " \n" + ""; expect(expectedLeft).toEqual(html.left); expect(expectedRight).toEqual(html.right); }); }); });