Add more tests to hogan templates

This commit is contained in:
Rodrigo Fernandes 2016-04-25 17:53:54 +01:00
parent 67ba95e5df
commit 2463cb0270
No known key found for this signature in database
GPG key ID: 08E3C5F38969078E
5 changed files with 90 additions and 35 deletions

56
dist/diff2html.js vendored
View file

@ -2323,11 +2323,14 @@ process.umask = function() { return 0; };
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;
var oldLine = null;
var oldLine2 = null; // Used for combined diff
var newLine = null;
var saveBlock = function() {
@ -2367,22 +2370,41 @@ process.umask = function() { return 0; };
var values;
if (values = /^@@ -(\d+),\d+ \+(\d+),\d+ @@.*/.exec(line)) {
/**
* From Range:
* -<start line>[,<number of lines>]
*
* To Range:
* +<start line>[,<number of lines>]
*
* @@ from-file-range to-file-range @@
*
* @@@ from-file-range from-file-range to-file-range @@@
*
* number of lines is optional, if omited consider 0
*/
if (values = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(line)) {
currentFile.isCombined = false;
} else if (values = /^@@@ -(\d+),\d+ -\d+,\d+ \+(\d+),\d+ @@@.*/.exec(line)) {
oldLine = values[1];
newLine = values[2];
} else if (values = /^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(line)) {
currentFile.isCombined = true;
oldLine = values[1];
oldLine2 = values[2];
newLine = values[3];
} else {
values = [0, 0];
console.error("Failed to parse lines, starting in 0!");
oldLine = 0;
newLine = 0;
currentFile.isCombined = false;
}
oldLine = values[1];
newLine = values[2];
/* Create block metadata */
currentBlock = {};
currentBlock.lines = [];
currentBlock.oldStartLine = oldLine;
currentBlock.oldStartLine2 = oldLine2;
currentBlock.newStartLine = newLine;
currentBlock.header = line;
};
@ -2751,23 +2773,19 @@ process.umask = function() { return 0; };
var hogan = require('hogan.js');
var hoganTemplates;
var hoganTemplates = require('./templates/diff2html-templates.js');
var templatesPath = path.resolve(__dirname, 'templates');
var templatesCache = {};
function HoganJsUtils() {
try {
hoganTemplates = require('./templates/diff2html-templates.js');
} catch (_ignore) {
hoganTemplates = {};
}
}
HoganJsUtils.prototype.render = function(namespace, view, params) {
HoganJsUtils.prototype.render = function(namespace, view, params, configuration) {
var config = configuration || {};
var templateKey = this._templateKey(namespace, view);
var template = this._getTemplate(templateKey);
var template = this._getTemplate(templateKey, config);
if (template) {
return template.render(params);
}
@ -2775,8 +2793,12 @@ process.umask = function() { return 0; };
return null;
};
HoganJsUtils.prototype._getTemplate = function(templateKey) {
var template = this._readFromCache(templateKey);
HoganJsUtils.prototype._getTemplate = function(templateKey, config) {
var template;
if (!config.noCache) {
template = this._readFromCache(templateKey);
}
if (!template) {
template = this._loadTemplate(templateKey);

File diff suppressed because one or more lines are too long

View file

@ -18,7 +18,6 @@
<!-- diff2html -->
<link rel="stylesheet" type="text/css" href="../dist/diff2html.css">
<script type="text/javascript" src="../dist/diff2html-templates.js"></script>
<script type="text/javascript" src="../dist/diff2html.js"></script>
<script type="text/javascript" src="../dist/diff2html-ui.js"></script>
<!-- -->

View file

@ -12,23 +12,19 @@
var hogan = require('hogan.js');
var hoganTemplates;
var hoganTemplates = require('./templates/diff2html-templates.js');
var templatesPath = path.resolve(__dirname, 'templates');
var templatesCache = {};
function HoganJsUtils() {
try {
hoganTemplates = require('./templates/diff2html-templates.js');
} catch (_ignore) {
hoganTemplates = {};
}
}
HoganJsUtils.prototype.render = function(namespace, view, params) {
HoganJsUtils.prototype.render = function(namespace, view, params, configuration) {
var config = configuration || {};
var templateKey = this._templateKey(namespace, view);
var template = this._getTemplate(templateKey);
var template = this._getTemplate(templateKey, config);
if (template) {
return template.render(params);
}
@ -36,8 +32,12 @@
return null;
};
HoganJsUtils.prototype._getTemplate = function(templateKey) {
var template = this._readFromCache(templateKey);
HoganJsUtils.prototype._getTemplate = function(templateKey, config) {
var template;
if (!config.noCache) {
template = this._readFromCache(templateKey);
}
if (!template) {
template = this._loadTemplate(templateKey);
@ -48,11 +48,16 @@
HoganJsUtils.prototype._loadTemplate = function(templateKey) {
var template;
if (fs.readFileSync) {
var templatePath = path.join(templatesPath, templateKey);
var templateContent = fs.readFileSync(templatePath + '.mustache', 'utf8');
template = hogan.compile(templateContent);
templatesCache[templateKey] = template;
try {
if (fs.readFileSync) {
var templatePath = path.join(templatesPath, templateKey);
var templateContent = fs.readFileSync(templatePath + '.mustache', 'utf8');
template = hogan.compile(templateContent);
templatesCache[templateKey] = template;
}
} catch (e) {
console.error('Failed to read (template: ' + templateKey + ') from fs: ' + e.message);
}
return template;

29
test/hogan-cache-tests.js Normal file
View file

@ -0,0 +1,29 @@
var assert = require('assert');
var HoganJsUtils = require('../src/hoganjs-utils.js').HoganJsUtils;
describe('HoganJsUtils', function() {
describe('render', function() {
var emptyDiffHtml =
'<tr>\n' +
' <td class="">\n' +
' <div class="d2h-code-line ">\n' +
' File without changes\n' +
' </div>\n' +
' </td>\n' +
'</tr>';
it('should render view', function() {
var result = HoganJsUtils.render('line-by-line', 'empty-diff', {});
assert.equal(emptyDiffHtml, result);
});
it('should render view without cache', function() {
var result = HoganJsUtils.render('line-by-line', 'empty-diff', {}, {noCache: true});
assert.equal(emptyDiffHtml + '\n', result);
});
it('should return null if template is missing', function() {
var result = HoganJsUtils.render('line-by-line', 'missing-template', {}, {noCache: true});
assert.equal(null, result);
});
});
});