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' +
'
\n' +
'
\n' +
'
\n' +
' \n' +
" \n" +
' | \n' +
' \n' +
' @@ -1 +1 @@ \n' +
" | \n" +
"
\n" +
' | \n' +
" 1\n" +
" | \n" +
' \n' +
' \n' +
' -\n' +
' test\n' +
" \n" +
" | \n" +
"
\n" +
" \n" +
"
\n" +
"
\n" +
"
\n" +
'
\n' +
'
\n' +
'
\n' +
' \n' +
" \n" +
' | \n' +
' \n' +
' \n' +
" | \n" +
"
\n" +
' | \n' +
" 1\n" +
" | \n" +
' \n' +
' \n' +
' +\n' +
' test1r\n' +
" \n" +
" | \n" +
"
\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' +
'
\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" +
"
\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);
});
});
});