var assert = require('assert');
var SideBySidePrinter = require('../src/side-by-side-printer.js').SideBySidePrinter;
describe('SideBySidePrinter', function() {
describe('generateEmptyDiff', function() {
it('should return an empty diff', function() {
var sideBySidePrinter = new SideBySidePrinter({});
var fileHtml = sideBySidePrinter.generateEmptyDiff();
var expectedRight = '';
var expectedLeft = '
\n' +
' | \n' +
' \n' +
' File without changes\n' +
' \n' +
' | \n' +
'
\n';
assert.equal(expectedRight, fileHtml.right);
assert.equal(expectedLeft, fileHtml.left);
});
});
describe('generateSideBySideFileHtml', function() {
it('should generate lines with the right prefixes', function() {
var sideBySidePrinter = new SideBySidePrinter({});
var 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
};
var fileHtml = sideBySidePrinter.generateSideBySideFileHtml(file);
var 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' +
'
';
var 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' +
'
';
assert.equal(expectedLeft, fileHtml.left);
assert.equal(expectedRight, fileHtml.right);
});
});
describe('generateSingleLineHtml', function() {
it('should work for insertions', function() {
var diffParser = require('../src/diff-parser.js').DiffParser;
var sideBySidePrinter = new SideBySidePrinter({});
var fileHtml = sideBySidePrinter.generateSingleLineHtml(
diffParser.LINE_TYPE.INSERTS, 30, 'test', '+');
var expected = '\n' +
' | \n' +
' 30\n' +
' | \n' +
' \n' +
' \n' +
' +\n' +
' test\n' +
' \n' +
' | \n' +
'
';
assert.equal(expected, fileHtml);
});
it('should work for deletions', function() {
var diffParser = require('../src/diff-parser.js').DiffParser;
var sideBySidePrinter = new SideBySidePrinter({});
var fileHtml = sideBySidePrinter.generateSingleLineHtml(
diffParser.LINE_TYPE.DELETES, 30, 'test', '-');
var expected = '\n' +
' | \n' +
' 30\n' +
' | \n' +
' \n' +
' \n' +
' -\n' +
' test\n' +
' \n' +
' | \n' +
'
';
assert.equal(expected, fileHtml);
});
});
describe('generateSideBySideJsonHtml', function() {
it('should work for list of files', function() {
var 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
}];
var sideBySidePrinter = new SideBySidePrinter({matching: 'lines'});
var html = sideBySidePrinter.generateSideBySideJsonHtml(exampleJson);
var 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' +
'
';
assert.equal(expected, html);
});
it('should work for files without blocks', function() {
var exampleJson = [{
blocks: [],
oldName: 'sample',
language: 'js',
newName: 'sample',
isCombined: false
}];
var sideBySidePrinter = new SideBySidePrinter();
var html = sideBySidePrinter.generateSideBySideJsonHtml(exampleJson);
var 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' +
'
\n' +
'
';
assert.equal(expected, html);
});
});
describe('processLines', function() {
it('should process file lines', function() {
var oldLines = [{
content: '-test',
type: 'd2h-del',
oldNumber: 1,
newNumber: null
}];
var newLines = [{
content: '+test1r',
type: 'd2h-ins',
oldNumber: null,
newNumber: 1
}];
var sideBySidePrinter = new SideBySidePrinter({matching: 'lines'});
var html = sideBySidePrinter.processLines(oldLines, newLines);
var expectedLeft =
'\n' +
' | \n' +
' 1\n' +
' | \n' +
' \n' +
' \n' +
' -\n' +
' test\n' +
' \n' +
' | \n' +
'
';
var expectedRight =
'\n' +
' | \n' +
' 1\n' +
' | \n' +
' \n' +
' \n' +
' +\n' +
' test1r\n' +
' \n' +
' | \n' +
'
';
assert.equal(expectedLeft, html.left);
assert.equal(expectedRight, html.right);
});
});
});