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();
const expectedRight = "";
const expectedLeft =
"
\n" +
' | \n' +
' \n' +
" File without changes\n" +
" \n" +
" | \n" +
"
";
expect(fileHtml.right).toEqual(expectedRight);
expect(fileHtml.left).toEqual(expectedLeft);
});
});
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);
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(fileHtml.left).toEqual(expectedLeft);
expect(fileHtml.right).toEqual(expectedRight);
});
});
describe("generateSingleLineHtml", () => {
it("should work for insertions", () => {
const hoganUtils = new HoganJsUtils({});
const sideBySideRenderer = new SideBySideRenderer(hoganUtils, {});
const fileHtml = sideBySideRenderer.generateSingleLineHtml(undefined, {
type: CSSLineClass.INSERTS,
prefix: "+",
content: "test",
number: 30
});
const expected = {
left:
"\n" +
' | \n' +
" \n" +
" | \n" +
' \n' +
' \n' +
" \n" +
" | \n" +
"
",
right:
"\n" +
' | \n' +
" 30\n" +
" | \n" +
' \n' +
' \n' +
' +\n' +
' test\n' +
" \n" +
" | \n" +
"
"
};
expect(fileHtml).toEqual(expected);
});
it("should work for deletions", () => {
const hoganUtils = new HoganJsUtils({});
const sideBySideRenderer = new SideBySideRenderer(hoganUtils, {});
const fileHtml = sideBySideRenderer.generateSingleLineHtml(
{
type: CSSLineClass.DELETES,
prefix: "-",
content: "test",
number: 30
},
undefined
);
const expected = {
left:
"\n" +
' | \n' +
" 30\n" +
" | \n" +
' \n' +
' \n' +
' -\n' +
' test\n' +
" \n" +
" | \n" +
"
",
right:
"\n" +
' | \n' +
" \n" +
" | \n" +
' \n' +
' \n' +
" \n" +
" | \n" +
"
"
};
expect(fileHtml).toEqual(expected);
});
});
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);
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(html).toEqual(expected);
});
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);
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(html).toEqual(expected);
});
});
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.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(html.left).toEqual(expectedLeft);
expect(html.right).toEqual(expectedRight);
});
});
});