This repository has been archived by the owner on Aug 5, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.js
106 lines (82 loc) · 3.85 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Declare deps.
var dust = require('../index');
var fs = require('fs');
var stringify = require('json-stringify-pretty-compact');
var assert = require('assert');
// Set up, compile and load the example component.
var templateName = 'example';
var context = {
outer: 'Outer',
passed: 'Passed!',
example: 'example',
state: {
faved: true
}
};
dust.compileFn(fs.readFileSync('test/fixtures/example.dust', 'utf8'), templateName);
// Run the tests
describe('component helper', function() {
it('exists.', function() {
assert.equal(typeof dust.helpers.component, 'function');
});
it('has strong encapsulation by default.', function() {
var code = '{@component name="example" /}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example"></div>');
});
});
it('accepts literals in params.', function() {
var code = '{@component name="example" isFeatured="true" /}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example c--featured"></div>');
});
});
it('accepts objects from the current context in params.', function() {
var code = '{@component name="example" state=state /}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example"><p>Faved!</p></div>');
});
});
it('accepts body content.', function() {
var code = '{@component name="example"}<p><em>Yay!</em></p>{/component}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example"><p><em>Yay!</em></p></div>');
});
});
it('accepts multiple bodies.', function() {
var code = '{@component name="example"}<p><em>Yay!</em></p>{:other}<p><strong>Boom!</strong></p>{/component}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example"><p><em>Yay!</em></p><p><strong>Boom!</strong></p></div>');
});
});
it('evaluates bodies in the context of the outer template.', function() {
var code ='{@component name="example"}<p><em>{passed}</em></p>{:other}<p><strong>{?state.faved}Faved!{/state.faved}</strong></p>{/component}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example"><p><em>Passed!</em></p><p><strong>Faved!</strong></p></div>');
});
});
it('handles params and bodies at the same time.', function() {
var code ='{@component name="example" isFeatured="true" state=state}<p><em>{passed}</em></p>{:other}<p>Template name is <strong>{example}</strong></p>{/component}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example c--featured"><p><em>Passed!</em></p><p>Template name is <strong>example</strong></p><p>Faved!</p></div>');
});
});
it('handles (nested) components in bodies.', function() {
var code ='{@component name="example" isFeatured="true" state=state}<p><em>{passed}</em></p>{:other}{@component name="example"}<blockquote>I am nested!</blockquote>{/component}{/component}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example c--featured"><p><em>Passed!</em></p><div class="c-example"><blockquote>I am nested!</blockquote></div><p>Faved!</p></div>');
});
});
it('cannot force the component’s context using the native syntax.', function() {
var code ='{@component:. name="example"}{/component}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example"></div>');
});
});
it('can force the component’s context via the `ctx` param.', function() {
var code ='{@component name="example" ctx=.}{/component}';
dust.renderSource(code, context, function(err, out) {
assert.equal(out, '<div class="c-example"><p>Outer</p><p>Faved!</p></div>');
});
});
});