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' + ' ' + '
' + 'File without changes' + '
' + ' \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 }], "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 expectedRight = '' + ' ' + ' ' + '
' + ' ' + '' + '' + ' 19' + ' ' + '
' + ' ' + ' context' + '
' + ' ' + '' + '' + ' 20' + ' ' + '
' + ' +' + ' added' + '
' + ' ' + ''; var expectedLeft = '' + ' ' + ' ' + '
@@ -19,7 +19,7 @@
' + ' ' + '' + '' + ' 19' + ' ' + '
' + ' ' + ' context' + '
' + ' ' + '' + '' + ' 20' + ' ' + '
' + ' -' + ' removed' + '
' + ' ' + ''; var HTMLParser = require('fast-html-parser'); var prefixTag = '.d2h-code-line-prefix'; var parsedExpectedRight = HTMLParser.parse(expectedRight); var parsedFileRight = HTMLParser.parse(fileHtml.right); assert.equal(parsedExpectedRight.querySelectorAll(prefixTag).length > 0, true); assert.equal(parsedExpectedRight.querySelectorAll(prefixTag).length, parsedFileRight.querySelectorAll(prefixTag).length); var parsedExpectedLeft = HTMLParser.parse(expectedLeft); var parsedFileLeft = HTMLParser.parse(fileHtml.left); assert.equal(parsedExpectedLeft.querySelectorAll(prefixTag).length > 0, true); assert.equal(parsedExpectedLeft.querySelectorAll(prefixTag).length, parsedFileLeft.querySelectorAll(prefixTag).length); }); }); 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' + ' 30\n' + ' ' + '
+test
' + ' \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' + ' 30\n' + ' ' + '
-test
' + ' \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' + ' +1\n' + ' \n' + ' \n' + ' -1\n' + ' \n' + ' \n' + ' \n' + ' sample\n' + ' \n' + '
\n' + '
\n' + '
\n' + '
\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + '\n' + '\n' + ' \n' + ' \n' + ' \n' + ' \n' + '
\n' + '
@@ -1 +1 @@
\n' + '
1
-test
\n' + '
\n' + '
\n' + '
\n' + '
\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + '\n' + '\n' + ' \n' + ' \n' + ' \n' + ' \n' + '
\n' + '
\n' + '
1
+test1r
\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' + ' 1\n' + ' ' + '
' + '-' + 'test
' + ' \n' + ' \n'; var expectedRight = '\n' + ' 1\n' + ' ' + '
' + '+' + 'test1r' + '
' + ' \n' + ' \n'; assert.equal(expectedLeft, html.left); assert.equal(expectedRight, html.right); }); }); });