express-hbs 2.5.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +50 -22
  3. package/lib/hbs.js +89 -91
  4. package/lib/resolver.js +10 -9
  5. package/package.json +32 -21
  6. package/.editorconfig +0 -8
  7. package/.eslintrc +0 -42
  8. package/.github/workflows/test.yml +0 -24
  9. package/.jsbeautifyrc +0 -17
  10. package/SECURITY.md +0 -9
  11. package/example/app-layoutsDir.js +0 -106
  12. package/example/app.js +0 -110
  13. package/example/public/css/style.css +0 -17
  14. package/example/views/fruits/details-layoutsDir.hbs +0 -3
  15. package/example/views/fruits/details.hbs +0 -4
  16. package/example/views/fruits/index-layoutsDir.hbs +0 -20
  17. package/example/views/fruits/index.hbs +0 -20
  18. package/example/views/index.hbs +0 -34
  19. package/example/views/layout/default.hbs +0 -13
  20. package/example/views/layout/fruit-details.hbs +0 -9
  21. package/example/views/layout/fruits.hbs +0 -6
  22. package/example/views/layout/html-struct.hbs +0 -21
  23. package/example/views/layout/veggie-details.hbs +0 -9
  24. package/example/views/layout/veggie.hbs +0 -6
  25. package/example/views/partials/scripts.hbs +0 -5
  26. package/example/views/partials/sub/comment.hbs +0 -1
  27. package/example/views/partials-other/other.hbs +0 -1
  28. package/example/views/replace.hbs +0 -6
  29. package/example/views/tos.txt +0 -3
  30. package/example/views/veggies/details.hbs +0 -1
  31. package/example/views/veggies.hbs +0 -17
  32. package/renovate.json +0 -6
  33. package/test/apps/async/index.js +0 -127
  34. package/test/apps/async/views/failer.hbs +0 -4
  35. package/test/apps/async/views/index.hbs +0 -16
  36. package/test/apps/async/views/layout.hbs +0 -1
  37. package/test/apps/i18n/index.js +0 -55
  38. package/test/apps/i18n/locales/en.json +0 -8
  39. package/test/apps/i18n/locales/fr.json +0 -8
  40. package/test/apps/i18n/views/index.hbs +0 -3
  41. package/test/asyncSpecs.js +0 -69
  42. package/test/cacheSpecs.js +0 -138
  43. package/test/customExtension.js +0 -36
  44. package/test/handlebarsSpecs.js +0 -95
  45. package/test/helperSpecs.js +0 -56
  46. package/test/helpers.js +0 -24
  47. package/test/i18nSpecs.js +0 -34
  48. package/test/issues/144/index.hbs +0 -1
  49. package/test/issues/153/index.hbs +0 -3
  50. package/test/issues/21/views/index.hbs +0 -1
  51. package/test/issues/21/views/layouts/default.hbs +0 -1
  52. package/test/issues/21/views/layouts/sub/child.hbs +0 -1
  53. package/test/issues/21/views/sub/relativeLayout.hbs +0 -1
  54. package/test/issues/21/views/sub/sub.hbs +0 -1
  55. package/test/issues/21/views/useLayoutInDir.hbs +0 -1
  56. package/test/issues/22/layout1.hbs +0 -1
  57. package/test/issues/22/layout2.hbs +0 -1
  58. package/test/issues/22/template.hbs +0 -1
  59. package/test/issues/23/empty.hbs +0 -0
  60. package/test/issues/23/emptyComment.hbs +0 -1
  61. package/test/issues/23/emptyPartial.hbs +0 -1
  62. package/test/issues/23/index.hbs +0 -4
  63. package/test/issues/23/layout.hbs +0 -1
  64. package/test/issues/23/partials/custom/comment-only.hbs +0 -1
  65. package/test/issues/23/partials/custom/empty.hbs +0 -0
  66. package/test/issues/23/partials/hello.hbs +0 -1
  67. package/test/issues/49/error.hbs +0 -1
  68. package/test/issues/49/front/error.hbs +0 -1
  69. package/test/issues/49/index.hbs +0 -2
  70. package/test/issues/49/layouts/default.hbs +0 -1
  71. package/test/issues/49/partial.hbs +0 -1
  72. package/test/issues/49/partials/partial-error.hbs +0 -1
  73. package/test/issues/53/default.hbs +0 -15
  74. package/test/issues/53/index.hbs +0 -7
  75. package/test/issues/53/partials/.gitkeep +0 -0
  76. package/test/issues/59/index.hbs +0 -2
  77. package/test/issues/62/basic.hbs +0 -2
  78. package/test/issues/62/block.hbs +0 -11
  79. package/test/issues/73/index.hbs +0 -5
  80. package/test/issues/73/partials/partial.hbs +0 -6
  81. package/test/issues/76/mypartial.hbs +0 -0
  82. package/test/issues/84/index.hbs +0 -1
  83. package/test/issues/84/partials/abc/def/ghi/test.hbs +0 -1
  84. package/test/issues.js +0 -476
  85. package/test/layoutSpecs.js +0 -118
  86. package/test/localTemplateOptions/data-access-template.hbs +0 -1
  87. package/test/localTemplateOptions/template.hbs +0 -1
  88. package/test/localTemplateOptions.js +0 -127
  89. package/test/multiple.js +0 -119
  90. package/test/nonExpress.js +0 -37
  91. package/test/optionsSpecs.js +0 -24
  92. package/test/views/beautify/expected.hbs +0 -9
  93. package/test/views/beautify/index.hbs +0 -2
  94. package/test/views/customExtension/layout.server.view.html +0 -1
  95. package/test/views/customExtension/partialsDir/partial1.server.view.html +0 -1
  96. package/test/views/customExtension/partialsDir/partial2.server.view.html +0 -1
  97. package/test/views/customExtension/partialsDir/subs/subPartial1.server.view.html +0 -1
  98. package/test/views/customExtension/partialsDir/subs/subPartial2.server.view.html +0 -1
  99. package/test/views/customExtension/template.server.view.html +0 -5
  100. package/test/views/disableLayoutDirective/aside.hbs +0 -1
  101. package/test/views/disableLayoutDirective/index.hbs +0 -2
  102. package/test/views/disableLayoutDirective/layouts/default.hbs +0 -1
  103. package/test/views/helpers/home/async.hbs +0 -6
  104. package/test/views/helpers/home/index.hbs +0 -3
  105. package/test/views/helpers/layouts/default.hbs +0 -1
  106. package/test/views/multiple/views1/collide.hbs +0 -1
  107. package/test/views/multiple/views1/error.hbs +0 -1
  108. package/test/views/multiple/views1/test1.hbs +0 -1
  109. package/test/views/multiple/views2/collide.hbs +0 -1
  110. package/test/views/multiple/views2/error.hbs +0 -1
  111. package/test/views/multiple/views2/test2.hbs +0 -1
  112. package/test/views/viewsDir/layouts/default.hbs +0 -1
  113. package/test/views/viewsDir/sub/directive.hbs +0 -2
  114. package/test/views/viewsDir/sub/lay.hbs +0 -1
@@ -1 +0,0 @@
1
- index
@@ -1 +0,0 @@
1
- <html>{{{body}}}</html>
@@ -1 +0,0 @@
1
- <sub>{{{body}}}</sub>
@@ -1 +0,0 @@
1
- <relative>{{{body}}}</relative>
@@ -1 +0,0 @@
1
- sub
@@ -1 +0,0 @@
1
- useLayoutInDir
@@ -1 +0,0 @@
1
- <layout1>{{{body}}}</layout1>
@@ -1 +0,0 @@
1
- <layout2>{{{body}}}</layout2>
@@ -1 +0,0 @@
1
- template
File without changes
@@ -1 +0,0 @@
1
- foo{{> emptyComment}}
@@ -1 +0,0 @@
1
- foo{{> emptyPartial}}
@@ -1,4 +0,0 @@
1
- {{!< layout.hbs}}
2
- {{> custom/empty}}
3
- {{> custom/comment-only}}
4
- {{> hello}}
@@ -1 +0,0 @@
1
- <html>{{{body}}}</html>
@@ -1 +0,0 @@
1
- {{! comment }}
File without changes
@@ -1 +0,0 @@
1
- Hello
@@ -1 +0,0 @@
1
- {{{http://google.co.uk}}
@@ -1 +0,0 @@
1
- {{{http://google.co.uk}}
@@ -1,2 +0,0 @@
1
- {{!< layouts/default.hbs}}
2
- index
@@ -1 +0,0 @@
1
- <layout>{{{body}}</layout>
@@ -1 +0,0 @@
1
- {{> partial-error}}
@@ -1 +0,0 @@
1
- {{{body}}
@@ -1,15 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>{{title}}</title>
5
- </head>
6
- <body>
7
- <h1>{{name}}</h1>
8
-
9
- {{{body}}}
10
-
11
- {{{block "meta"}}}
12
-
13
- <h2>Strangely not so weird</h2>
14
- {{weird}}
15
- </body>
@@ -1,7 +0,0 @@
1
- {{!< default}}
2
-
3
- <p>Expected behaviour (sub-template): <strong>{{weird}}</strong></p>
4
-
5
- {{#contentFor 'meta'}}
6
- <p>Unexpected behaviour: <strong>{{weird}}</strong></p>
7
- {{/contentFor}}
File without changes
@@ -1,2 +0,0 @@
1
- {{async "foo"}}
2
- {{{async "foo"}}}
@@ -1,2 +0,0 @@
1
- {{async "foo"}}
2
- {{async "foo" type="em"}}
@@ -1,11 +0,0 @@
1
- {{#async "World" inverse="true"}}
2
- <p>Hello {{output}}</p>
3
- {{else}}
4
- <p>Goodbye {{output}}</p>
5
- {{/async}}
6
-
7
- {{#async "Handlebars" inverse="false"}}
8
- <p>Hello {{output}}</p>
9
- {{else}}
10
- <p>Goodbye {{output}}</p>
11
- {{/async}}
@@ -1,5 +0,0 @@
1
- <div>
2
- <div>
3
- {{> partial}}
4
- </div>
5
- </div>
@@ -1,6 +0,0 @@
1
- <pre>
2
- <code>
3
- Hello World, I don't want any indentation
4
- second line
5
- </code>
6
- </pre>
File without changes
@@ -1 +0,0 @@
1
- <div>{{> abc/def/ghi/test}}</div>
@@ -1 +0,0 @@
1
- Testing 3 levels down
package/test/issues.js DELETED
@@ -1,476 +0,0 @@
1
- 'use strict';
2
- var assert = require('assert');
3
- var hbs = require('..');
4
- var path = require('path');
5
- var H = require('./helpers');
6
-
7
-
8
- describe('issue-22 template', function() {
9
- var dirname = path.join(__dirname, 'issues/22');
10
-
11
- it('should use multiple layouts with caching', function(done) {
12
- var render = hbs.create().express3({
13
- restrictLayoutsTo: dirname
14
- });
15
- var locals1 = H.createLocals('express3', dirname, { layout: 'layout1', cache: true });
16
- var locals2 = H.createLocals('express3', dirname, { layout: 'layout2', cache: true });
17
-
18
- render(dirname + '/template.hbs', locals1, function(err, html) {
19
- assert.ifError(err);
20
- assert.equal('<layout1>template</layout1>', H.stripWs(html));
21
- render(dirname + '/template.hbs', locals2, function(err, html) {
22
- assert.ifError(err);
23
- assert.equal('<layout2>template</layout2>', H.stripWs(html));
24
- done();
25
- });
26
- });
27
- });
28
- });
29
-
30
- describe('issue-23', function() {
31
- var dirname = path.join(__dirname, 'issues/23');
32
-
33
- it('should not pass an empty or missing partial to handlebars', function(done) {
34
- var render = hbs.create().express3({
35
- partialsDir: [dirname + '/partials'],
36
- restrictLayoutsTo: dirname
37
- });
38
-
39
- function check(err, html) {
40
- assert.ifError(err);
41
- assert.equal('<html>Hello</html>', H.stripWs(html));
42
- done();
43
- }
44
- var result = render(dirname + '/index.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
45
- });
46
-
47
- it('should handle empty string', function(done) {
48
- var render = hbs.create().express3({
49
- partialsDir: [dirname + '/partials'],
50
- restrictLayoutsTo: dirname
51
- });
52
-
53
- function check(err, html) {
54
- assert.ifError(err);
55
- assert.equal('', H.stripWs(html));
56
- done();
57
- }
58
- var result = render(dirname + '/empty.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
59
- });
60
-
61
-
62
- it('should register empty partial', function(done) {
63
- var hb = hbs.create();
64
- var render = hb.express3({
65
- partialsDir: [dirname + '/partials'],
66
- restrictLayoutsTo: dirname
67
- });
68
- hb.handlebars.registerPartial('emptyPartial', '');
69
-
70
- var pass = 0;
71
- function check(err, html) {
72
- pass++;
73
- assert.ifError(err);
74
- assert.equal('foo', H.stripWs(html));
75
- if (pass < 3) {
76
- doIt();
77
- } else {
78
- done();
79
- }
80
- }
81
- function doIt() {
82
- render(dirname + '/emptyPartial.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
83
- }
84
- doIt();
85
- });
86
-
87
- it('should register partial that results in empty string (comment)', function(done) {
88
- var hb = hbs.create();
89
- var render = hb.express3({
90
- partialsDir: [dirname + '/partials'],
91
- restrictLayoutsTo: dirname
92
- });
93
- // this fails
94
- //hb.handlebars.registerPartial('emptyComment', '{{! just a comment}}');
95
- hb.registerPartial('emptyComment', '{{! just a comment}}');
96
-
97
- var pass = 0;
98
- function check(err, html) {
99
- pass++;
100
- assert.ifError(err);
101
- assert.equal('foo', H.stripWs(html));
102
- if (pass < 3) {
103
- doIt();
104
- } else {
105
- done();
106
- }
107
- }
108
- function doIt() {
109
- render(dirname + '/emptyComment.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
110
- }
111
- doIt();
112
- });
113
- });
114
-
115
-
116
- describe('issue-21', function() {
117
- var dirname = path.join(__dirname, 'issues/21');
118
- var render = hbs.create().express3({
119
- layoutsDir: dirname + '/views/layouts',
120
- restrictLayoutsTo: dirname
121
- });
122
-
123
- it('should allow specifying layouts without the parent dir', function(done) {
124
- function check(err, html) {
125
- assert.ifError(err);
126
- assert.equal('<html>index</html>', H.stripWs(html));
127
- done();
128
- }
129
-
130
- var options = {cache: true, layout: 'default', settings: {views: dirname + '/views'}};
131
- var result = render(dirname + '/views/index.hbs', options, check);
132
- });
133
-
134
-
135
- it('should allow specifying layouts without the parent dir in a sub view', function(done) { function check(err, html) {
136
- assert.ifError(err);
137
- assert.equal('<html>sub</html>', H.stripWs(html));
138
- done();
139
- }
140
-
141
- var options = {cache: true, layout: 'default', settings: {views: dirname + '/views'}};
142
- var result = render(dirname + '/views/sub/sub.hbs', options, check);
143
- });
144
-
145
- it('should treat layouts that start with "." relative to template', function(done) { function check(err, html) {
146
- assert.ifError(err);
147
- assert.equal('<relative>sub</relative>', H.stripWs(html));
148
- done();
149
- }
150
-
151
- var options = {cache: true, layout: './relativeLayout', settings: {views: dirname + '/views'}};
152
- var result = render(dirname + '/views/sub/sub.hbs', options, check);
153
- });
154
-
155
- it('should allow layouts in subfolders', function(done) {
156
- function check(err, html) {
157
- assert.ifError(err);
158
- assert.equal('<sub>useLayoutInDir</sub>', H.stripWs(html));
159
- done();
160
- }
161
-
162
- var options = {cache: true, layout: 'sub/child', settings: {views: dirname + '/views'}};
163
- var result = render(dirname + '/views/useLayoutInDir.hbs', options, check);
164
- });
165
-
166
- it('should treat layouts relative to views directory if layoutsDir is not passed', function(done) {
167
- var dirname = path.join(__dirname, 'issues/21');
168
- var render = hbs.create().express3({
169
- restrictLayoutsTo: dirname
170
- });
171
-
172
- function check(err, html) {
173
- assert.ifError(err);
174
- assert.equal('<sub>sub</sub>', H.stripWs(html));
175
- done();
176
- }
177
-
178
- var options = {cache: true, layout: 'layouts/sub/child', settings: {views: dirname + '/views'}};
179
- var result = render(dirname + '/views/sub/sub.hbs', options, check);
180
- });
181
- });
182
-
183
-
184
- describe('issue-49', function() {
185
- var dirname = path.join(__dirname, 'issues/49');
186
-
187
- it('should report filename with error', function(done) {
188
- var hb = hbs.create()
189
- var render = hb.express3({
190
- restrictLayoutsTo: dirname
191
- });
192
- var locals = H.createLocals('express3', dirname, {});
193
- render(dirname + '/error.hbs', locals, function(err, html) {
194
- assert(err.stack.indexOf('[error.hbs]') > 0);
195
- done();
196
- });
197
- });
198
-
199
- it('should report relative filename with error', function(done) {
200
- var hb = hbs.create()
201
- var render = hb.express3({
202
- restrictLayoutsTo: dirname
203
- });
204
- var locals = H.createLocals('express3', dirname, {});
205
- render(dirname + '/front/error.hbs', locals, function(err, html) {
206
- assert(err.stack.indexOf('[front/error.hbs]') > 0);
207
- done();
208
- });
209
- });
210
-
211
- it('should report filename with partial error', function(done) {
212
- var hb = hbs.create()
213
- var render = hb.express3({
214
- partialsDir: dirname + '/partials',
215
- restrictLayoutsTo: dirname
216
- });
217
- var locals = H.createLocals('express3', dirname, {});
218
- render(dirname + '/partial.hbs', locals, function(err, html) {
219
- assert(err.stack.indexOf('[partial.hbs]') > 0);
220
- done();
221
- });
222
- });
223
-
224
- it('should report filename with layout error', function(done) {
225
- var hb = hbs.create()
226
- var render = hb.express3({
227
- partialsDir: dirname + '/partials',
228
- restrictLayoutsTo: dirname
229
- });
230
- var locals = H.createLocals('express3', dirname, {});
231
- render(dirname + '/index.hbs', locals, function(err, html) {
232
- assert(err.stack.indexOf('[layouts/default.hbs]') > 0);
233
- done();
234
- });
235
- });
236
- });
237
-
238
- describe('issue-53', function() {
239
- var dirname = path.join(__dirname, 'issues/53');
240
-
241
- it('should use block with async helpers', function(done) {
242
- var hb = hbs.create()
243
- var res = 0;
244
- hb.registerAsyncHelper('weird', function(_, resultcb) {
245
- setTimeout(function() {
246
- resultcb(++res);
247
- }, 1)
248
- });
249
- var render = hb.express3({
250
- restrictLayoutsTo: dirname
251
- });
252
- var locals = H.createLocals('express3', dirname, {});
253
- render(dirname + '/index.hbs', locals, function(err, html) {
254
- assert.ifError(err);
255
- assert.ok(html.indexOf('__aSyNcId_') < 0);
256
- done();
257
- });
258
- });
259
- });
260
-
261
- describe('issue-59', function() {
262
- var dirname = __dirname + '/issues/59';
263
- it('should escape or not', function (done) {
264
- var hb = hbs.create();
265
-
266
- function async(s, cb) {
267
- cb('<strong>' + s + '</strong>');
268
- }
269
-
270
- hb.registerAsyncHelper("async", async);
271
-
272
- var render = hb.express3({
273
- viewsDir: dirname,
274
- restrictLayoutsTo: dirname
275
- });
276
- var locals = H.createLocals('express3', dirname);
277
-
278
- render(dirname + '/index.hbs', locals, function (err, html) {
279
- assert.equal(H.stripWs(html), '&lt;strong&gt;foo&lt;/strong&gt;<strong>foo</strong>');
280
- done();
281
- });
282
- });
283
- it('should not escape SafeString', function (done) {
284
- var hb = hbs.create();
285
-
286
- function async(s, cb) {
287
- cb(new hb.SafeString('<em>' + s + '</em>'));
288
- }
289
-
290
- hb.registerAsyncHelper('async', async);
291
-
292
- var render = hb.express3({
293
- viewsDir: dirname,
294
- restrictLayoutsTo: dirname
295
- });
296
- var locals = H.createLocals('express3', dirname);
297
-
298
- render(dirname + '/index.hbs', locals, function (err, html) {
299
- assert.equal(H.stripWs(html), '<em>foo</em><em>foo</em>');
300
- done();
301
- });
302
- });
303
- });
304
-
305
- describe('issue-73', function() {
306
- var dirname = path.join(__dirname, 'issues/73');
307
- it('should allow compile options', function(done){
308
- var hb = hbs.create();
309
- var render = hb.express3({
310
- viewsDir: dirname,
311
- partialsDir: dirname + '/partials',
312
- restrictLayoutsTo: dirname,
313
- onCompile: function(eh, source, filename) {
314
- var options;
315
- if (filename && filename.indexOf('partials')) {
316
- options = {preventIndent: true};
317
- }
318
- return eh.handlebars.compile(source, options);
319
- }
320
- });
321
-
322
- var locals = H.createLocals('express3', dirname);
323
- render(dirname + '/index.hbs', locals, function (err, html) {
324
- if (err) return console.log('error', err);
325
-
326
- assert.ifError(err);
327
- assert.ok(html.match(/^Hello/m));
328
- assert.ok(html.match(/^second line/m));
329
- done();
330
- });
331
- });
332
- });
333
-
334
-
335
- describe('issue-62', function() {
336
- var dirname = path.join(__dirname, 'issues/62');
337
-
338
- it('should provide options for async helpers', function (done) {
339
- var hb = hbs.create();
340
-
341
- function async(c, o, cb) {
342
- if (o.hash.type === 'em') {
343
- cb('<em>' + c + '</em>');
344
- } else {
345
- cb('<strong>' + c + '</strong>');
346
- }
347
- }
348
-
349
- hb.registerAsyncHelper("async", async);
350
-
351
- var render = hb.express3({
352
- viewsDir: dirname,
353
- restrictLayoutsTo: dirname
354
- });
355
- var locals = H.createLocals('express3', dirname);
356
-
357
- render(dirname + '/basic.hbs', locals, function (err, html) {
358
- assert.equal(
359
- H.stripWs(html),
360
- '&lt;strong&gt;foo&lt;/strong&gt;&lt;em&gt;foo&lt;/em&gt;'
361
- );
362
- done();
363
- });
364
- });
365
-
366
- it('should allow for block async helpers', function (done) {
367
- var hb = hbs.create();
368
-
369
- function async(c, o, cb) {
370
- var self = this;
371
- self.output = c;
372
-
373
- if (o.hash.inverse === 'true') {
374
- cb(o.inverse(self));
375
- } else {
376
- cb(o.fn(self));
377
- }
378
- }
379
-
380
- hb.registerAsyncHelper("async", async);
381
-
382
- var render = hb.express3({
383
- viewsDir: dirname,
384
- restrictLayoutsTo: dirname
385
- });
386
- var locals = H.createLocals('express3', dirname);
387
-
388
- render(dirname + '/block.hbs', locals, function (err, html) {
389
- assert.equal(
390
- H.stripWs(html),
391
- '<p>GoodbyeWorld</p><p>HelloHandlebars</p>'
392
- );
393
- done();
394
- });
395
- });
396
- });
397
-
398
- describe('issue-76', function() {
399
- var dirname = path.join(__dirname, 'issues/76');
400
-
401
- it('should allow cachePartials to be called independently of render', function (done) {
402
- var hb = hbs.create();
403
-
404
- var render = hb.express3({
405
- partialsDir: dirname,
406
- restrictLayoutsTo: dirname
407
- });
408
-
409
- hb.cachePartials(function (err) {
410
- assert.ifError(err);
411
- assert.ok(true);
412
- done();
413
- });
414
- });
415
- });
416
-
417
- describe('issue-84', function () {
418
- var dirname = path.join(__dirname, 'issues/84');
419
-
420
- it('should render deeply nested partials', function (done) {
421
- var render = hbs.create().express3({
422
- partialsDir: [dirname + '/partials'],
423
- restrictLayoutsTo: dirname
424
- });
425
-
426
- function check(err, html) {
427
- if (err) {
428
- done(err);
429
- }
430
- assert.equal('<div>Testing3levelsdown</div>', H.stripWs(html));
431
- done();
432
- }
433
-
434
- render(dirname + '/index.hbs', {cache: true, settings: {views: dirname + '/views'}}, check);
435
- });
436
- });
437
-
438
- describe('issue-144', function() {
439
- var dirname = path.join(__dirname, 'issues/144');
440
-
441
- it('should repalce with async helpers even special string like $\'', function(done) {
442
- var hb = hbs.create()
443
- hb.registerAsyncHelper('special_string', function(_, resultcb) {
444
- setTimeout(function() {
445
- resultcb(new hbs.SafeString('<p><code>\'$example$\'</code> abcd</p>'));
446
- }, 1)
447
- });
448
- var render = hb.express3({
449
- restrictLayoutsTo: dirname
450
- });
451
- var locals = H.createLocals('express3', dirname, {});
452
- render(dirname + '/index.hbs', locals, function(err, html) {
453
- assert.equal('<div><p><code>\'$example$\'</code> abcd</p></div>\n', html);
454
- done();
455
- });
456
- });
457
- });
458
-
459
- describe('issue-153', function() {
460
- var dirname = path.join(__dirname, 'issues/153');
461
- it('should concat contentFor blocks with newline', function(done) {
462
- var check = function (err, html) {
463
- if (err) {
464
- done(err);
465
- }
466
- assert.equal('1\n2', html.trim());
467
- done();
468
- }
469
- var hb = hbs.create()
470
- var render = hb.express3({
471
- restrictLayoutsTo: dirname
472
- });
473
- var locals = H.createLocals('express3', dirname, { });
474
- render(dirname + '/index.hbs', locals, check);
475
- });
476
- });