var assert = require('assert'); var Utils = require('../src/utils.js').Utils; var LineByLinePrinter = require('../src/line-by-line-printer.js').LineByLinePrinter; describe('LineByLinePrinter', function() { describe('_generateEmptyDiff', function() { it('should return an empty diff', function() { var lineByLinePrinter = new LineByLinePrinter({}); var fileHtml = lineByLinePrinter._generateEmptyDiff(); var expected = '\n' + ' \n' + '
\n' + ' File without changes\n' + '
\n' + ' \n' + ''; assert.equal(expected, fileHtml); }); }); describe('makeLineHtml', function() { it('should work for insertions', function() { var diffParser = require('../src/diff-parser.js').DiffParser; var lineByLinePrinter = new LineByLinePrinter({}); var fileHtml = lineByLinePrinter.makeLineHtml( diffParser.LINE_TYPE.INSERTS, '', 30, '+', 'test'); fileHtml = fileHtml.replace(/\n\n+/g, '\n'); var expected = '\n' + ' \n' + '
\n' + '
30
\n' + ' \n' + ' \n' + '
\n' + ' test\n' + ' +\n' + '
\n' + ' \n' + ''; assert.equal(expected, fileHtml); }); it('should work for deletions', function() { var diffParser = require('../src/diff-parser.js').DiffParser; var lineByLinePrinter = new LineByLinePrinter({}); var fileHtml = lineByLinePrinter.makeLineHtml( diffParser.LINE_TYPE.DELETES, 30, '', '-', 'test'); fileHtml = fileHtml.replace(/\n\n+/g, '\n'); var expected = '\n' + ' \n' + '
30
\n' + '
\n' + ' \n' + ' \n' + '
\n' + ' test\n' + ' -\n' + '
\n' + ' \n' + ''; assert.equal(expected, fileHtml); }); 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( diffParser.LINE_TYPE.INSERTS, '', 30, '+', ' test'); fileHtml = fileHtml.replace(/\n\n+/g, '\n'); var expected = '\n' + ' \n' + '
\n' + '
30
\n' + ' \n' + ' \n' + '
\n' + '   test\n' + ' +\n' + '
\n' + ' \n' + ''; assert.equal(expected, fileHtml); }); 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( diffParser.LINE_TYPE.INSERTS, '', 30, '+', ' test'); fileHtml = fileHtml.replace(/\n\n+/g, '\n'); var expected = '\n' + ' \n' + '
\n' + '
30
\n' + ' \n' + ' \n' + '
\n' + '     test\n' + ' +\n' + '
\n' + ' \n' + ''; assert.equal(expected, fileHtml); }); 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( diffParser.LINE_TYPE.INSERTS, '', 30, '+', Utils.escape('\ttest')); fileHtml = fileHtml.replace(/\n\n+/g, '\n'); var expected = '\n' + ' \n' + '
\n' + '
30
\n' + ' \n' + ' \n' + '
\n' + '     test\n' + ' +\n' + '
\n' + ' \n' + ''; 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); }); }); });