UNPKG

2.86 kBJavaScriptView Raw
1(function() {
2 var Environment, Template, loader, templatesPath, expect;
3
4 if(typeof require != 'undefined') {
5 Environment = require('../src/environment').Environment;
6 Template = require('../src/environment').Template;
7 loader = require('../src/node-loaders').FileSystemLoader;
8 templatesPath = 'tests/templates';
9 expect = require('expect.js');
10 }
11 else {
12 Environment = nunjucks.Environment;
13 Template = nunjucks.Template;
14 loader = nunjucks.WebLoader;
15 templatesPath = '../templates';
16 expect = window.expect;
17 }
18
19 var numAsyncs;
20 var doneAsyncs;
21 var doneHandler;
22
23 beforeEach(function() {
24 doneAsyncs = 0;
25 numAsyncs = 0;
26 doneHandler = null;
27 });
28
29 function equal(str, ctx, str2) {
30 if(typeof ctx === 'string') {
31 str2 = ctx;
32 ctx = null;
33 }
34
35 render(str, ctx, {}, function(err, res) {
36 if(err) {
37 throw err;
38 }
39
40 expect(res).to.be(str2);
41 });
42 }
43
44 function finish(done) {
45 if(numAsyncs > 0) {
46 doneHandler = done;
47 }
48 else {
49 done();
50 }
51 }
52
53 function render(str, ctx, opts, cb) {
54 if(!opts) {
55 cb = ctx;
56 ctx = null;
57 opts = null;
58 }
59 else if(!cb) {
60 cb = opts;
61 opts = null;
62 }
63
64 opts = opts || {};
65 opts.dev = true;
66 var e = new Environment(new loader(templatesPath, true), opts);
67
68 if(opts.filters) {
69 for(var name in opts.filters) {
70 e.addFilter(name, opts.filters[name]);
71 }
72 }
73
74 if(opts.asyncFilters) {
75 for(var name in opts.asyncFilters) {
76 e.addFilter(name, opts.asyncFilters[name], true);
77 }
78 }
79
80 if(opts.extensions) {
81 for(var name in opts.extensions) {
82 e.addExtension(name, opts.extensions[name]);
83 }
84 }
85
86 ctx = ctx || {};
87 numAsyncs++;
88 var t = new Template(str, e);
89
90 return t.render(ctx, function(err, res) {
91 setTimeout(function() {
92 if(err && !opts.noThrow) {
93 throw err;
94 }
95
96 cb(err, res);
97
98 doneAsyncs++;
99
100 if(numAsyncs == doneAsyncs && doneHandler) {
101 doneHandler();
102 }
103 }, 0);
104 });
105 }
106
107 if(typeof module != 'undefined') {
108 module.exports.render = render;
109 module.exports.equal = equal;
110 module.exports.finish = finish;
111 }
112 else {
113 window.util = {
114 render: render,
115 equal: equal,
116 finish: finish
117 };
118 }
119})();