From e35b80a478531a607f934bcebb642ee10dbdbe44 Mon Sep 17 00:00:00 2001 From: Rodrigo Fernandes Date: Mon, 25 Apr 2016 16:51:27 +0100 Subject: [PATCH] Add more tests for line by line diff generation --- package.json | 4 +- src/diff-parser.js | 4 +- test/line-by-line-tests.js | 290 ++++++++++++++++++++++++++++++++++++- 3 files changed, 291 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index f97cd02..4ecc558 100644 --- a/package.json +++ b/package.json @@ -38,9 +38,9 @@ "scripts": { "release": "./scripts/release.sh", "templates": "./scripts/hulk.js --wrapper node --variable 'browserTemplates' ./src/templates/*.mustache > ./src/templates/diff2html-templates.js", - "test": "istanbul cover -x '**/templates/**' -x 'rematch.js' _mocha -- -u exports -R spec ./test/**/*", + "test": "istanbul cover _mocha -- -u exports -R spec ./test/**/*", "style": "jscs src test", - "codacy": "istanbul cover -x '**/templates/**' -x 'rematch.js' _mocha -- -u exports -R spec ./test/**/* && cat ./coverage/lcov.info | codacy-coverage" + "codacy": "istanbul cover _mocha -- -u exports -R spec ./test/**/* && cat ./coverage/lcov.info | codacy-coverage" }, "main": "./src/diff2html.js", "browser": { diff --git a/src/diff-parser.js b/src/diff-parser.js index 0ffc395..f42aed4 100644 --- a/src/diff-parser.js +++ b/src/diff-parser.js @@ -23,7 +23,9 @@ DiffParser.prototype.LINE_TYPE = LINE_TYPE; - DiffParser.prototype.generateDiffJson = function(diffInput, config) { + DiffParser.prototype.generateDiffJson = function(diffInput, configuration) { + var config = configuration || {}; + var files = []; var currentFile = null; var currentBlock = null; diff --git a/test/line-by-line-tests.js b/test/line-by-line-tests.js index 5c40bc7..e7e8a64 100644 --- a/test/line-by-line-tests.js +++ b/test/line-by-line-tests.js @@ -20,6 +20,7 @@ describe('LineByLinePrinter', function() { assert.equal(expected, fileHtml); }); }); + describe('makeLineHtml', function() { it('should work for insertions', function() { @@ -43,8 +44,8 @@ describe('LineByLinePrinter', function() { assert.equal(expected, fileHtml); }); - it('should work for deletions', function() { + it('should work for deletions', function() { var diffParser = require('../src/diff-parser.js').DiffParser; var lineByLinePrinter = new LineByLinePrinter({}); var fileHtml = lineByLinePrinter.makeLineHtml( @@ -65,8 +66,8 @@ describe('LineByLinePrinter', function() { assert.equal(expected, fileHtml); }); - it('should convert indents into non breakin spaces (2 white spaces)', function() { + it('should convert indents into non breakin spaces (2 white spaces)', function() { var diffParser = require('../src/diff-parser.js').DiffParser; var lineByLinePrinter = new LineByLinePrinter({}); var fileHtml = lineByLinePrinter.makeLineHtml( @@ -87,8 +88,8 @@ describe('LineByLinePrinter', function() { assert.equal(expected, fileHtml); }); - it('should convert indents into non breakin spaces (4 white spaces)', function() { + it('should convert indents into non breakin spaces (4 white spaces)', function() { var diffParser = require('../src/diff-parser.js').DiffParser; var lineByLinePrinter = new LineByLinePrinter({}); var fileHtml = lineByLinePrinter.makeLineHtml( @@ -109,8 +110,8 @@ describe('LineByLinePrinter', function() { assert.equal(expected, fileHtml); }); - it('should convert indents into non breakin spaces (one tab)', function() { + it('should convert indents into non breakin spaces (one tab)', function() { var diffParser = require('../src/diff-parser.js').DiffParser; var lineByLinePrinter = new LineByLinePrinter({}); var fileHtml = lineByLinePrinter.makeLineHtml( @@ -132,4 +133,285 @@ describe('LineByLinePrinter', function() { assert.equal(expected, fileHtml); }); }); + + describe('makeFileDiffHtml', function() { + it('should work for simple file', function() { + var lineByLinePrinter = new LineByLinePrinter({}); + + var file = { + addedLines: 12, + deletedLines: 41, + language: 'js', + oldName: 'my/file/name.js', + newName: 'my/file/name.js' + }; + var diffs = 'Random Html'; + + var fileHtml = lineByLinePrinter.makeFileDiffHtml(file, diffs); + + var expected = '
\n' + + '
\n' + + ' \n' + + ' \n' + + ' +12\n' + + ' \n' + + ' \n' + + ' -41\n' + + ' \n' + + ' \n' + + ' \n' + + '  my/file/name.js\n' + + ' \n' + + '
\n' + + '
\n' + + '
\n' + + ' \n' + + ' \n' + + ' Random Html\n' + + ' \n' + + '
\n' + + '
\n' + + '
\n' + + '
'; + + assert.equal(expected, fileHtml); + }); + }); + + describe('makeLineByLineHtmlWrapper', function() { + it('should work for simple content', function() { + var lineByLinePrinter = new LineByLinePrinter({}); + var fileHtml = lineByLinePrinter.makeLineByLineHtmlWrapper('Random Html'); + + var expected = + '
\n' + + ' Random Html\n' + + '
'; + + assert.equal(expected, fileHtml); + }); + }); + + describe('generateLineByLineJsonHtml', 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 lineByLinePrinter = new LineByLinePrinter({matching: 'lines'}); + var html = lineByLinePrinter.generateLineByLineJsonHtml(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' + + '
\n' + + '
\n' + + '
\n' + + '
1
\n' + + '
\n' + + '
\n' + + '
\n' + + ' -\n' + + ' test\n' + + '
\n' + + '
\n' + + '
\n' + + '
1
\n' + + '
\n' + + '
\n' + + ' +\n' + + ' test1r\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
\n' + + '
'; + + assert.equal(expected, html); + }); + }); + + describe('makeColumnLineNumberHtml', function() { + it('should work for simple block header', function() { + var lineByLinePrinter = new LineByLinePrinter({}); + var html = lineByLinePrinter.makeColumnLineNumberHtml({ + header: 'So much html' + }); + var expected = + '\n' + + ' \n' + + ' \n' + + '
\n' + + ' \n' + + ''; + + assert.equal(expected, html); + }); + }); + + describe('_processLines', function() { + it('should work for simple block header', function() { + var lineByLinePrinter = new LineByLinePrinter({}); + var oldLines = [{ + content: '-test', + type: 'd2h-del', + oldNumber: 1, + newNumber: null + }]; + var newLines = [{ + content: '+test1r', + type: 'd2h-ins', + oldNumber: null, + newNumber: 1 + }]; + + var html = lineByLinePrinter._processLines(oldLines, newLines); + + var expected = + '\n' + + ' \n' + + '
1
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + ' -test\n' + + '
\n' + + ' \n' + + '\n' + + ' \n' + + '
\n' + + '
1
\n' + + ' \n' + + ' \n' + + '
\n' + + ' +test1r\n' + + '
\n' + + ' \n' + + ''; + + assert.equal(expected, html); + }); + }); + + describe('_generateFileHtml', function() { + it('should work for simple file', function() { + var lineByLinePrinter = new LineByLinePrinter({}); + var file = { + 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 html = lineByLinePrinter._generateFileHtml(file); + + var expected = + '\n' + + ' \n' + + ' \n' + + '
\n' + + ' \n' + + '\n' + + ' \n' + + '
1
\n' + + '
\n' + + ' \n' + + ' \n' + + '
\n' + + ' -\n' + + ' test\n' + + '
\n' + + ' \n' + + '\n' + + ' \n' + + '
\n' + + '
1
\n' + + ' \n' + + ' \n' + + '
\n' + + ' +\n' + + ' test1r\n' + + '
\n' + + ' \n' + + ''; + + assert.equal(expected, html); + }); + }); });