require('./helper'); var renderHelper = require('./render-helper'); var tests = renderHelper.getTests(); describe('Mustache.render', function () { beforeEach(function () { Mustache.clearCache(); }); it('requires template to be a string', function () { assert.throws(function () { Mustache.render(['dummy template'], ['foo', 'bar']); }, TypeError, 'Invalid template! Template should be a "string" but ' + '"array" was given as the first argument ' + 'for mustache#render(template, view, partials)'); }); describe('preserve indentation when using partials', function() { it ('should preserve indentation with whitespaces', function() { var template = 'a\n {{>p1}}'; var renderResult = Mustache.render(template, {}, {p1: 'l1\nl2'}); assert.equal(renderResult, 'a\n l1\n l2'); }); }); describe('custom tags', function () { it('uses tags argument instead of Mustache.tags when given', function () { var template = '<>bar{{placeholder}}'; Mustache.tags = ['{{', '}}']; assert.equal(Mustache.render(template, { placeholder: 'foo' }, {}, ['<<', '>>']), 'foobar{{placeholder}}'); }); it('uses tags argument instead of Mustache.tags when given, even when it previous rendered the template using Mustache.tags', function () { var template = '((placeholder))bar{{placeholder}}'; Mustache.tags = ['{{', '}}']; Mustache.render(template, { placeholder: 'foo' }); assert.equal(Mustache.render(template, { placeholder: 'foo' }, {}, ['((', '))']), 'foobar{{placeholder}}'); }); it('uses tags argument instead of Mustache.tags when given, even when it previous rendered the template using different tags', function () { var template = '[[placeholder]]bar<>'; Mustache.render(template, { placeholder: 'foo' }, {}, ['<<', '>>']); assert.equal(Mustache.render(template, { placeholder: 'foo' }, {}, ['[[', ']]']), 'foobar<>'); }); it('does not mutate Mustache.tags when given tags argument', function() { var correctMustacheTags = ['{{', '}}']; Mustache.tags = correctMustacheTags; Mustache.render('((placeholder))', { placeholder: 'foo' }, {}, ['((', '))']); assert.equal(Mustache.tags, correctMustacheTags); assert.deepEqual(Mustache.tags, ['{{', '}}']); }); it('uses provided tags when rendering partials', function () { var output = Mustache.render('<%> partial %>', { name: 'Santa Claus' }, { partial: '<% name %>' }, ['<%', '%>']); assert.equal(output, 'Santa Claus'); }) }) tests.forEach(function (test) { var view = eval(test.view); it('knows how to render ' + test.name, function () { var output; if (test.partial) { output = Mustache.render(test.template, view, { partial: test.partial }); } else { output = Mustache.render(test.template, view); } output.should.equal(test.expect); }); }); });