diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-06-06 19:24:12 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-06-06 19:24:12 +0200 |
commit | 357e1e8e96174e1b0d74c3c952c1d83f7c04982f (patch) | |
tree | 977ac85460d8fc281cb4f02eb9261903b5cf3723 | |
parent | 7a89f9869a08b9427df0c28f6594a7ec9da7c0d7 (diff) | |
download | gitbook-357e1e8e96174e1b0d74c3c952c1d83f7c04982f.zip gitbook-357e1e8e96174e1b0d74c3c952c1d83f7c04982f.tar.gz gitbook-357e1e8e96174e1b0d74c3c952c1d83f7c04982f.tar.bz2 |
Add unit tests for postRender
-rw-r--r-- | lib/models/templateBlock.js | 71 | ||||
-rw-r--r-- | lib/models/templateOutput.js | 22 | ||||
-rw-r--r-- | lib/templating/__tests__/postRender.js | 51 | ||||
-rw-r--r-- | lib/templating/postRender.js | 28 | ||||
-rw-r--r-- | lib/templating/render.js | 16 |
5 files changed, 115 insertions, 73 deletions
diff --git a/lib/models/templateBlock.js b/lib/models/templateBlock.js index 36f7c5b..458f084 100644 --- a/lib/models/templateBlock.js +++ b/lib/models/templateBlock.js @@ -43,10 +43,9 @@ TemplateBlock.prototype.getBlocks = function() { /** - Return shortcuts associated with this block or undefined - - @return {TemplateShortcut|undefined} -*/ + * Return shortcuts associated with this block or undefined + * @return {TemplateShortcut|undefined} + */ TemplateBlock.prototype.getShortcuts = function() { var shortcuts = this.get('shortcuts'); if (shortcuts.size === 0) { @@ -57,19 +56,17 @@ TemplateBlock.prototype.getShortcuts = function() { }; /** - Return name for the nunjucks extension - - @return {String} -*/ + * Return name for the nunjucks extension + * @return {String} + */ TemplateBlock.prototype.getExtensionName = function() { return 'Block' + this.getName() + 'Extension'; }; /** - Return a nunjucks extension to represents this block - - @return {Nunjucks.Extension} -*/ + * Return a nunjucks extension to represents this block + * @return {Nunjucks.Extension} + */ TemplateBlock.prototype.toNunjucksExt = function(mainContext, blocksOutput) { blocksOutput = blocksOutput || {}; @@ -192,11 +189,11 @@ TemplateBlock.prototype.toNunjucksExt = function(mainContext, blocksOutput) { }; /** - Apply a block to a content - @param {Object} inner - @param {Object} context - @return {Promise<String>|String} -*/ + * Apply a block to a content + * @param {Object} inner + * @param {Object} context + * @return {Promise<String>|String} + */ TemplateBlock.prototype.applyBlock = function(inner, context) { var processFn = this.getProcess(); @@ -215,11 +212,10 @@ TemplateBlock.prototype.applyBlock = function(inner, context) { }; /** - Normalize result from a block process function - - @param {Object|String} result - @return {Object} -*/ + * Normalize result from a block process function + * @param {Object|String} result + * @return {Object} + */ TemplateBlock.prototype.normalizeBlockResult = function(result) { if (is.string(result)) { result = { body: result }; @@ -230,12 +226,11 @@ TemplateBlock.prototype.normalizeBlockResult = function(result) { }; /** - Convert a block result to HTML - - @param {Object} result - @param {Object} blocksOutput: stored post processing blocks in this object - @return {String} -*/ + * Convert a block result to HTML + * @param {Object} result + * @param {Object} blocksOutput: stored post processing blocks in this object + * @return {String} + */ TemplateBlock.prototype.blockResultToHtml = function(result, blocksOutput) { var indexedKey; var toIndex = (!result.parse) || (result.post !== undefined); @@ -256,12 +251,11 @@ TemplateBlock.prototype.blockResultToHtml = function(result, blocksOutput) { }; /** - Create a template block from a function or an object - - @param {String} blockName - @param {Object} block - @return {TemplateBlock} -*/ + * Create a template block from a function or an object + * @param {String} blockName + * @param {Object} block + * @return {TemplateBlock} + */ TemplateBlock.create = function(blockName, block) { if (is.fn(block)) { block = new Immutable.Map({ @@ -275,11 +269,10 @@ TemplateBlock.create = function(blockName, block) { }; /** - Extract kwargs from an arguments array - - @param {Array} args - @return {Object} -*/ + * Extract kwargs from an arguments array + * @param {Array} args + * @return {Object} + */ function extractKwargs(args) { var last = args[args.length - 1]; return (is.object(last) && last.__keywords)? args.pop() : {}; diff --git a/lib/models/templateOutput.js b/lib/models/templateOutput.js index cd65a05..ae63c06 100644 --- a/lib/models/templateOutput.js +++ b/lib/models/templateOutput.js @@ -17,23 +17,21 @@ TemplateOutput.prototype.getBlocks = function() { }; /** - Update content of this output - - @param {String} content - @return {TemplateContent} -*/ + * Update content of this output + * @param {String} content + * @return {TemplateContent} + */ TemplateOutput.prototype.setContent = function(content) { return this.set('content', content); }; /** - Create a TemplateOutput from a text content - and an object containing block definition - - @param {String} content - @param {Object} blocks - @return {TemplateOutput} -*/ + * Create a TemplateOutput from a text content + * and an object containing block definition + * @param {String} content + * @param {Object} blocks + * @return {TemplateOutput} + */ TemplateOutput.create = function(content, blocks) { return new TemplateOutput({ content: content, diff --git a/lib/templating/__tests__/postRender.js b/lib/templating/__tests__/postRender.js new file mode 100644 index 0000000..131e29b --- /dev/null +++ b/lib/templating/__tests__/postRender.js @@ -0,0 +1,51 @@ +var TemplateEngine = require('../../models/templateEngine'); +var TemplateBlock = require('../../models/templateBlock'); + +var renderTemplate = require('../render'); +var postRender = require('../postRender'); + +describe('postRender', function() { + var testPost; + var engine = TemplateEngine.create({ + blocks: [ + TemplateBlock.create('lower', function(blk) { + return blk.body.toLowerCase(); + }), + TemplateBlock.create('prefix', function(blk) { + return { + body: '_' + blk.body + '_', + post: function() { + testPost = true; + } + }; + }) + ] + }); + + it('should correctly replace block', function() { + return renderTemplate(engine, 'README.md', 'Hello {% lower %}Samy{% endlower %}') + .then(function(output) { + expect(output.getContent()).toMatch(/Hello \{\{\-([\S]+)\-\}\}/); + expect(output.getBlocks().size).toBe(1); + + return postRender(engine, output); + }) + .then(function(result) { + expect(result).toBe('Hello samy'); + }); + }); + + it('should correctly replace blocks', function() { + return renderTemplate(engine, 'README.md', 'Hello {% lower %}Samy{% endlower %}{% prefix %}Pesse{% endprefix %}') + .then(function(output) { + expect(output.getContent()).toMatch(/Hello \{\{\-([\S]+)\-\}\}\{\{\-([\S]+)\-\}\}/); + expect(output.getBlocks().size).toBe(2); + return postRender(engine, output); + }) + .then(function(result) { + expect(result).toBe('Hello samy_Pesse_'); + expect(testPost).toBe(true); + }); + }); + +}); diff --git a/lib/templating/postRender.js b/lib/templating/postRender.js index ec67696..f464f86 100644 --- a/lib/templating/postRender.js +++ b/lib/templating/postRender.js @@ -2,12 +2,12 @@ var Promise = require('../utils/promise'); /** - Replace position markers of blocks by body after processing - This is done to avoid that markdown/asciidoc processer parse the block content - - @param {String} content - @return {Object} {blocks: Set, content: String} -*/ + * Replace position markers of blocks by body after processing + * This is done to avoid that markdown/asciidoc processer parse the block content + * + * @param {String} content + * @return {Object} {blocks: Set, content: String} + */ function replaceBlocks(content, blocks) { var newContent = content.replace(/\{\{\-\%([\s\S]+?)\%\-\}\}/g, function(match, key) { var replacedWith = match; @@ -24,14 +24,14 @@ function replaceBlocks(content, blocks) { } /** - Post render a template: - - Execute "post" for blocks - - Replace block content - - @param {TemplateEngine} engine - @param {TemplateOutput} content - @return {Promise<String>} -*/ + * Post render a template: + * - Execute "post" for blocks + * - Replace block content + * + * @param {TemplateEngine} engine + * @param {TemplateOutput} content + * @return {Promise<String>} + */ function postRender(engine, output) { var content = output.getContent(); var blocks = output.getBlocks(); diff --git a/lib/templating/render.js b/lib/templating/render.js index 68396f7..1a8b0cd 100644 --- a/lib/templating/render.js +++ b/lib/templating/render.js @@ -4,14 +4,14 @@ var TemplateOutput = require('../models/templateOutput'); var replaceShortcuts = require('./replaceShortcuts'); /** - Render a template - - @param {TemplateEngine} engine - @param {String} filePath: absolute path for the loader - @param {String} content - @param {Object} context - @return {Promise<TemplateOutput>} -*/ + * Render a template + * + * @param {TemplateEngine} engine + * @param {String} filePath: absolute path for the loader + * @param {String} content + * @param {Object} context (optional) + * @return {Promise<TemplateOutput>} + */ function renderTemplate(engine, filePath, content, context) { context = context || {}; |