-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdynamic_tests.js
186 lines (158 loc) · 5.14 KB
/
dynamic_tests.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
Tinytest.add(
"spacebars - ui-dynamic-template - render template dynamically", function (test, expect) {
var tmpl = Template.ui_dynamic_test;
var nameVar = new ReactiveVar;
var dataVar = new ReactiveVar;
tmpl.helpers({
templateName: function () {
return nameVar.get();
},
templateData: function () {
return dataVar.get();
}
});
// No template chosen
var div = renderToDiv(tmpl);
test.equal(canonicalizeHtml(div.innerHTML), "");
// Choose the "ui-dynamic-test-sub" template, with no data context
// passed in.
nameVar.set("ui_dynamic_test_sub");
Tracker.flush();
test.equal(canonicalizeHtml(div.innerHTML), "test");
// Set a data context.
dataVar.set({ foo: "bar" });
Tracker.flush();
test.equal(canonicalizeHtml(div.innerHTML), "testbar");
});
// Same test as above, but the {{> Template.dynamic}} inclusion has no
// `dataContext` argument.
Tinytest.add(
"spacebars - ui-dynamic-template - render template dynamically, no data context",
function (test, expect) {
var tmpl = Template.ui_dynamic_test_no_data;
var nameVar = new ReactiveVar;
tmpl.helpers({
templateName: function () {
return nameVar.get();
}
});
var div = renderToDiv(tmpl);
test.equal(canonicalizeHtml(div.innerHTML), "");
nameVar.set("ui_dynamic_test_sub");
Tracker.flush();
test.equal(canonicalizeHtml(div.innerHTML), "test");
});
Tinytest.add(
"spacebars - ui-dynamic-template - render template " +
"dynamically, data context gets inherited",
function (test, expect) {
var tmpl = Template.ui_dynamic_test_inherited_data;
var nameVar = new ReactiveVar();
var dataVar = new ReactiveVar();
tmpl.helpers({
templateName: function () {
return nameVar.get();
},
context: function () {
return dataVar.get();
}
});
var div = renderToDiv(tmpl);
test.equal(canonicalizeHtml(div.innerHTML), "");
nameVar.set("ui_dynamic_test_sub");
Tracker.flush();
test.equal(canonicalizeHtml(div.innerHTML), "test");
// Set the top-level template's data context; this should be
// inherited by the dynamically-chosen template, since the {{>
// Template.dynamic}} inclusion didn't include a data argument.
dataVar.set({ foo: "bar" });
Tracker.flush();
test.equal(canonicalizeHtml(div.innerHTML), "testbar");
}
);
Tinytest.add(
"spacebars - ui-dynamic-template - render template " +
"dynamically, data context does not get inherited if " +
"falsey context is passed in",
function (test, expect) {
var tmpl = Template.ui_dynamic_test_falsey_inner_context;
var nameVar = new ReactiveVar();
var dataVar = new ReactiveVar();
tmpl.helpers({
templateName: function () {
return nameVar.get();
},
context: function () {
return dataVar.get();
}
});
var div = renderToDiv(tmpl);
test.equal(canonicalizeHtml(div.innerHTML), "");
nameVar.set("ui_dynamic_test_sub");
Tracker.flush();
// Even though the data context is falsey, we DON'T expect the
// subtemplate to inherit the data context from the parent template.
test.equal(canonicalizeHtml(div.innerHTML), "test");
}
);
Tinytest.add(
"spacebars - ui-dynamic-template - render template " +
"dynamically, bad arguments",
function (test, expect) {
var tmplPrefix = "ui_dynamic_test_bad_args";
var errors = [
"Must specify 'template' as an argument",
"Must specify 'template' as an argument",
"Invalid argument to {{> Template.dynamic}}"
];
for (var i = 0; i < 3; i++) {
var tmpl = Template[tmplPrefix + i];
test.throws(function () {
Blaze._throwNextException = true;
var div = renderToDiv(tmpl);
});
}
}
);
Tinytest.add(
"spacebars - ui-dynamic-template - render template " +
"dynamically, falsey context",
function (test, expect) {
var tmpl = Template.ui_dynamic_test_falsey_context;
var subtmpl = Template.ui_dynamic_test_falsey_context_sub;
var subtmplContext;
subtmpl.helpers({foo: function () {
subtmplContext = this;
}});
var div = renderToDiv(tmpl);
// Because `this` can only be an object, Blaze normalizes falsey
// data contexts to {}.
test.equal(subtmplContext, {});
}
);
Tinytest.add(
"spacebars - ui-dynamic-template - back-compat", function (test, expect) {
var tmpl = Template.ui_dynamic_backcompat;
var nameVar = new ReactiveVar;
var dataVar = new ReactiveVar;
tmpl.helpers({
templateName: function () {
return nameVar.get();
},
templateData: function () {
return dataVar.get();
}
});
// No template chosen
var div = renderToDiv(tmpl);
test.equal(canonicalizeHtml(div.innerHTML), "");
// Choose the "ui-dynamic-test-sub" template, with no data context
// passed in.
nameVar.set("ui_dynamic_test_sub");
Tracker.flush();
test.equal(canonicalizeHtml(div.innerHTML), "test");
// Set a data context.
dataVar.set({ foo: "bar" });
Tracker.flush();
test.equal(canonicalizeHtml(div.innerHTML), "testbar");
});