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 | })();
|