summaryrefslogtreecommitdiffstats
path: root/spec/partials.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/partials.js')
-rw-r--r--spec/partials.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/spec/partials.js b/spec/partials.js
new file mode 100644
index 0000000..d919eed
--- /dev/null
+++ b/spec/partials.js
@@ -0,0 +1,119 @@
+/*global CompilerContext, shouldCompileTo, shouldCompileToWithPartials */
+describe('partials', function() {
+ it("basic partials", function() {
+ var string = "Dudes: {{#dudes}}{{> dude}}{{/dudes}}";
+ var partial = "{{name}} ({{url}}) ";
+ var hash = {dudes: [{name: "Yehuda", url: "http://yehuda"}, {name: "Alan", url: "http://alan"}]};
+ shouldCompileToWithPartials(string, [hash, {}, {dude: partial}], true, "Dudes: Yehuda (http://yehuda) Alan (http://alan) ",
+ "Basic partials output based on current context.");
+ });
+
+ it("partials with context", function() {
+ var string = "Dudes: {{>dude dudes}}";
+ var partial = "{{#this}}{{name}} ({{url}}) {{/this}}";
+ var hash = {dudes: [{name: "Yehuda", url: "http://yehuda"}, {name: "Alan", url: "http://alan"}]};
+ shouldCompileToWithPartials(string, [hash, {}, {dude: partial}], true, "Dudes: Yehuda (http://yehuda) Alan (http://alan) ",
+ "Partials can be passed a context");
+ });
+
+ it("partial in a partial", function() {
+ var string = "Dudes: {{#dudes}}{{>dude}}{{/dudes}}";
+ var dude = "{{name}} {{> url}} ";
+ var url = "<a href='{{url}}'>{{url}}</a>";
+ var hash = {dudes: [{name: "Yehuda", url: "http://yehuda"}, {name: "Alan", url: "http://alan"}]};
+ shouldCompileToWithPartials(string, [hash, {}, {dude: dude, url: url}], true, "Dudes: Yehuda <a href='http://yehuda'>http://yehuda</a> Alan <a href='http://alan'>http://alan</a> ", "Partials are rendered inside of other partials");
+ });
+
+ it("rendering undefined partial throws an exception", function() {
+ (function() {
+ var template = CompilerContext.compile("{{> whatever}}");
+ template();
+ }).should.throw(Handlebars.Exception, 'The partial whatever could not be found');
+ });
+
+ it("rendering template partial in vm mode throws an exception", function() {
+ (function() {
+ var template = CompilerContext.compile("{{> whatever}}");
+ template();
+ }).should.throw(Handlebars.Exception, 'The partial whatever could not be found');
+ });
+
+ it("rendering function partial in vm mode", function() {
+ var string = "Dudes: {{#dudes}}{{> dude}}{{/dudes}}";
+ var partial = function(context) {
+ return context.name + ' (' + context.url + ') ';
+ };
+ var hash = {dudes: [{name: "Yehuda", url: "http://yehuda"}, {name: "Alan", url: "http://alan"}]};
+ shouldCompileTo(string, [hash, {}, {dude: partial}], "Dudes: Yehuda (http://yehuda) Alan (http://alan) ",
+ "Function partials output based in VM.");
+ });
+
+ it("GH-14: a partial preceding a selector", function() {
+ var string = "Dudes: {{>dude}} {{another_dude}}";
+ var dude = "{{name}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash, {}, {dude:dude}], true, "Dudes: Jeepers Creepers", "Regular selectors can follow a partial");
+ });
+
+ it("Partials with slash paths", function() {
+ var string = "Dudes: {{> shared/dude}}";
+ var dude = "{{name}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash, {}, {'shared/dude':dude}], true, "Dudes: Jeepers", "Partials can use literal paths");
+ });
+
+ it("Partials with slash and point paths", function() {
+ var string = "Dudes: {{> shared/dude.thing}}";
+ var dude = "{{name}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash, {}, {'shared/dude.thing':dude}], true, "Dudes: Jeepers", "Partials can use literal with points in paths");
+ });
+
+ it("Global Partials", function() {
+ Handlebars.registerPartial('global_test', '{{another_dude}}');
+
+ var string = "Dudes: {{> shared/dude}} {{> global_test}}";
+ var dude = "{{name}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash, {}, {'shared/dude':dude}], true, "Dudes: Jeepers Creepers", "Partials can use globals or passed");
+ });
+
+ it("Multiple partial registration", function() {
+ Handlebars.registerPartial({
+ 'shared/dude': '{{name}}',
+ global_test: '{{another_dude}}'
+ });
+
+ var string = "Dudes: {{> shared/dude}} {{> global_test}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash], true, "Dudes: Jeepers Creepers", "Partials can use globals or passed");
+ });
+
+ it("Partials with integer path", function() {
+ var string = "Dudes: {{> 404}}";
+ var dude = "{{name}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash, {}, {404:dude}], true, "Dudes: Jeepers", "Partials can use literal paths");
+ });
+
+ it("Partials with complex path", function() {
+ var string = "Dudes: {{> 404/asdf?.bar}}";
+ var dude = "{{name}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash, {}, {'404/asdf?.bar':dude}], true, "Dudes: Jeepers", "Partials can use literal paths");
+ });
+
+ it("Partials with escaped", function() {
+ var string = "Dudes: {{> [+404/asdf?.bar]}}";
+ var dude = "{{name}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash, {}, {'+404/asdf?.bar':dude}], true, "Dudes: Jeepers", "Partials can use literal paths");
+ });
+
+ it("Partials with string", function() {
+ var string = "Dudes: {{> \"+404/asdf?.bar\"}}";
+ var dude = "{{name}}";
+ var hash = {name:"Jeepers", another_dude:"Creepers"};
+ shouldCompileToWithPartials(string, [hash, {}, {'+404/asdf?.bar':dude}], true, "Dudes: Jeepers", "Partials can use literal paths");
+ });
+});