From d9d7ab4ee59fad5c20e33cbf6125420fee5efffd Mon Sep 17 00:00:00 2001 From: Johan Preynat Date: Sat, 30 Apr 2016 17:03:19 +0200 Subject: [PATCH] lib/models/templateBlock.js: Add test file lib/models/__tests__/templateBlock.js --- lib/models/__tests__/templateBlock.js | 107 ++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 lib/models/__tests__/templateBlock.js diff --git a/lib/models/__tests__/templateBlock.js b/lib/models/__tests__/templateBlock.js new file mode 100644 index 000000000..9f0e9b778 --- /dev/null +++ b/lib/models/__tests__/templateBlock.js @@ -0,0 +1,107 @@ +var nunjucks = require('nunjucks'); +var Immutable = require('immutable'); +var Promise = require('../../utils/promise'); + +describe('TemplateBlock', function() { + var TemplateBlock = require('../templateBlock'); + var TemplateEngine = require('../templateEngine'); + + describe('create', function() { + pit('must initialize a simple TemplateBlock from a function', function() { + var templateBlock = TemplateBlock.create('sayhello', function(block) { + return '

Hello, World!

'; + }); + + // Check basic templateBlock properties + expect(templateBlock.getName()).toBe('sayhello'); + expect(templateBlock.getPost()).toBeNull(); + expect(templateBlock.getParse()).toBeTruthy(); + expect(templateBlock.getEndTag()).toBe('endsayhello'); + expect(templateBlock.getBlocks().size).toBe(0); + expect(templateBlock.getShortcuts().size).toBe(0); + expect(templateBlock.getExtensionName()).toBe('BlocksayhelloExtension'); + + // Check result of applying block + return Promise() + .then(function() { + return templateBlock.applyBlock(); + }) + .then(function(result) { + expect(result.name).toBe('sayhello'); + expect(result.body).toBe('

Hello, World!

'); + }); + }); + }); + + describe('toNunjucksExt()', function() { + pit('must create a valid nunjucks extension', function() { + var templateBlock = TemplateBlock.create('sayhello', function(block) { + return '

Hello, World!

'; + }); + + // Create a fresh Nunjucks environment + var env = new nunjucks.Environment(null, { autoescape: false }); + + // Add template block to environement + var Ext = templateBlock.toNunjucksExt(); + env.addExtension(templateBlock.getExtensionName(), new Ext()); + + // Render a template using the block + var src = '{% sayhello %}{% endsayhello %}'; + return Promise.nfcall(env.renderString.bind(env), src) + .then(function(res) { + expect(res).toBe('

Hello, World!

'); + }); + }); + + pit('must apply block arguments correctly', function() { + var templateBlock = TemplateBlock.create('sayhello', function(block) { + return '<'+block.kwargs.tag+'>Hello, '+block.kwargs.name+'!'; + }); + + // Create a fresh Nunjucks environment + var env = new nunjucks.Environment(null, { autoescape: false }); + + // Add template block to environement + var Ext = templateBlock.toNunjucksExt(); + env.addExtension(templateBlock.getExtensionName(), new Ext()); + + // Render a template using the block + var src = '{% sayhello name="Samy", tag="p" %}{% endsayhello %}'; + return Promise.nfcall(env.renderString.bind(env), src) + .then(function(res) { + expect(res).toBe('

Hello, Samy!

'); + }); + }); + + pit('must handle nested blocks', function() { + var templateBlock = new TemplateBlock({ + name: 'yoda', + blocks: Immutable.List(['start', 'end']), + process: function(block) { + var nested = {}; + + block.blocks.forEach(function(blk) { + nested[blk.name] = blk.body.trim(); + }); + + return '

'+nested.end+' '+nested.start+'

'; + } + }); + + // Create a fresh Nunjucks environment + var env = new nunjucks.Environment(null, { autoescape: false }); + + // Add template block to environement + var Ext = templateBlock.toNunjucksExt(); + env.addExtension(templateBlock.getExtensionName(), new Ext()); + + // Render a template using the block + var src = '{% yoda %}{% start %}this sentence should be{% end %}inverted{% endyoda %}'; + return Promise.nfcall(env.renderString.bind(env), src) + .then(function(res) { + expect(res).toBe('

inverted this sentence should be

'); + }); + }); + }); +}); \ No newline at end of file